
数据结构
文章平均质量分 91
敲上瘾
热爱生活,热爱学习,热爱世界
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
BFS(广度优先搜索)——搜索算法
BFS,也就是广度(宽度)优先搜索,二叉树的层序遍历就是一个BFS的过程。而前、中、后序遍历则是DFS(深度优先搜索)。从字面意思也很好理解,DFS就是一条路走到黑,BFS则是一层一层地展开。原创 2025-02-03 10:14:43 · 3370 阅读 · 59 评论 -
哈希表——unordered_set和unordered_map的封装
哈希函数:就是让数据与储存位置建立一种映射关系,通过这种映射关系就能够快速找到某个数据储存的位置。哈希冲突:不同的数据可能会映射到同一块区域,那么先储存的数据存到了该位置,后储存的数据的位置就被占用了,这两个数据产生哈希冲突。原创 2024-10-28 12:05:31 · 3467 阅读 · 76 评论 -
红黑树的理解与实现(详解)
红黑树规则(重点!红黑树的性质都由以上4点规则决定的,其中的一个性质:红黑树最长路径的节点数量一定不会大于最短路径的两倍。这使得红黑树虽然不是完全平衡但高度差没有那么大,查找效率依旧是longN级别的。红黑树为什么能实现最长路径不会超过最短路径的两倍呢?我们可以想一想如果其中任意一条路径有n个黑节点,最短路径的颜色是然后分布,最长路径颜色又是然后分布的呢?其实很简单根据第4条规则我们可以最短的路径的节点不可能低于n个,(即最少的时候为n个黑节点)。原创 2024-10-19 11:17:16 · 1005 阅读 · 82 评论 -
AVL树的创建与检测
什么是AVL树?其实它就是一颗平衡的二叉搜索树,我们都知道一颗二叉搜索树在极端情况下会退化为单支(和链表同样的结构),那么它的查找效率就会变为O(N),AVL树的就是通过一些操作来防止这种退化,从而使查找效率保持在O(logN)。对一个AVL树操作的时候首先就是需要知道它是否平衡,所以可以在节点上多增加一个变量用来储存左右子树的高度差,这个数据我们就称之为平衡因子。(即平衡因子=左子树的高度-右子树的高度)平衡因子只是起到一个辅助的作用,也可用其他方式。原创 2024-10-05 11:09:59 · 1117 阅读 · 87 评论 -
set和map结构的使用
如果快指针与慢指针相遇,则有环并记录相遇点,找两个速度相同的指针一个从头开始走,一个从相遇点开始走,那么它们相遇时的点就为环的入口点。方法二:使用一个指针从链表的头走到尾,并且使用一个set容器,每走一步判断set中是否已存入该值,如果没有则存入,如果有那么这个链表一定有环并且该点就是环的入口点,直接返回该值即可。map和set的区别:set一块区域只储存一个关键字(记为key),而map储存的是一个key和value,key和value是一个映射关系,通过key可以找到对应的vaule。原创 2024-09-28 09:16:52 · 1276 阅读 · 85 评论 -
二叉搜索树
左右⼦树也分别为⼆叉搜索树如下:⼆叉搜索树中可以⽀持插⼊相等的值,也可以不⽀持插⼊相等的值,具体看使⽤场景定义。原创 2024-09-24 07:58:06 · 866 阅读 · 79 评论 -
二叉树(详解)
二叉树,完全二叉树,堆,满二叉树,树形结构,父子结点下标计算,树的储存现实中的二叉树,堆的计算,二叉树的储存,父结点,子结点原创 2024-05-23 09:55:46 · 1772 阅读 · 158 评论 -
priority_queue模拟
priority_queue是C++标准库中的一个容器适配器,用于实现优先队列(priority queue)的数据结构。优先队列是一种特殊的队列,其中的元素按照一定的优先级进行排序,每次取出的元素都是优先级最高的。它的优先级是可以通过传入参数自己调整的,它的底层实现通常使用堆(heap)数据结构。主要特点元素有序:队列中的元素会根据其优先级进行排序,优先级最高的元素总是位于队列的头部(或称为队首)。原创 2024-08-29 07:20:53 · 1209 阅读 · 95 评论 -
堆(建堆算法,堆排序)
堆就是完全二叉树,而且是一种特殊的完全二叉树它需要满足每一个父节点都大于子节点,称为大堆或每一个父节点都小于子节点,称为小堆。而对兄弟节点之间的大小关系并没有要求(为此它并不是有序的)。原创 2024-05-27 07:45:48 · 2491 阅读 · 194 评论 -
string模拟实现
string本质可以理解为储存char类型的顺序表,其中string的迭代器用一个char*就可以解决。所以string类成员变量如下:这里用了一个命名空间是为了区分库里面的string。接下来就对需要实现的函数一一讲解。原创 2024-08-17 12:01:22 · 1097 阅读 · 0 评论 -
二叉树创建和遍历
二叉树遍历,广度优先遍历,深度优先遍历,层序遍历,二叉树总节点个数计算,二叉树深度计算,叶子节点个数计算原创 2024-06-03 10:50:31 · 2241 阅读 · 133 评论 -
链表经典面试题
反转链表,回文链表,相交链表,环形链表,带环链表,合并两个有序链表,双指针,快慢指针,面试题,栈空间,追击问题,中间节点的查找,暴力算法,结构体指针数组,数据结构,OJ题原创 2024-05-06 11:51:01 · 3638 阅读 · 203 评论 -
链表创建的陷阱与细节(详细讲解)
链表 c语言 java c++ 数据结构 链表传参问题 优先级 二级指针传参 链表的结点前驱丢失问题 链表的缺陷 指针做参数的目的 头插 尾插 链表的增删查该原创 2024-04-15 10:06:32 · 1589 阅读 · 160 评论 -
栈和队列OJ题
如果要用队列实现栈的话,使用一个队列是肯定不行的,队列结构是先进先出,栈结构是先进后出,所以我们要做的就是使用两个队列实现元素的先进后出的功能,要实现出栈操作我们只要,把左边栈的元素逐个导入右边队列中,直到剩下最后一个,再将它取出相当于出队操作。End和Head指向同一位置的时候栈为空的情况,比如原来队列需要的是k个空间,那么我们可以创建k+1个空间,那么我们就可以。用栈实现队列也就是使用栈来实现先进先出的效果,该操作用一个栈是无法完成的,我们考虑用两个栈,栈a用来模拟入队操作,栈b来模拟出队操作。原创 2024-05-20 10:03:58 · 971 阅读 · 78 评论 -
队列(详解)
队列(Queue)是一种常见的数据结构,它按照先进先出的原则管理数据。这意味着最先进入队列的元素将被最先移出队列,类似于现实生活中排队的场景。在队列中,数据项被添加到队列的一端,称为队尾,而从队列中移除数据项的操作则发生在另一端,称为队首。新元素被添加到队列的尾部,并且从队列中移除元素时,总是从队列的头部开始。队列常用于需要按顺序处理数据的场景,比如任务调度、缓冲等。原创 2024-05-12 21:52:31 · 1323 阅读 · 0 评论 -
栈结构(详解)
栈结构,数据结构,链表,顺序表,压栈,出栈,先进后出,销毁栈,取栈顶元素,LIFO原创 2024-05-10 13:45:27 · 1140 阅读 · 167 评论 -
顺序表(详解)
线性表是指在逻辑结构上是线性的,线性表有静态顺序表,动态顺序表,单链表,双链表等。而顺序表就相当于数组,它的储存结构和数组相同,在逻辑结构和物理结构上都是线性的。静态顺序表就是一个数组,它的大小是在定义的时候就决定好的,不可在程序运行后改变,具有局限性。动态顺序表的内存是需要动态开辟的需要用到动态开辟函数,而通过realloc函数可以对它的内存根据需要调节,比较灵活,现在我们主要来学习一下动态顺序表。int size;//记录arr数组中已储存元素的个数}SL;原创 2024-04-08 11:45:00 · 949 阅读 · 0 评论 -
一.排序问题 及 二分法查找。
从所有个元素中找出最小的元素与第一个元素交换,那么现在第一个是有序,我们从第二个开始找,找到最小的一个与第二个元素交换,现在前两个就是有序的了,以此类推循环下去直到进行到最后一个这串元素就排好了。原创 2024-01-10 22:53:16 · 3614 阅读 · 4 评论