![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 74
数据结构知识汇总
搞点夜点心
这个作者很懒,什么都没留下…
展开
-
快速排序的深入优化探讨
决定快排性能的关键点是每次单趟排序后,key对数组的分割,如果每次选key基本⼆分居中,那么快排的递归树就是颗均匀的满⼆叉树,性能最佳。但是实践中虽然不可能每次都是⼆分居中,但是性能也还是可控的。但是如果出现每次选到最小值/最大值,划分为0个和N-1的子问题时,时间复杂度为O(N^2),数组序列有序时就会出现这样的问题,但是当数组中有大量重复数据时,之前的快速排序方法就会比较慢,因此我们需要更进算法。原创 2024-08-20 16:25:17 · 177 阅读 · 9 评论 -
贪吃蛇游戏
Windows这个多作业系统除了协调应⽤程序的执行、分配内存、管理资源之外,它同时也是⼀个很大的服务中心,调用这个服务中心的各种服务(每⼀种服务就是⼀个函数),可以帮应用程式达到开启视窗、描绘图形、使用周边设备等目的,由于这些函数服务的对象是应用程序,所以便称之为,简称API函数。WIN32API也就位平台的应用程序编程接口。245OK , //正常运行 KILL_BY_WALL , //撞墙 KILL_BY_SELF , //咬到自己 END_NOMAL //正常结束 };原创 2024-08-20 10:46:54 · 554 阅读 · 14 评论 -
交换排序和归并排序
上篇博客我们介绍了中的以及中的hoare,这篇博客将会介绍中的lomuto,最后再介绍。原创 2024-08-11 12:56:38 · 347 阅读 · 0 评论 -
选择排序和交换排序
在上篇博客中已经介绍了插入排序中的直接插入排序和希尔排序,这篇博客将会介绍选择排序和交换排序。原创 2024-08-07 12:25:52 · 359 阅读 · 1 评论 -
直接插入排序和希尔排序
希尔排序法又称缩小增量法。希尔排序法的基本思想是:先选定⼀个整数(通常是gap=n/3+1),把待排序文件所有记录分成各组,所有的距离相等的记录分在同一组内,并对每一组内的记录进行排序,然后。所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。得到下⼀个整数,再将数组分成各组,进行插入排序,当。的排序码顺序进行比较,找到插入位置。插⼊,原来位置上的元素顺序后移。时,就相当于直接插入排序。原创 2024-08-05 11:25:26 · 309 阅读 · 4 评论 -
二叉树的选择题
某⼆叉树的后序遍历序列与中序遍历序列相同,均为ABCDEF ,则按层次输出(同⼀层从左到右)的序列为:()设⼀课⼆叉树的中序遍历序列:badce,后序遍历序列:bdeca,则⼆叉树前序遍历序列为____。某⼆叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该⼆叉树中的叶结点数为( )⼀棵完全⼆叉树的结点数位为531个,那么这棵树的高度为( )⼀个具有767个结点的完全⼆叉树,其叶子结点个数为()二叉树的先序遍历的第一个结点为根结点,所以选A。对任何一棵二叉树,如果度为。原创 2024-08-05 08:59:37 · 818 阅读 · 0 评论 -
二叉树算法题(1)
【代码】二叉树算法题(1)原创 2024-07-31 17:04:43 · 292 阅读 · 0 评论 -
二叉树算法题(2)
【代码】二叉树算法题(2)原创 2024-08-02 10:59:16 · 305 阅读 · 0 评论 -
二叉树——链式结构的实现
用链表来表示⼀棵⼆叉树,即用链来指示元素的逻辑关系。通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩⼦和右孩⼦所在的链结点的存储地址。首先是分为三个文件进行实现:tree.h、tree.c、test.c。访问顺序为:根结点、左子树、右子树。访问顺序为:左子树、根结点、右子树。访问顺序为:左子树、右子树、根结点。判断二叉树是否为完全二叉树。⼆叉树查找值为x的结点。⼆叉树第k层结点个数。原创 2024-07-31 09:27:14 · 431 阅读 · 6 评论 -
二叉树以及堆的实现
树是⼀种非线性的数据结构,它是由n(n>=0)个有限结点组成⼀个具有层次关系的集合。把它叫做树是因为它看起来像⼀棵倒挂的树,也就是说它是根朝上,而叶朝下的。有⼀个特殊的结点,称为根结点,根结点没有前驱结点。除根结点外,其余结点被分成M(M>0)个互不相交的集合,其中每⼀个集合又是⼀棵结构与树类似的⼦树。每棵子树的根结有且只有⼀个前驱,可以有0个或多个后继。因此,树是递归定义的。子树不相交除了根结点外,每个结点有且仅有一个父结点一棵N个结点的树有N-1条边。原创 2024-07-27 14:54:46 · 964 阅读 · 9 评论 -
二叉树(2)
第h层, 2^(h-1)个结点,交换到根结点后,需要向下移动h-1层。第3层, 2^2个结点,交换到根结点后,需要向下移动2层。第4层, 2^3个结点,交换到根结点后,需要向下移动3层。第1层,2^0个结点,交换到根结点后,需要向下移动0层。第2层,2^1个结点,交换到根结点后,需要向下移动1层。第h层,2^(h-1)个结点,需要向上移动h-1层。第h-1层,2^(h-2)个结点,需要向下移动1层。第1层,2^0个结点,需要向下移动h-1层。第2层,2^1个结点,需要向下移动h-2层。原创 2024-07-29 12:37:24 · 411 阅读 · 2 评论 -
栈和队列的相关练习
本题可以借助数组作为底层的结构,因此在初始化时,动态开辟一个数组,并将数组的头尾和数组大小进行记录。思路同出队方法,只是不需要进行出栈的操作,直接返回栈顶元素的值。寻找不为空的队列,将该队列的队尾元素进行返回。首先引用上一篇博客中的队列的相关操作。首先引用上上篇博客中栈的相关操作。将两个队列分别进行销毁,并将。往不为空的队列中入队。直接进行入栈操作即可。原创 2024-07-27 08:57:07 · 425 阅读 · 7 评论 -
栈以及栈的实现
栈的创建类似于顺序表,唯一的变化就是将。获取栈中有效元素个数。原创 2024-07-24 15:13:40 · 414 阅读 · 6 评论 -
队列的实现
与之前的线性表实现不同的是,队列的实现需要两个。原创 2024-07-24 16:34:48 · 373 阅读 · 3 评论 -
双向链表的操作
本博客指的为它的示意图:其中phead为哨兵位(头结点)原创 2024-07-22 22:10:48 · 642 阅读 · 5 评论 -
单链表的应用(4)
思路:让⼀个指针从链表起始位置开始遍历链表,同时让⼀个指针从判环时相遇点的位置开始绕环运行,两个指针都是每次均⾛⼀步,最终肯定会在入口点的位置相遇。即:⼀个指针从链表起始位置运行,⼀个指针从相遇点位置绕环,每次都走⼀步,两个指针最终会在入口点的位置相遇。由step1中得出的结论,如果N是偶数,则第⼀圈快慢指针就相遇了。的情况不成立 ,既然不存在该情况,则快指针⼀次⾛3步最终⼀定也可以相遇。2.慢指针进环之后,快指针肯定会在慢指针走⼀圈之内追上慢指针。所以当快指针走两步,慢指针走一步时,它们肯定会相遇。原创 2024-07-21 15:35:11 · 883 阅读 · 11 评论 -
单链表的应用(3)
对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回。实现一种算法,找出单向链表中倒数第 k 个节点。给你两个单链表的头节点。原创 2024-07-21 09:32:15 · 301 阅读 · 1 评论 -
单链表的应用(2)
轮结束以后,只剩下一个人,问最后留下的这个人编号是多少?你不需要保留每个分区中各节点的初始相对位置。的人开始报数,报到 m 的人离开。,请你对链表进行分隔,使得所有。的值的结点,一个存放大于等于。分别为两个链表的头结点,分别为两个链表的尾结点。给你一个链表的头节点。是否为空,空则直接返回。,将大小链表连接在一起。是否为空,不为空则将。原创 2023-11-05 20:00:16 · 169 阅读 · 0 评论 -
单链表的应用(1)
将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。的值不会是空,而是旧链表最后一个结点的值,因此我们需要进行判断,当。(4)当运行结束时,代表旧链表运行完毕,当最后一个结点等于。思路:(1)创建三个结构体指针,分别代表一条新链表的头。思路:(1)运用快慢指针,创建两个结构体指针,分别为。,请你反转链表,并返回反转后的链表。思路:(1)若链表为空,则直接返回空。,不为空则进行新链表结点的插入,即将。时:1.当新链表为空时,将新链表的。,请你找出并返回链表的中间结点。原创 2023-11-04 23:16:35 · 166 阅读 · 0 评论 -
单链表专题
链表是⼀种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表。test.h(包括所有程序的头文件和函数的声明)test.c(代码运行测试)中的指针链接次序实现的。原创 2023-11-03 18:50:48 · 77 阅读 · 1 评论 -
顺序表的应用——通讯录
通讯录增加联系人的操作需要提前将联系人的信息存储到一个新建的结构体中,再将结构体尾插入通讯录中。查找联系人是否存在的操作(以姓名为例)只需将联系人的姓名与待查找人的姓名进行对比即可。打印目录,让使用通讯录的人通过输入的数字来实现相对应的操作。通讯录的初始化操作同顺序表的初始化操作。通讯录的销毁操作同顺序表的销毁操作。从头遍历顺序表,并对数据进行打印。原创 2024-07-17 16:22:18 · 320 阅读 · 0 评论 -
顺序表的操作
无需将每个数据的数据类型进行修改。,使得代码在需要修改数据类型时。与尾插类似,同样要分为两种情况。原创 2024-07-10 20:07:33 · 427 阅读 · 1 评论 -
数据结构和顺序表
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列。其中唯一的第一个数据元素称为表头元素唯一的最后一个元素称为表尾元素,除第一个元素外,每个元素有且仅有一个直接前驱,除最后一个元素外,每个元素有且仅有一个直接后继。原创 2024-07-01 17:36:53 · 292 阅读 · 2 评论 -
算法复杂度
衡量⼀个,⼀般是从两个维度来衡量的,即和。原创 2024-07-18 16:27:07 · 818 阅读 · 1 评论