- 博客(26)
- 收藏
- 关注
原创 c++模板初步认识
生活中的车辆,有吃石油的,有吃电的,还有油电混合的,种类不相同的燃料都可以给车辆提供动力。我这边类型不同,在函数里都可以实现交换,燃料的容器是车辆,那我的不同类型也可以放到类似的容器,要用的时候拿出来,而在c++中叫他模板,利用模板可以编写与类型无关的通用代码。引子:下头三个函数都可以实现相同的功能,这块是重载了三个函数,他们的仅仅是类型不同,对于用户来说新增了类型就要写新函数。概念:函数模板代表了一个函数家族,该函数模板与类型无关,在使用时被参数化,根据实参类型产生函数的特定类型版本。
2025-02-25 15:37:43
915
原创 直接插入排序
然后i++,让end遍历,走到第二个位置,让end的下一个位置上的数给给tmp,在和end的值比较,tmp小于end,end的值往后挪,然后让tmp再和第一个位置的数比,tmp小于它,第一个再往后挪,否则第一个数不动,接着让tmp挪到第一个或者第二个位置上。end遍历到第三个数,end和它后面一个数比较,大于end往后挪,end的前面的数依次和tmp比,大了往后挪,否则数字位置不动。提炼:直接插入排序是让当前的数x跟它的下一个数tmp比较,x大,x往后挪一位呗。这里我是利用画图,来模拟实现直接插入排序。
2025-02-08 22:01:19
323
原创 字符串相加
通过三目操作符,取到整数,然后将整数相加,大于10进位(进1)。这样的话,得到的整数不就是乱序的吗,包不符合题目要求。我当时看到这题,并没有想到乱序这点,说实话是看答案补充的。end1标记字符串1中的整数位置,end2标记字符串2的整数位置。利用end1加end2,如果有短字符,短字符的end先出来,余下位置用0补齐。取max,max是取长字符占的空间,这样避免了扩容。因为可能有进位,多了一位,给它加1,让它空间大一点。看它报了啥错误,哦,是输出顺序反了。有取模,除法取整,数据结构里的尾插,三目操作符。
2024-12-01 23:16:51
121
原创 c++内存管理
malloc只会开空间,并不会初始化;new既会开空间,又会构造函数。free只会释放空间,而delet既可以析构函数,又可以释放空间。通过new和delete操作符进行动态内存管理。不仅可以申请,释放空间,还可以多次申请,释放空间。malloc对应free,new对应delet。1. C/C++内存分布。2. C++内存管理方式。
2024-11-23 13:15:27
140
原创 排序---冒泡排序
先给冒泡排序给出定义:是在待排序的序列,两两进行比较,如果前面的数大于后面的数,交换这两个数,否则就不交换,接着进行下去,直到完成排序。第三轮,通过数字两两比较,比较了1次(1= 4-1-2),比较出了最大值8,把数字8放到最后,此时余下一个数,这个数也就是最后一个数,直接取下1。第一轮,通过数字两两比较,比较了3次(3= 4-1-0),比较出了最大值8,把数字8放到最后,此时余下三个数;第二轮,通过数字两两比较,比较了2次(2= 4-1-1),比较出了最大值5,把数字5放到最后,此时余下两个数;
2024-11-14 21:45:43
303
原创 c++笔记(缺省参数+函数重载+内联函数)
• inline对于编译器⽽⾔只是⼀个建议,也就是说,你加了inline编译器也可以选择在调⽤的地⽅不展开,不同编译器关于inline什么情况展开各不相同,因为C++标准没有规定这个。• ⽤inline修饰的函数叫做内联函数,编译时C++编译器会在调⽤的地⽅展开内联函数,这样调⽤内联函数就需要建⽴栈帧了,就可以提⾼效率。定义,在使⽤空值的指针时,都不可避免的会遇到⼀些⿇烦,本想通过f(NULL)调⽤指针版本的。调⽤的短⼩函数,对于递归函数,代码相对多⼀些的函数,加上inline也会被编译器忽略。
2024-11-04 20:50:15
208
原创 排序--计数排序
那顺利让数据放入数组,让数归位,可以接着往下走咯。可以考虑记录出现数的次数咯。你看,我正好把负数放进数组,正好解决负数没地放的问题吧!//初始化range数组中所有的数据为0。嘿嘿,我略知一二,我就说叨说叨计数排序吧!在回答上面的问题之前,我们在看个例子。//统计数组中数据出现的次数。计数排序是统计记录出现的次数。//找max,min。我们又该怎么玩计数排序呢?
2024-10-15 22:19:35
293
原创 排序--归并排序
肯定不是随便拆的,有迹的拆,那怎么拆呢?观察图解,它把记录拆成两半,那我们拆分的时候是不是找能把他拆分两半的数呢?我也是尽我所能地画,实际合并全部流程太过复杂,我自己弄的时候是差点崩溃,抱歉,能力有限。看了上头一大串文字,是不是绕晕了,嘿,我也绕晕了。现在有八个区间,八个区间内都是单个数,已经分干净,此时不用分。像是二叉树的递归,当然,它就是的。这时有四个区间,四个区间各两个,还是没分干净,紧接着分呗。分了之后左区间有四个,右区间有四个,没分干净,接着分。归并排序分成两个部分,一个是分,一个是治。
2024-10-12 01:02:30
220
原创 快速排序---非递归
递归会有问题存在排序的递归每层递归个数套用公式logn,那n = 1000,logn比较小,那n= 1000000时,logn又比较大,那复杂度就很高。入栈之后再取出数据,将这部分数据快排一下,为了跟hoare版本的快排区分,这里用双指针来实现快排吧。上来给了一组记录,我们先找出基准值,用二分法将他分成两部分,这里可以用hoare,填坑法,前后指针三个方法中任意一个实现。玩快排的非递归,我们借助栈,栈怎么来的呢?没有栈给它创建栈呗,先创建栈,关于栈的代码不是这次重点,我就直接给出喽。大家结合上头图解看吧。
2024-10-09 22:49:12
200
原创 快速排序---前后指针法
快速排序--前后指针法,它是用前后指针法来实现快速排序,接下来看一看如何实现它的吧。//【right, left】找基准值mid。//lomuto前后指针法。
2024-09-28 16:52:18
264
原创 排序---快速排序之hoare版本(优化版)
怎么实现Hoare版本的快速排序呢?其实我这个图细看的话,是有很大毛病的,我之后会纠正,这里引用是讲一下这个排序思想。一:快速排序从字面上理解是很快速进行排序,我找到了专业的定义,单纯看文字,是不是难以理解,感觉蛮抽象,那我们画图来看看它吧。后人在Hoare基础上提出不同的快速排序实现方法,分别是。其中Hoare版本就是今天将会实现的快速排序。四:快速排序之hoare版本的时间复杂度。Hoare版本,挖坑法,前后指针版本。三:快速排序之hoare版本的实现。这个是代码雏形,存在有待修改的地方。
2024-09-22 21:30:28
361
原创 排序----直接选择排序
全找完后,i往后走一个,j往前走一个,重复以上步骤。我们可以这样搞,直接把mini下标给到maxi,让maxi下标位置跟end下标交换,让mini下标跟begin交换。上头的直接选择排序实现过程时间复杂度比较高,有低一些的时间复杂度的代码吗?下面是我分析过程,大家可以对照着这张图看,也就是实现直接选择排序的思路的图。然后我弄了一个乱序的记录,把他弄成升序,利用以上的思想,方法加代码实现的。什么是直接选择排序,直接选择排序又怎么去实现呢?说完核心思想,对这玩样有了皮毛的了解,怎么用它呢?怎么解决这个问题呢?
2024-09-16 17:02:27
179
原创 排序———直接插入排序和希尔排序
上头图中希尔排序的思路是排完第一组数,在排第二组,接着排第三组,依次往下排,这样排的话,比较浪费时间,有更好的方法吗?我们发现,直接排序最差的时间复杂度是o(n^2),那么能不能优化一下呢?当然是可以的啦,那怎么优化呢?它是怎么推理出来的呢?有兴趣的小伙伴可以看看我后面会写关于推理希尔排序时间复杂度的文章,敬请关注。过程有些复杂,讲的过程中,可能有不足之处,请指正。写希尔排序的时候,也有讲究的,具体有啥,请往下看。知道了希尔排序,那我们怎么用希尔排序呢?然后是希尔排序时间复杂度是n^1.3。
2024-09-12 23:15:23
250
原创 二叉树前序遍历
我们要统计二叉树的节点个数,依据个数申请空间。我们明确了进行前序遍历首先要建树,在遍历。统计二叉树的节点个数。实现二叉树的前序遍历。
2024-09-06 21:47:06
222
原创 二叉树-另一课树的子树
弄两个指针分别指向树A,树B,一开始指向树的根节点,如果根节点的值不相同,开始递归呗,递归根节点左子树,根据上头给出的示例1,树A的左子树节点是4,和树B的节点数值上是相同,接着递归4的左子树,都是1,是相同的,接着递归1的左子树,都是NULL,然后回溯到4返回true,再递归4的右子树,是2,递归子树B节点4的右子树,是2,哎是相同的,节点2继续递归呗,递归后是NULL,是相同的,那带着好消息回溯呗,回溯到4.开始指向树的根节点,如果根节点的值不相同,开始递归呗。好,我公布答案啦,根值不同,继续递归,
2024-09-05 00:29:17
204
原创 链式二叉树
一:什么是链式二叉树二:链式二叉树实现三:链式二叉树遍历链式二叉树遍历:前,中,后序遍历层序遍历一:什么是链式二叉树链式二叉树重点在二叉树,本质是二叉树,什么是二叉树呢?链式二叉树要用到链表结构表示的实现链式二叉树,首先观察二叉树,一个二叉树由根节点,左子树,右子树构成我们先要申请一块空间吧,用来链式二叉树吧,申请空间代码之前写了许多遍,这里不在赘述了有了二叉树占据空间,然后往里头放数据呗!
2024-08-29 18:13:35
625
原创 队列的实现
要实现队,首先要知道队列的结构,在图中看出,队列依靠链表实现的,队列结构中含有链表的结构,即含有数据,节点,物理地址,而数据,节点则是队列结构两大法宝,初次以外,队列还要用phead,ptail两个指针实现数据插入,删除的操作。常规方法是用计数器,遍历一下,每遍历一个累加依次,然而在这行不通,因为队列不可以遍历的,那怎么办呢?有了列表的结构,相当于有了一个框架,还得往里头填内容,怎么填呢?如果队列是空,头节点,尾节点都是空了,直接返回头节点为空。我们用一个方法叫,保留队列有效数据。入队列,size加加;
2024-08-09 01:28:32
482
原创 用栈实现队列
总体思路:开出两个栈,先将数据按照次序放入其中一个栈中,而另外一个栈什么都不放,处于置空状态。返回队列开头的元素,首先要实现队列嘛,我们已经实现,拿来用就行,而出栈的元素即为开头元素,直接返回出栈的元素不就可以。栈是一种特殊的线性表,只允许在固定的一端进行插入删除元素操作,进行数据插入,删除的一端叫做栈顶,另一端叫做栈底。接着把栈popST出栈,出栈顺序为1,2,3,这会儿栈已经实现了队列。而队列具有先进先出特征。栈,队列看着没啥关系,如何用栈实现队列呢?有了栈,有了总体思路,那就可以开始干了。
2024-08-05 23:14:27
1121
原创 设计循环队列
时:定义我们需要用到的参数,在这道题,则要用到参数front,rear,指针*arr, 样本空间capacity。队列有两种特殊状态,一种是队列满了,一种是队列为空,那如何判断这两种状态呢?题目描述有线性结构表,那可以用顺序表,链表,用什么结构来实现循环队列呢?有了这些参数,就可以开始。循环队列长什么样子呢?
2024-08-05 00:34:33
223
原创 实现双向循环链表
先插新节点,因为尾插入新节点对链表没啥影响,newnode前趋指针指向尾,后趋指针指向哨兵位,将为节点后趋指针指向newnode,phead前趋指针指向newnode,这样完成了尾插。定义一个双向循环链表,我们先创建哨兵位,哨兵位即为头节点,它并不存储有效数据,只起到占位置的作用,然后在将所需数据接到头节点之后。我们知道双向循环链表头节点,循环,也就是有哨兵位,前继指针,后继指针,同时他们是定义双向链表节点的结构三元素。头删,删除的是有效节点,即哨兵位之后的节点,下图中,要删的节点是d1。
2024-07-27 16:13:12
280
原创 链表带环问题
slow,fast同时从起始节点开始走,如上图,在环中他两会相遇,fast,slow先走L步到入环节点E,fast指针先出环,即在慢指针入环不久后与快指针相遇,在最差情况下快指针和慢指针间距为步长L,之后快指针和慢指针每走一次间距缩小一格,直至相遇。在实现链表带环之前,我们可以先想想运动会上比长跑比赛,在长跑比赛中,我们看见,有的选手出现套圈的情况,他跑着跑着追上了跑在他后面的选手,从而在跑步中相遇。可以定义两个指针,一个慢指针slow,一个快指针fast,慢指针一次走一步,快指针一次走两步。
2024-07-23 12:11:14
286
1
原创 【无标题】c语言—文件操作
我们使用word时,写了一大段文字,此时文档存在内存,当我们退出word的时候,我们所写的文字自然就不存在了,等下次打开word,文字又得重新写入,如果使用这样的word就很难受。看fclose函数的作用,不难得知,fclose是关闭文件当中的流,我们之前好像没见过流,不知道流是啥东西呀,那么我们引入了新的概念流,那流是什么呢?我们使用过word的人士会出来说,那在我们写完文字,打开保存,文字被自动保存到文件,文件是将数据存放到电脑的硬盘上,这样一来做到了数据的持久化。作用:让文件指针回到文件的起始位置。
2024-02-07 22:31:11
339
1
原创 自定义类型,结构体,枚举, 联合的总结
通过代码运行,不难看出,#define在宏定义时定义的值直接赋值给main函数内部的变量,而宏定义赋值是不可以修改的。我在介绍结构体之前先铺垫一些知识,我们要了解结构是什么,结构是一些值的集合,这些值称为成员变量。以下是一个简单的结构体。有两点原因,一,移植原因,不是所有的硬件平台都能访问任意地址上的任意数据的,某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。细心的同学会发现,第三个结构体不一样,它其实是就结构体自引用,自己调用自己的过程。性别,男,女,保密,必然可以一一列举。
2024-01-19 12:12:37
329
1
原创 关于字符函数以及内存操作函数的学习总结
我以上介绍的是长度不受限制的字符串函数,有没有长度受限制的字符串嘞。紧接着是字符查找函数,一个是strstr函数,它的作用是在一个字符串中找另一个字符串相同的字符,可以理解成找相同,但里头大有门道,我在实现strstr中,字符串二在字符串一找一样字符时跳过不同的字符的位置,我找目标字符的位置则是不同字符的位置一步步往后走,我此时必须利用两个指针,一个指向不同字符的指针,一个指向相同位置的指针,记录下他们的位置,然后字符串二也用指针记录每个字符的位置,具体实现过程就不说了,因为太长,我闲浪费时间。
2024-01-17 17:02:17
355
原创 模拟实现strcpy(非常易懂)
好神奇哦,arr1中的hello全部复制到arr2中了,看到这里,有些同学不免产生疑问,屏幕上显示的是hello,为什么没有\n呢?我想到一个问题,小明蛮粗心,他写了代码,他认为这串代码是对的,实际上存在错误的。接下来,我们引进新的函数断言。有空指针后程序报错了,咦,怎么会出现这个问题呢,我们又该如何解决这个问题呢?strcpy我们并不陌生,而使用strcpy中会出现复制错误,复制地方错误,又该如何解决这些错误呢?有的小伙伴提出疑惑了,const是啥嘞,有啥作用嘞,之后我会专门出一个博客讲解,别急哟。
2023-12-11 01:18:53
118
1
原创 编程界小白
我是高三毕业的暑假里,无意间看到某站的编程教学视频,第一次接触到编程,我通过听编程达人生动有趣的讲解,我对它产生浓厚的兴趣。上了大学,我上的专业课里有c语言,c语言十分有趣,我上课十分认真听讲,虽然很多知识听不懂,但我课下去翻阅资料,自己去搞懂学习中遇到的困难,在这个过程中我很有成就感。接着是比较现实的事,我在编程这件事上花多大精力,我是编程小白,在编程上有很多空白,可能要花更多的时间在编程学习上,所以我给自己定下每周学习编程相关知识不少于21小时。大家好,我叫蔡仁玮,普通本科生一枚,在读大二。
2023-08-24 21:32:18
56
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人