C语言数据结构易错知识点
文章平均质量分 79
涵盖顺序表、链表、二叉树、栈、队列、堆、排序算法
-SGlow-
这个作者很懒,什么都没留下…
展开
-
C语言数据结构易错知识点(1)
如果使用new1,一定要注意指针之间的关系,要通过两个malloc来创建顺序表,其中new1存储的值是堆区里SeqList的地址(初始化时要传二级指针,传址,这样才能改变new1存储的值),arr又作为DataType*类型的指针维护DataType数据。但难点在于当有2个甚至更多.h文件时,很多人并不知道把声明和库函数的引用放在哪个文件里,从而出现相互引用的情况,例如在test1.h里引用test2.h,又在test2.h中引用test1.h,这在逻辑上是一种死循环,肯定是行不通的。原创 2024-03-03 14:22:59 · 801 阅读 · 0 评论 -
C语言数据结构易错知识点(2)
(指针的指针),而后续的接口就不需要二级指针,因为访问后续的结点只需要找到第一个节点即可,第一个节点可以通过new1存储的值找到,所以拿到new1的值就可以对后续结点实行操作,传值即可。在主函数中创建了new这个结构体,里面包含了两个指针和一个整型变量,其中那两个指针是野指针,需要被处理,这个时候初始化直接传结构体指针,将里面的值改为0和NULL。使用这种方式的话,我们在栈区创建的是一个指针,但此时这个指针相当于野指针,不能使用,要让它指向一片ListNode的空间,这个空间会在堆上开辟。原创 2024-03-03 17:42:56 · 731 阅读 · 0 评论 -
C语言数据结构易错知识点(3)(堆、堆排序)
当我们通过大堆找到最大值后,将其与尾元素交换,然后size--达到伪删除的目的(顺序表的删除也可视为一种伪删除,即数据没有被销毁,只是访问不到),重复建堆并交换,次大的数据在最大的数据之前,以此类推......我们需要用到的知识点就只有:(子节点-1) / 2 == 父节点,父节点 * 2 + 1 == 左孩子结点,父节点 * 2 + 2 == 右孩子结点,堆删除的思路,向下调整。对于这个小堆,这里新插入了一个0,需要进行调整,我们这时选择向上调整,即沿着祖先向上调整,其余部分不调整。原创 2024-03-16 11:30:36 · 324 阅读 · 1 评论 -
C语言数据结构易错知识点(4)(二叉树、分治思想)
我们刚刚的分析是以根为起点来进行分析的,根的左子树和根的右子树的高度最大值+根所占的1个高度 == 树的高度。我们发现,当k == 1时比较特殊,如果在k == 1时再向下递归似乎就无意义了,而此时访问到的结点都是我们想要统计的结点,如果访问到了就返回1给上一层函数。二叉树的各种功能实现基本上都绕不开递归,解决这些问题需要用到递归,但递归的抽象程度很容易让人被绕进去,所以我们可以通过最小子问题和递归条件来理解、写代码。前序遍历可以被拆分为:当前树的根的值打印+左子树的根的值打印+右子树的根的值打印。原创 2024-03-23 14:50:22 · 509 阅读 · 3 评论 -
C语言数据结构易错知识点(5)(插入排序、选择排序)
上述排序都是需要掌握的,但原理不会讲解,网上有很多详尽地解释,本文章主要分享一下代码实现上应当注意的事项,我写代码时易错的细节。希尔排序其实是直接插入排序的一种变形。引入gap保证数组更快地变得有序。原创 2024-03-25 08:33:13 · 280 阅读 · 2 评论 -
C语言数据结构易错知识点(6)(快速排序、归并排序、计数排序)
至于需要注意的点,就是当key在左侧时,一定要右侧先动,左侧再动,这样才能保证相遇点的值小于等于arr[key](这个结论可以画图证明,这里就不展开了),当然,逆序同理。最后交换arr[key]和arr[prev]达到一样的效果,使右侧大于arr[key],左侧小于等于arr[key]。需要注意入栈顺序是从右向左,右下标先入,左下标后入,右递归先入,左递归后入。快速排序属于交换排序,交换排序还有冒泡排序,这个太简单了,这里就不再讲解。计数排序属于非比较排序,在数据集中的情况下可以考虑使用。原创 2024-03-29 09:57:00 · 753 阅读 · 2 评论