数据结构初阶
文章平均质量分 88
初步认识数据结构
~yY…s<#>
积土成山,积水成渊
展开
-
【排序篇3】快速排序、归并排序
通过前面的两种方法可以发现:确定好某个元素的位置后,该元素的左右两个区间分别是小于这个元素和大于这个元素(以数组是1,2,3,4,5,6,7,8,9,10为例),也就是说要确定位置的元素是区分两个不同区间的标杆,所以这里可以使用前后指针法,用来区分两块区域。这与最后确定元素位置的交换有关,假设ki是数组元素,交换的是left指向的元素和ki,那么结果是left指向的元素变成了ki这个元素,但是数组左端的元素依旧没变。接下来分析单趟排序的实现。ki取的是下标,才能真正交换数组左端和left指向的元素。原创 2024-01-14 14:22:10 · 1184 阅读 · 13 评论 -
【排序篇2】选择排序、计数排序
计数排序采用相对映射的思想,开辟一块空间,该空间的范围为待排序的数组的最大值和最小值之差加1,并且每个元素初始化为0,然后待排序的数组只要是出现的元素就在临时空间对应的位置计数,最后从小到大恢复原来的元素重新放入数组,完成排序。从数组中选出最小值和最大值放在起始位置,直到排序完成。原创 2024-01-13 13:38:43 · 452 阅读 · 10 评论 -
【排序篇1】插入排序、希尔排序
注意:while循环的条件gap大于1并不是说gap不能为1,而是这里在前面的进入循环的时候就有可能为1了,记住gap是先缩小再使用的,进入循环时(还没有缩小)的gap是上次使用的gap。希尔排序与插入排序很像,单趟排序的思路基本相似,不同的是,插入排序的每次对比一个指向的元素是向前移动一个距离,希尔排序是移动gap个距离,从大到小,最后为1。再进行循环的判断,如果条件不是大于1的话,而是大于等于1,那么gap为1可以进入循环,然后1除1等于1,1+1等于2,就死循环了。原创 2024-01-13 08:45:47 · 638 阅读 · 12 评论 -
【数据结构】二叉树的链式结构
如果没有要找的节点,返回空。如果这个二叉树不是完全二叉树,那么在第一个循环遇到空跳出后,它的后面还有节点,此时队列不为空,继续用前面的方法,定义一个临时变量获取队列头元素,判断是不是空,是空,删除这个空,继续判断(不管空与节点之间隔多少,它们都在队列里,因此队列不为空继续判断、删除,直到队列为空才停下);不是空指针,先进入它的左函数(左子树),在左函数中还是先判断是否为空指针,是,返回0,不是,接着还是先进入它的左函数,如果次时它的左函数的这个节点为空,就返回0,然后进入它的右函数,也是空,返回0。原创 2023-09-30 13:21:33 · 519 阅读 · 29 评论 -
【数据结构】树、二叉树的概念和二叉树的顺序结构及实现
之前我们学习了顺序表、链表以及栈和队列这些数据结构,但这些数据结构都是线性的(一对一)。接下来要学习非线性的数据结构——树(二叉树),相比前面的,树的结构更加复杂,话不多说,直接进入正题吧。原创 2023-09-29 16:54:41 · 1098 阅读 · 18 评论 -
【数据结构】实现栈和队列
入队相当于尾插,因为只有一个入口插入节点,所以直接在这个函数创建一个新节点。分两种情况:刚开始没有节点尾插、已有节点再尾插。如果没有节点,就不能再删了,所以要断言检查是否为空。这里的头删也要分两种情况:只有一个节点、一个以上的节点。栈是一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。队列除了节点的结构体以外,还要再创建一个结构体,方便找到尾指针。因为栈的特点是出栈、入栈在同一位置,所以用数组尾插更方便。原创 2023-08-23 22:27:13 · 1268 阅读 · 18 评论 -
【数据结构】实现带头双向循环链表
之前我们已经学习了单链表,有了单链表的基础,现在开始学习带头双向循环链表~结构最复杂,一般用在单独存储数据。实际中使用的链表数据结构,都是带头双向循环链表。另外这个结构虽然结构复杂,但是使用代码实现以后会发现结构会带来很多优势,实现反而简单。原创 2023-08-22 14:35:39 · 505 阅读 · 15 评论 -
【数据结构】吃透单链表!!!(详细解析~)
上篇文章介绍了顺序表,这篇文章开始着重讲解链表了。链表有很多种:单、双链表,循环、非循环链表还有带头、不带头的链表。本篇的主要内容是单链表(无头,单向,非循环)。链表对比顺序表有哪些不同之处,接下来会带大家一起了解~1.头部和中间的插入删除效率都较低,时间复杂度为O(N)。需要挪动数据。2.空间不够用了,增容需要申请新空间拷贝数据释放旧空间。会有不小的消耗。(尤其是异地扩容)3.扩容会有一定的空间浪费。原创 2023-08-19 23:29:56 · 3124 阅读 · 19 评论 -
【数据结构】实现顺序表
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。顺序表与通讯录类似,可以完成增删查改等功能。在此基础上,还可以实现头插、头删、尾插、尾删以及某位置的插入和删除。原创 2023-08-16 23:52:48 · 1214 阅读 · 15 评论 -
【数据结构】时间复杂度和空间复杂度
我们平时完成一件事有效率快慢、好坏之分,在编程中,也有类似的概念,这就是算法的效率。有的代码很多,有的代码很少,一定是少的代码效率高吗,如何衡量一个算法的好坏就是本章的重点。原创 2023-08-16 08:12:10 · 621 阅读 · 12 评论