- 博客(13)
- 收藏
- 关注
原创 【IO类】——读写流、文件、string对象
IO库定义了三种的IO类型:用于读写流的基本类型、读写命名文件的类型、读写string对象的类型。
2025-11-03 21:17:57
1060
原创 【C++11新特性】——智能指针
智能指针涉及到动态内存。首先在C++中从堆区申请内存需要用到new关键字和delete我们忘记了手动释放new出来的那块内存,导致造成了内存泄漏!!!这是非常不合法的行为。因此就出现了智能指针,它的智能体现在它可以自动的进行内存释放而不需要人为手动释放,极大地提升了代码的安全性、可读性和可维护性。unique_ptrshared_ptrweak_ptr二、智能指针之unique_ptrunique_ptr独自占有一整块空间即一个unique_ptr完全占有自己的那块内存空间,不可进行复制拷贝传参。
2025-06-06 00:02:55
1875
原创 【数据结构】——红黑树Red Black Tree
(1),当u为红色时,把u变色为黑,p变色为黑,g变色为红,令g为新的z(z=g),p为继续为z的父亲,循环向上调整,直到p为黑色结束或者z为根结点时变色为黑结束。2,y为黑色,x为红色:删除y一定破坏“黑路同”,可能破坏“根叶黑”“不红红”,但归根到底是缺少一个黑色结点,恰好x为红色,即直接把x变色为黑色即可。一,先查找到删除的数据的结点y,判断它的度,若度为2则去寻找y的后继结点,把后继结点的元素覆盖y,y指向后继结点;LL:删除y,以p为中心进行右旋,w变成p的颜色,p结点变黑色,red变黑色。
2025-06-03 12:00:09
1016
原创 【数据结构】——拓扑排序和关键路径
最后根据每个事件的ETV和LTV去求对应活动的ETE和LTE: 活动的最早开始时间ETE = 起点事件的最早开始时间ETV。:一个DAG图中,存在V1,V2,......,Vn个顶点,若存在Vi----》Vj的路径,必须保证Vi始终在Vj的前面,这条路径就是拓扑序列。:活动是持续性的过程,描述一般为:活动的开始和活动的结束;活动的最晚发生时间LTE = 终点事件的最晚发生时间LTV - 该活动的时长(即边权)
2025-05-18 21:44:56
750
原创 【数据结构】——最小生成树算法
因为在prim函数中对点的遍历是俩次循环(其实是一次选点次数循环加上一次遍历点的循环),它们的复杂度就是O(n*n),而邻接矩阵的遍历复杂度是O(n),即使是把邻接矩阵替换成邻接表(时间复杂度是O(n+m)),但整体的时间复杂度还是取决于对顶点的俩层循环。第二次选的点为生成树中的点的邻接点中到生成树最小距离的邻接点,并且选好后要更新它的未被加入到生成树的邻接点到生成树的最小距离;,n个顶点的连通图中,构成的生成树含有n个顶点和n-1条边;,点x到生成树的距离:点x到生成树中的点的直接边的距离;
2025-05-15 00:08:41
2283
原创 【数据结构】——树的应用之并查集
假设我们有一些数据集合,我们对这些集合有俩种操作:(1)给出俩个数据x,y,把x所在的集合和y所在的集合进行合并。(2)给出俩个数据x,y,询问x与y是否在同一个集合中。如何进行存储和表示呢?:采用父亲表示法,由于涉及到集合直接用数组下标就表示某个数,故不用结构体。:寻找俩个数据的根节点,让一个根结点做另一个根节点的孩子。:寻找俩个数据的根节点进行比较。如果相同则在同一棵树中,不同则不在同一棵树中。
2025-05-14 17:52:11
586
原创 【数据结构】——图的概念和存储
而当存储一个边时,会使得这组数据信息被重复存储俩次(比如A--->B 存储的是a的出边链表和b的入边链表,而当B--->A存储的是b的出边链表和a的入边链表)。多重邻接表与十字邻接表相反,它是对无向图的邻接表的优化,也是邻接表存无向图时数组重复存储俩次,并且多重邻接表的结构和十字邻接表的结构相似。存在俩个图G=(V,E)和G'=(V',E'),若V'是V的子集,E'是E的子集,且E'是V'中的顶点偶对的有限集,则G'是G的子图。存边采用的是链表,即链表中存储的是以同一个顶点为弧尾到达的不同的终点的编号。
2025-05-13 22:07:49
1930
原创 【数据结构】——树
父亲表示法即用来查找每个结点的父亲是谁(根结点无父亲),常用结构体数组来模拟。缺点就是:1,空间固定有限。2,不利查找到结点的孩子和兄弟是谁。
2025-04-21 22:10:43
773
原创 【数据结构】——队列
3、由于是循环队列,所以在实际中我们会留出一个空间用于判断队满的情况,但在操作过程中我们仍然认为没有多余空间(可能有点绕,需要好好想一想)。上面是一个普通的模拟队列(非循环) ,我们可以看到当队首出队一些元素后,数组中在队头指针前面的空间就被浪费掉了,而实际上我们知道这些空间是可以利用的。再规定队头指针一直指向的是队头元素的下一个位置,队尾指针一直指向的就是队尾元素(这与移动操作有关);最后,我们必须注意的是左边进队的元素永远在右边进队元素的左边方向。)来说明判满,当然这其实也是大家类似约定俗成的操作。
2025-04-16 22:29:54
743
原创 【数据结构】——链表
用数组模拟必须理解数组的知识,如下标从0开始,在a[5]实际上有效数据是a[0]~a[4]。双链表与单链表类似,其不同是增加了一个指向上一个结点的指针域pre。而在单链表中就真正用到了指针等,操作也是:初始化、增、删、查、改。循环双链表也是把尾结点的next指针指向头结点,把头结点的pre指针指向尾结点。循环单链表其实是把尾结点的指针指向头结点,其余与单链表并无差别。
2025-04-13 17:43:28
842
1
原创 【二分】求阶乘(数学+二分)
注意的是遇到5的倍数问题,如遇到5,10,15…等会必定至少提供一个因子,而遇到25会额外提供一个因子(25=5*5),可知如果遇到125,625…会额外提供更多因子(125=5*5*5,625=5*5*5*5,这是。因此我们只需要在一个阶乘中找到最小刚好满足的5的因子个数即可,在一个区间类不断去枚举一个更好的答案,符合二分特征,则可以采用二分做法。:要想到阶乘中0的个数与10有关,而10又跟2与5有关,从而得到解题思路即寻找能满足条件最小的N中满5的因子个数,这涉及到数学定理。
2025-04-09 00:43:35
427
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅