数据结构
文章平均质量分 95
将从基础到进阶的数据结构详细讲解
闲晨
穷且益坚 不坠青云之志
展开
-
手搓交换排序、归并排序、计数排序
不同于hoare版本的找基准值,通过挖坑法,在循环里,当left == right就直接跳出,hoare版本的left和right相等时需要判断,当前它们所指的值比基准值大还是小,而挖坑法就不需要考虑,left和right相等时,同时指向的位置是一个坑,坑内不存在有效数据,最后直接将基准值填坑即可。先根据最大值最小值的差值开辟空间,若是根据最大值开辟,当最大值为109万,最小值为100,一共有10个数据,此时根据最大值直接开辟空间会很浪费,109个整形大小的空间,只用来存放10个数据。原创 2024-08-02 15:52:55 · 2261 阅读 · 64 评论 -
详解数据结构之二叉树(二叉链,使用递归)
详细说明二叉链的创建与销毁,如何遍历二叉树的4种办法,前序遍历、中序遍历、后序遍历、层序遍历,以及如何处理节点与节点之间的关系原创 2024-07-25 22:10:41 · 2692 阅读 · 61 评论 -
数据结构:栈
满足栈的特性,只有先进后出的特性,不能遍历,也就不能遍历打印,也不能随机访问。原创 2024-07-19 15:12:46 · 1566 阅读 · 27 评论 -
数据结构之单链表(赋源码)
线性表的顺序存储结构,有着较大的缺陷线性表的链式存储结构就可以解决这些问题,首先链式存储结构并不需要增容,而是使用多少数据申请多少空间,这一点就避免了时间和空间的浪费。原创 2024-07-13 09:46:02 · 1645 阅读 · 8 评论 -
详解数据结构之队列、循环队列(源码)
队列属于线性表队列:就好比如,我们在排队买东西时排队,第一个先来的第一个买,最后一个到的最后一个买,这里的队列也是满足先进先出,后进后出的规律(First In First Out),允许插入数据的一端叫做队头简称入队列,允许删除数据的一端叫做队尾简称出队列。队列的存储形式:顺序存储结构,实现循环队列 ,队列长度时固定的链式存储结构,实现不循环队列,队列长度理论上是无限大的。原创 2024-07-20 21:38:29 · 1619 阅读 · 36 评论 -
详解数据结构之二叉树(堆)
如图:这两颗树就不是树形结构,根节点父节点:若一个节点含有子节点,则称这个节点为字节的的父节点,如图9为12个父节点。子节点/孩子节点:一个节点含有父节点那这个节点就为孩子节点,如图12.节点的度:一个节点右多少个孩子节点那他的度就为多少。树的层次:从根开始定义为第一层,根节点的子节点为第二层,以此类推。树的深度、高度:树的最大层次,如图,树最大有4层,那树的深度为4。叶子节点:度为0的节点为叶子节点。分支节点:度不为0的节点。兄弟节点:具有相同父节点的节点互称为兄弟节点。原创 2024-07-22 19:33:56 · 2661 阅读 · 54 评论 -
数据结构之双向链表(赋源码)
总的来说,在实现双链表的算法时,在插入和删除上优先考虑的是插入一个节点会影响到那些节点、删除一个节点又会影响到那些节点,以及被影响节点的指针的指向。这里最好画图加以理解。在插入、删除、查找等功能里均使用assert断言,这样做的目的是提高函数的健壮性、而不是在传递空指针时函数无法解决而产生一系列未知异常的情况。还强调了在实现函数功能是统一双链表的一致性、这样虽然保证了所有函数传递的都是一级指针,但不可否认的是这样又会丢失一些功能,需要手动去实现,如传递一级指针,将一个双链表销毁后需要手动置空。原创 2024-07-17 22:58:15 · 1766 阅读 · 32 评论 -
手搓排序算法:插入排序、选择排序
详解插入排序算法,直接插入排序、希尔排序和选择排序算法,直接选择排序、堆排序原创 2024-07-28 11:02:31 · 2080 阅读 · 71 评论 -
数据结构之顺序表
而线性表又分为两种存储结构:顺序存储结构:是指使用依次使用连续的空间存放线性表的数据元素,它在逻辑结构和物理结构上都是线性的。链式存储结构:使用n个节点链接成的链表,逻辑结构是线性的,物理结构不一定是线性的。顺序表是线性表的一种,基于顺序存储结构实现动态循序表结构动态顺序表一般扩容是以当前空间大小的**2倍(3倍)**增加。顺序表的顶层逻辑是数组,它可以对数据进行的操作;原创 2024-07-10 10:41:19 · 2036 阅读 · 7 评论