- 博客(35)
- 收藏
- 关注
原创 c++数据结构之c++11(三)
注:sizeof...是个操作符,可用于求可变参数模板实例化以后,参数包里参数的个数:如果想要把实例化以后,参数包里的数据(实参)取出来,很多人想到的是这样的方法:但这样是不支持的。此时若要解析出参数包的内容,需要进行包扩展:玩了一波递归,让参数包第一个参数传给x,其余参数传给第二个参数包args,然后逐个逐个取参数包首参数:但这里的递归属于编译时递归包的展开,不属于运行时的递归,运行时的递归自己调用自己,连函数参数的数量,种类都是一致的;而递归包的展开,每一层递归的参数数量是在减少的,且递归包里的参数数据
2026-06-14 15:42:39
279
21
原创 C++数据结构之红黑树
Ⅰ.a,b,c,d,e,f子树全为空,c为新插入节点此时d,e,f子树bh = 0Ⅱ.c不是新插入节点,为之前的g节点(黑色)此时d,e,f子树bh = 1新插入节点的插入位置在a,b的4个子节点里选一个。Ⅲ.c不是新插入节点,为之前的g节点(黑色)但d,e,f子树的bh = 2无论子树d,e,f的bh被设计的有多大,子树变的多复杂,万变不离其宗,在处理时都向上,c移到当下子树g节点处,反复将上面子树的父亲,叔叔变黑,爷爷变红,直到整棵树满足红黑树规则。u为空,或者u存在且为黑。
2026-05-15 12:06:02
592
30
原创 c++数据结构之AVL树
既然左右子树,那么这棵树就接近一个满二叉树的状态,所以它的高度就是可控的,为。那么增删查改,也就是说,对比普通二叉搜索树那种极端高度差(一棵子树有接近n的高度,而另一棵几乎没有节点,效率为O(N))的情况,效率有极大的提升。
2026-05-08 22:10:24
700
27
原创 cpp数据结构之map
map是一个模板类。它的底层仍旧是一棵的红黑树(平衡二叉搜索树),但每个节点存在两个值(),。其中,key参与二叉树增删查改,决定了二叉树的结构,。但value是可以改变的。其中模板参数Key就是key的类型,T就是value的类型。那么,使用什么存储key和value呢?答案是pair类模板。
2026-04-29 17:45:56
543
19
原创 栈和队列的实现
stack:queue:这两个类模板利用container类型的成员变量_con,就能将相关容器的接口转换为stack或queue的接口。也就是并不需要从0实现栈和队列,将list,vector...容器拿过来,通过这两个类模板转换,即可实现。注:container是一个模板参数,可支持不同种类容器。为啥构造一个栈或队列的对象时,可以只传一个T类型,而不用传container的类型?原因在于在实现类模板时,已经给了container的缺省值。从两个图片可以看出,stack的默认适配容器是vector,因为v
2026-04-05 08:20:06
424
19
原创 list的实现
以l2,l1为例,范围for会编译不通过,原因在于l2这个变量并未被初始化,没有哨兵位,或者哨兵位的指向并不满足初始化的形式(_head->_next = _head,_head->_prev = _head),这样的l2是无法使用push_back的。这里的const迭代器所要实现的,是使迭代器所指向的内容无法修改,而非迭代器本身无法修改,所以要单独实现一个迭代器,而非单纯在iterator前添加一个const那么简单。而我们实现的是普通类型的迭代器,所以这里的范围for是不支持的。
2026-03-29 14:04:46
489
21
原创 vector
注意:vector是一个实现顺序表的,在构造一个对象时一定要。且使用vector时要包含头文件:#include<vector>。
2026-03-16 16:54:01
349
17
原创 oj——模拟加法
让add存储当下两个string相同位上两数的和。用一个新的stringres去存储这一位上记得进位:也就是让add /= 2,当某一个string a中的下标,就不让add += a[i],以达到+0的效果,所以最后res是倒序,记得用reverse转成正序。
2026-03-14 21:40:41
218
7
原创 string的实现
注意:这个类的成员函数中,形参里,普通类型(char)的参数不用带const,因为是传值调用,变的是副本,不必担心原件被改变。而指针类型的参数需要带const,因为可以顺藤摸瓜,通过指针去改变指向空间里的数据。
2026-03-08 20:31:34
295
12
原创 C++的模板
定义模板参数类型的关键字:class或typename,二者用法相同,没什么区别。\template里定义一个T,可对应一种类型。假如调用模板,模板里只有一个T,传参的时候,传了两个不同类型的数据,就会出错。模板具有一个机制:实参会将模板产生的函数的T推演为其对应的类型通过实参i将T1推演为int,通过实参a将T1推演为double类型,但模板参数列表中只有 一个T1然后就左脑互博右脑了。当出现与模板名字相同,其他条件也相同的函数,此时若调用,则会优先调用函数。毕竟函数是现成的,而调用模板后,模板还要自行生
2026-03-02 14:56:14
268
9
原创 c++类和对象
public在类外可以供人访问或使用,而另两种不行。默认情况下(没给访问限定符),类里的成员是私有的。注意:Ⅰ.与c语言中结构体类型(struct + 结构体名)不同,c++里struct和class定义类的类型就直接是类名,不过c++可以兼容c,也就是说也可以写成struct+结构体名!!同时类里可以加入函数。只是struct定义类里默认限定符是public,而class默认是private。
2026-02-16 16:22:51
634
3
原创 多种排序算法
首先下标的区间是[0,n-1],但为什么i无法取n-1呢?因为在该算法中,要插入的数据,即tmp,所对应的下标,始终是end+1;则需要对序列最后一个元素排序时,其下标为end+1,而end = n - 2(即倒数第二个元素的下标)。同时在代码中,我们始终让end每一趟初始值 = i,以实现for循环的遍历。所以在遍历最后一个元素时,i = n-2。
2026-01-14 22:29:17
649
2
原创 二叉树的遍历
所以我们在看一棵树时,要不断不断将它分解为根,左子树,右子树三个部分。->NULL(右)->NULL(右)->4->5->NULL(左)->NULL(右)->6->NULL(左)->NULL(右)所以遍历的结果就是:1->2->3->NULL(左)遍历一边就一条路走到黑(到一边的NULL)为止。根->左子树->右子树,
2025-12-06 12:40:29
299
1
原创 向下调整建堆和向上调整建堆的时间复杂度
利用等比数列求和公式:利用等比求和公式:N = 2^h-1显而易见,向下调整算法的效率是远高于向上调整的,同时对于向下调整,每层节点数越多,该层总的调整次数就越少,而向上调整则是相反。
2025-11-29 12:05:01
350
20
原创 堆的实现及应用
1.逻辑上:本质是一个完全二叉树(除最后一层外,其他各层节点达到了。大堆:上下两个有联系节点间,父节点的值 >= 子节点。小堆:上下两个有联系节点间,父节点的值 <= 子节点。,毕竟计算机除法是取整不留余数的。,且最后一层节点按下标,从。2.物理上:本质为数组。左到右依次按顺序排列。
2025-11-19 20:59:37
865
2
原创 printf,scanf ;fprintf,fscanf;sprintf,sscanf的区别
参数),只要将fprintf的第一个参数换为stdout就能做到跟printf同样的效果。sprintf增加了一个。2.同上,将fscanf的第一个参数换为stdin,可获得和scanf一样的效果。因此,fprintf比printf的作用范围更广(增加了一个。注:格式化就是已拥有自己类型(%d,%c.....)的数据。参数,同时sprintf只为内存服务,因此无需打开关闭文件。1.因此,sscanf与sprintf在逻辑上相反。一.几个printf的对比。二.几个scanf的对比。
2025-08-07 17:51:42
329
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅