![](https://i-blog.csdnimg.cn/direct/ab5338ff46cf4170974a3c858c85571e.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构知识点的补充
文章平均质量分 84
1,补充数据结构系统性学习栏目的边边角角
2,提取数据结构系统性学习栏目的重点难点
Jason_from_China
非心静无以事明,非心坚无以事破
展开
-
快排(前后指针实现)
快排解决办法有很多种,这里我再拿出来一种前后指针版本虽然这个版本的时间复杂度和霍尔一样,逻辑也差不多,但是实际排序过程,确实会比霍尔慢一点。原创 2024-06-21 07:21:21 · 734 阅读 · 0 评论 -
霍尔排序(递归+非递归)
快拍不仅需要学习递归,还需要学东西非递归,这样更有助于我们理解快拍首先我们需要知道,非递归的学习需要使用栈,所以如果我们的栈的学习是不完善的,建议学习一下栈。原创 2024-06-21 07:22:01 · 947 阅读 · 2 评论 -
冒泡排序-精讲
冒泡排序具备很强的教学意义,但是没有什么实践意义,这里作为第一个讲解的排序,目的是从简单开始讲解,方便理解。原创 2024-06-21 04:45:00 · 934 阅读 · 0 评论 -
堆排序+衍生问题top_k问题
这里本质还是堆排序的衍生问题也就是还是堆排序问题,我们最终需要学习的就是处理大型数据的问题。原创 2024-06-20 02:00:00 · 852 阅读 · 0 评论 -
计数排序-C语言实现
计数排序是速度特别快的一种排序方式,甚至说可以达到o(n),什么概念,一趟就可以实现,这是很快的,虽然具备一定的局限性,但是这个速度也是叹为观止的。原创 2024-06-20 00:30:00 · 686 阅读 · 0 评论 -
归并排序 (递归实+非递归)
这里递归排序的非递归方式还是比较有难度的,所以需要多次观看两遍,我也会多次详细的讲解,促进知识的理解。原创 2024-06-19 00:30:00 · 676 阅读 · 0 评论 -
快排(霍尔排序实现+前后指针实现)(递归+非递归)
快排解决办法有很多种,这里我再拿出来一种前后指针版本虽然这个版本的时间复杂度和霍尔一样,逻辑也差不多,但是实际排序过程,确实会比霍尔慢一点快拍不仅需要学习递归,还需要学东西非递归,这样更有助于我们理解快拍首先我们需要知道,非递归的学习需要使用栈,所以如果我们的栈的学习是不完善的,建议学习一下栈。原创 2024-06-19 00:30:00 · 1568 阅读 · 0 评论 -
希尔排序-C语言版本
从希尔开始,排序的速度就开始上升了,这里的排序开始上一个难度了,当然难一点的排序其实也不是很难,当你对于插入排序了解的足够深入的时候,你会发现其实希尔就是插入的异形,但是本质上还是一样的。原创 2024-06-18 00:15:00 · 975 阅读 · 0 评论 -
插入排序-C语言版本
插入排序是很重要的排序,著名的希尔排序就是从插入排序演变过来的,所以我们需要并且很多时候有些面试也是会面试插入排序的,所以需要好好捋清楚插入排序的逻辑是什么。原创 2024-06-17 04:15:00 · 1158 阅读 · 0 评论 -
直接选择排序-C语言版本
直接选择排序也是一个比较简单的排序,所以这里放在第二个进行讲解,这里和冒泡排序是有一点相似。直接选择排序和冒泡排序一样,也是具备一定的教学意义,但是没有什么实际操作的意义,因为直接选择排序的时间复杂度比较高,书写起来和插入排序又差不多,所以没有必要写直接选择排序。原创 2024-06-17 04:30:00 · 862 阅读 · 1 评论 -
二叉树的习题精讲-二叉树的遍历
二叉树遍历_牛客题霸_牛客网 (nowcoder.com)要求就是前序遍历构建一棵树如图解前序输入,中序输出函数是一个递归函数,用于中序遍历二叉树。中序遍历的顺序是:左子树、根节点、右子树。root1函数根据传入的字符串数组a创建一棵二叉树。'#'piNULLvalpileftrightmain函数是程序的入口点。原创 2024-05-31 00:45:00 · 1205 阅读 · 0 评论 -
二叉树习题精讲-另一棵树的子树
函数的逻辑确保了如果。原创 2024-05-31 01:00:00 · 254 阅读 · 0 评论 -
二叉树习题精讲- 二叉树的前序遍历
144. 二叉树的前序遍历 - 力扣(LeetCode)原创 2024-05-30 00:15:00 · 519 阅读 · 0 评论 -
二叉树习题精讲-镜像二叉树
101. 对称二叉树 - 力扣(LeetCode)这里的逻辑和相同二叉树一样。原创 2024-05-30 03:30:00 · 176 阅读 · 0 评论 -
二叉树习题精讲-相同的树
函数通过递归的方式比较两棵树的每个节点。首先检查当前节点是否为空,如果不为空再检查节点的值是否相同。如果所有对应的节点都相同,那么函数返回。如果任何一对对应节点不同,函数返回。100. 相同的树 - 力扣(LeetCode)原创 2024-05-29 00:45:00 · 450 阅读 · 0 评论 -
二叉树习题精讲-单值二叉树
函数通过递归的方式检查每个节点的值是否与其子节点的值相同。如果树中的所有节点的值都相同,那么函数返回。,表示这是一个单值树;如果任何节点的子节点的值与它不同,函数返回。965. 单值二叉树 - 力扣(LeetCode)判断这里面的所有数值是不是一样。,表示这不是一个单值树。原创 2024-05-29 00:30:00 · 774 阅读 · 0 评论 -
拿捏数据结构- 链式二叉树
BTNode;这行代码使用typedef关键字定义了一个新的别名BTDataType,它是int类型的别名。这意味着在代码中,你可以使用BTDataType作为int类型数据的一个更有意义的别名。这行代码开始定义一个名为的新结构体类型。是结构体的名称,它将用于表示二叉树中的节点。这个大括号内的代码定义了定义了一个名为_data的成员变量,它用于存储节点中的数据。由于使用了之前定义的BTDataType,所以这个成员变量是int类型的。定义了一个名为_left的成员变量,它是一个指向。原创 2024-05-28 00:30:00 · 862 阅读 · 0 评论 -
拿捏数据结构-top_k问题
在完全二叉树中,叶子节点不包含任何子节点,因此不需要进行调整。原创 2024-05-28 00:15:00 · 1746 阅读 · 2 评论 -
数据结构-堆排序问题
在建堆之后,函数进入一个循环,每次循环中,它将堆顶元素(当前堆中的最小元素)与当前堆的最后一个元素交换。然后,堆的大小减少 1,并且对剩余的堆进行向下调整以保持最小堆性质。如果相反的话,会导致根节点变化,从而导致逻辑混乱,数组里面的数值少的时候是不明显的,但是多的时候就不行了。函数来构建一个小顶堆(最小堆)。:循环继续进行,直到堆的大小减小到 0。1,需要在数组里面进行排序,我们可以采取在数组建堆。函数实现了一个堆排序算法,它接收一个整数数组。2,然后交换收尾元素,每次调整的数值减少1。原创 2024-05-27 15:15:13 · 332 阅读 · 1 评论 -
二叉树顺序结构的实现(堆)
树的关键点是不知道定义几个树的度1,明确知道的话我们可以写2,不知道几个树的度,顺序表来写3,右兄弟左孩子写法不管多少,我们只定义两个树的度。原创 2024-05-21 15:44:03 · 1166 阅读 · 2 评论 -
二叉树的基本概念
这里我会从二叉树的概念开始讲解,其次涉及到概念结构,以及堆的实现和堆排序。目的是,堆比二叉树简单,同时堆本质上是二叉树的其中一种情况,堆属于二叉树顺序结构的实现最后完善二叉树的讲解,也就是二叉树的链式结构的实现树的关键点是不知道定义几个树的度1,明确知道的话我们可以写2,不知道几个树的度,顺序表来写3,右兄弟左孩子写法不管多少,我们只定义两个树的度。原创 2024-05-21 15:43:39 · 825 阅读 · 0 评论 -
设计循环队列
622. 设计循环队列 - 力扣(LeetCode)实现逻辑空间大小是固定的这一道题用链表实现看起来是特别有优势我们可以搞成循环链表循环队列想可以重复使用这些空间也就是到尾部,就绕回去了,也就是有限空间的无限利,保证先进先出,重复使用就像图书馆,就四个座位,走一个人补一个人什么时候是空,什么时候是满(此时我们怎么区分空和满)方法1,增加size记录空还是满size==0 也就是空size==k也就是满方法2:额外多开一个空间(永远空一个空间原创 2024-05-15 01:45:00 · 1829 阅读 · 0 评论 -
具备教学意义的实操(用栈实现队列)
具备教学意义的实操(用队列实现栈)-CSDN博客这里讲解更详细。原创 2024-05-14 01:15:00 · 721 阅读 · 0 评论 -
括号匹配(栈)
20. 有效的括号 - 力扣(LeetCode)c++有栈 但是C语言没有到那时我们可以自己造这里的代码是直接调用栈,然后调用等于三个左括号的任意一个 我们就入栈左括号(入栈)右括号取出栈顶数据,出栈并且进行匹配,这里匹配的是不匹配的情况这里进行方向的判断因为不匹配可以直接拿结果栈里面还有数据意味着数量不相等‘也就是此时进行判断 此时栈是不是为空图解因为每次都是左括号入栈,然后然后才有右括号的,所以我们可以来一个判断,如果入栈半天只有左括号,原创 2024-05-14 00:45:00 · 881 阅读 · 0 评论 -
队列的讲解
/ 链式结构:表示队列}QNode;// 队列的结构 (因为队列是先进先出,后进后出,也就是和栈是相反的,此时会尾进头出,所以我们需要更新尾部和头部节点)// (把头结点,尾结点,链表的实际的大小放里面,这样不需要每次使用的时候进行循环找尾,我们只需要每次更新尾结点就可以)//头节点//尾结点int size;}Queue;// 这里采取一级指针进行实现代码逻辑,如果不创建队列的结构,我们就需要采取二级指针// 初始化队列// 销毁队列// 队尾入队列// 队头出队列。原创 2024-05-15 04:15:00 · 1488 阅读 · 0 评论 -
数据结构-栈的讲解
/ 首元素的地址int _top;// 栈顶,初始化为0,也就是等同于size,初始化为-1,等同于下标// 容量}Stack;// 初始化栈// 销毁栈// 入栈// 出栈// 获取栈顶元素// 获取栈中有效元素个数// 检测栈是否为空,如果为空返回非零结果,如果不为空返回0。原创 2024-05-13 04:15:00 · 1026 阅读 · 1 评论 -
具备教学意义的实操(用队列实现栈)
225. 用队列实现栈 - 力扣(LeetCode)https://leetcode.cn/problems/implement-stack-using-queues/description/实现逻辑一个是先进先出(队列),一个是后进先出(栈)这里用两个队列导入·一下数据出来数据之后入数据代码的实现#include<stdio.h>#include<assert.h>#include<stdlib.h>typedef int QDat原创 2024-05-11 21:04:22 · 468 阅读 · 0 评论 -
环形链表(是否成环)(简单)(证明题)
什么情况下会追不上,也就是当第一次循环没有追上,第二次-1依旧是奇数没有追上,那么此时存在追不上的情况,但是这种情况是否存在?接下来我们进行证明。已知是快慢指针,所以我们已经从判断问题,变成了追击问题,1,我们把判断问题,用快慢指针搞成追击问题。证明:这里我们需要假设是快指针一次走三步。所以我们按照快指针一次两步进行推算。那此时说明3slow==fast。第一种也就是当差距为偶数的时候。第二种也就是当差距为奇数的时候。证明:已知这里是一次走两步。那么此时有两种可能性。原创 2024-05-08 23:23:40 · 524 阅读 · 0 评论 -
环形链表(成环的第一个相交的节点在哪)(中等)(证明题)
这里的关键点在于你需要证明L==T。原创 2024-05-08 18:45:24 · 288 阅读 · 0 评论 -
相交链表(数据结构)
160. 相交链表 - 力扣(LeetCode)原创 2024-05-08 10:32:42 · 471 阅读 · 0 评论 -
面试题:返回倒数第k个节点(简单)
面试题 02.02. 返回倒数第 k 个节点 - 力扣(LeetCode)这一题是很简单的当做试手题。原创 2024-05-08 10:10:21 · 271 阅读 · 0 评论 -
链表学习检验题目-随机链表的复制
我们看见这个题目的时候首先就是看不懂,有点懵的。其实这都是我们想复杂了、这里你不能来回去追求random指向的节点的哪里,只需要直接进行拷贝就可以。指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。节点组成,其中每个新节点的值都设为其对应的原节点的值。个节点组成的链表来表示输入/输出中的链表。的链表,每个节点包含一个额外增加的随机指针。,该指针可以指向链表中的任何节点或空节点。那么在复制链表中对应的两个节点。例如,如果原链表中有。返回复制链表的头节点。原创 2024-05-07 20:29:32 · 832 阅读 · 2 评论 -
贪吃蛇- 隐藏光标的属性
在编写贪吃蛇这样的文本模式游戏时,隐藏光标是一个常用的技巧,目的是为了提高用户体验和游戏的视觉表现。隐藏光标的属性目的主要包括以下几点:1. **改善视觉效果**:光标在屏幕上闪烁可能会分散玩家的注意力,尤其是在移动快速的贪吃蛇游戏中。隐藏光标可以让玩家更专注于游戏本身,而不是被光标干扰。2. **避免混淆**:在文本模式下,光标可能会与游戏中的字符混淆,尤其是当光标与游戏中的蛇或食物的字符颜色相同时。隐藏光标可以避免这种混淆,确保游戏的清晰度。原创 2024-05-06 09:34:09 · 922 阅读 · 0 评论 -
链表的回文结构(画图精讲)
这里的判断条件看清楚,都是对快指针的判断,因为快慢指针涉及的是奇偶数while (fast != NULL && fast->next != NULL)原创 2024-04-24 14:49:50 · 863 阅读 · 0 评论 -
空间复杂度精讲
空间复杂度是一个用来衡量算法运行过程中临时占用存储空间大小的量度。它是对一个算法在运行过程中临时占用存储空间大小的估计。空间复杂度不是程序占用的空间,而是执行算法时所需要的存储空间。空间复杂度通常用大O符号表示,比如O(1)、O(n)、O(n^2)等。其中:- O(1)表示算法执行过程中临时占用的存储空间大小是常数级别的,不随输入数据规模的增加而增加。- O(n)表示算法执行过程中临时占用的存储空间大小与输入数据规模n成线性关系。原创 2024-04-24 14:12:27 · 562 阅读 · 0 评论 -
时间复杂度
时间复杂度是一个用来描述算法执行时间与输入数据规模之间关系的量化表达。它是一种理论计算机科学中的概念,用于预测算法在不同输入规模下的表现。时间复杂度通常用大O符号(O-notation)表示,它提供了一种简洁的方式来描述算法最坏情况下的运行时间随着输入规模增长的速度。时间复杂度的关键点在于它关注的是增长率,而不是具体的执行时间。这是因为同一个算法在不同的计算机上、不同的编译器下或者不同的执行环境中,其具体的执行时间可能会有很大的差异。因此,时间复杂度提供了一种与具体实现无关的性能评估方式。原创 2024-04-24 14:03:16 · 341 阅读 · 0 评论 -
C语言-二分查找
这个分支实际上永远不会执行,因为前面已经覆盖了所有可能的情况。:开始一个循环,只要左边界不大于右边界,循环就会继续。:通过标准输入读取用户输入的整数,并将其存储在变量。:包含标准输入输出库,用于程序中的输入输出操作。:如果循环结束时没有找到目标值,打印这条消息。:如果找到目标值,打印其在数组中的下标。,则找到了目标值,打印下标并退出循环。在有序的数字里,查找某一个数字。,并初始化为1到30的整数。,用于存储用户输入的值。的长度,即元素的总数。作为二分查找的左边界。作为二分查找的右边界。原创 2024-04-21 18:12:02 · 1176 阅读 · 0 评论 -
双向链表-(增删减改)
双链表是线性表的链式存储结构的一种,它除了包含线性表所具有的数据元素外,每个数据元素还包含两个指针,分别指向前一个元素和后一个元素。这样,通过这两个指针,就可以很方便地访问双链表中的任何一个元素的前驱和后继。在双链表中,每个节点通常包含三个部分:1. 数据域:用于存储节点的数据。2. 左指针域:指向节点的前一个节点。3. 右指针域:指向节点的后一个节点。双链表的主要特点和优势如下:- 删除和插入操作更加高效,因为可以直接通过指针跳转到前一个或后一个节点,不需要像数组那样进行搬移操作。原创 2024-04-22 02:15:00 · 854 阅读 · 0 评论 -
链表的专用题型-链表的经典算法(循环链表的经典应用(约瑟夫问题))
prev先指向pcur的下一个节点已经成环了,所以只要当前节点下一个节点不是,就可以一直循环,要是下一个节点是第一个节点,说明此时节点只有一个节点,可以返回了。原创 2024-04-16 23:49:53 · 704 阅读 · 0 评论 -
链表的专用题型-链表的经典算法(合并两个有序链表)
【代码】链表的专用题型-链表的经典算法(合并两个有序链表)原创 2024-04-16 23:47:28 · 147 阅读 · 0 评论