
数据结构基础C语言版
文章平均质量分 84
此专栏是数据结构的基础,还有数据结构进阶是用C++实现的
沧浪之水!
你想拥有你从未拥有过的东西,那么你就要去做你从未做过的事情!
展开
-
八、手撕七大排序
1.堆排序使用堆来选数,效率就高了很多。2.时间复杂度:O(N*logN)3.空间复杂度:O(1)4.稳定性:不稳定。原创 2024-10-20 20:59:18 · 1137 阅读 · 1 评论 -
七、二叉树之链式结构(递归)
我再解释一下:首先创建一个节点,根节点去寻找左孩子,左孩子又是左子树的根节点,继续去找,直到找到叶子节点,叶子节点的左右孩子存在,但是为空,开始返回,返回叶子节点的父亲节点,叶子节点的父亲节点又有右孩子,以此类推,直到返回到根节点(A)的右子树,那么就很好的诠释了树的结构是递归的。如果理解了上面所说的后序,使用后序来销毁是最方便的,因为后序最后才会返回根节点,前序和中序都是途中就会返回根节点,如果根节点已经被删掉了的话,就不方便进行下一步free,但可以定义一个变量来保存它的左右子树,则可以继续进行。原创 2024-10-17 22:54:48 · 1246 阅读 · 6 评论 -
六、二叉树顺序结构之堆
首先理清楚,如果这个小堆/大堆有10个数据,这个堆的堆顶已经是最小/最大的数据了,让这个数组的第一位与最后一位交换位置,这样堆顶就到了最后一位,再对前面9个进行向下调整算法,以此类推,一直重复,就可以得到一个排序数组了。如果排完一个小堆,找到了最小的,但是要找次小的,再找第三小的,.......,继续从它的左右子树分别进行向下调整算法构建堆的话,那么时间复杂度为O(N^2),这就不能体现出堆排序的价值所在。这里的堆和malloc的堆不是同一个意思,这里的堆只是一种数据结构,而后者是操作系统里的区域。原创 2024-10-16 21:51:55 · 1200 阅读 · 0 评论 -
五、树的介绍及二叉树初步认识
的。原创 2024-10-16 15:54:41 · 1054 阅读 · 0 评论 -
四、栈和队列及其实现
一般可以用数组或者链表进行栈的实现,但数组相对而言更优,因为插入数据时,数组在尾上进行的操作代价更小。大家可以自己试试用队列实现栈,栈实现队列,虽然没有实际意义,但可以加强对栈和队列的理解。栈:一种特殊的线性表,只允许在一端进行插入和删除,进行插入数据和删除数据的是。队列:只允许在一端进行插入数据,另一端进行删除数据,是一个特殊的线性表。压栈:栈的插入叫压栈、进栈、入栈。几乎都是顺序表的操作。出栈:栈的数据删除。接下来展示队列实现栈,栈实现队列。的特质,进行插入的一端叫。重复此操作就可以了。原创 2024-10-15 18:23:07 · 475 阅读 · 0 评论 -
三、带头双向循环链表
带头双向循环链表:结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而简单了。此head可以叫guard,哨兵位,里面的数据没有什么意义,就是一个带头结点方便增删查改。双向链表,所以肯定有两个指针,一个指向前结点(prev),一个指向后结点(next)。}LTNode;和单链表相比,双向链表的功能比较强大。但是都是按需所取。原创 2024-10-15 15:37:20 · 496 阅读 · 1 评论 -
二、单链表/无头单向非循环链表
1.1.当使用realloc申请新的空间时,会涉及->开辟新的空间->拷贝数据->释放原来的空间,这三个步骤会有不小的消耗。1.2.扩容都是2倍增长,如果没有存储那么多数据就会导致一部分空间浪费,假如100个空间,扩容2倍到200个,但是一共插入的数据只有120个,就会导致有80个空间浪费。所以,单链表就解决了顺序表的这些问题。//结点存放数据//结点指向下一个结点}SLTNode;原创 2024-10-15 10:29:39 · 938 阅读 · 0 评论 -
一、顺序表介绍和接口实现
1.顺序表中的插入和删除,都需要移动大量的数据,效率很低。2.增容内存,存在浪费大量的空间。3.但是修改那一块儿,和元素访问,直接通过下标就可以进行操作。欢迎大家私信与我一起学习共讨!!!原创 2024-10-13 17:17:32 · 433 阅读 · 0 评论