
数据结构
文章平均质量分 91
阿赭ochre
这个作者很懒,什么都没留下…
展开
-
单链表详解
第三,如果是多个节点,不能直接删除最后一个节点,否则就上一个节点就找不到下一个节点了,存储的就是一个野指针,所以必需先保存上一个节点的信息,再删除最后一个节点,最后将倒数第二个节点指向的节点置空。该种写法是tail向后找到尾节点的下一个空节点并赋值,因为原尾节点要存储新尾节点的地址,该种写法改变的是tail所指向的节点,并没有改变原尾节点内存储的下一个节点的地址,即没有将原尾节点和新尾节点链接起来。链表的头删不能直接删除头节点,不然就会找不到下一个结点了,先保存头节点的信息,在令头指针指向第二个节点。原创 2024-06-14 22:52:11 · 1082 阅读 · 0 评论 -
栈和队列 (含环形队列、队列实现栈、栈实现队列)
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO)的原则。压栈push:栈的插入操作叫做进栈压栈入栈,入数据在栈顶。出栈pop:栈的删除操作叫做出栈。出数据也在栈顶。栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更优一些。因为数组在尾上插入数据的 代价比较小。top保存栈顶的下一个位置,capacity保存当前数组容量。原创 2024-06-23 23:10:11 · 728 阅读 · 1 评论 -
九大排序--C语言
一、直接插入排序1.1基本思想把待排序的元素与前n-1个有序元素比较,使得插入元素后的n个元素有序,按照此法对所有元素进行插入,直到得到一个新的有序序列2.2代码实现void InsertSort(int* a, int n){ //多趟排序 for (int i = 1; i < n; i++) { //单趟排序,在有序区间[0,end]内排序,使数组保持有序 int end = i - 1; int temp = a[end + 1]; while原创 2024-07-03 00:31:54 · 992 阅读 · 1 评论 -
堆的调整和堆的TopK问题
如果有一个关键码的集合K,把它的所有元素按完全二叉树的顺序存储方式存储 在一个一维数组中,并满足,则称为小堆(或大堆)。将根节点最大的堆,且每个父节点都大于等于他的左右孩子叫做最大堆或大根堆,根节点最小的堆,且每个父节点都小于等于左右孩子叫做最小堆或小根堆。本文都以大堆为例。原创 2024-07-04 18:16:05 · 725 阅读 · 0 评论 -
二叉树的遍历(递归思想)
计算二叉树第k层的节点个数,由于我们无法直接找到第k层的位置,所以要采用相对位置的思想,即根节点所在的位置为第k层,递归访问左右子树,每访问一次k--,直到k=1,就找到了我们实际要的第k层,如果此时遇到的节点不为NULL就返回1,遇到NULL就返回0。二叉树的层序遍历采用队列的方式实现,根节点入队,出队时带入它的子节点入队(左孩子先入队,右孩子后入队),依次出队列。采用遍历的思想,遍历树的每一个节点,如果遍历过程中找到目标节点就返回节点指针,如果遍历结束后仍然没有找到目标节点就返回NULL。原创 2024-07-06 19:34:05 · 1705 阅读 · 0 评论