数据结构
文章平均质量分 90
数据结构知识,这是我的数据结构代码仓库
https://gitee.com/sleep-during-class/data-structure-notes
小李很执着
不经一番寒彻骨,怎得梅花扑鼻香。
所涉及代码都收录在我的gitee仓库里https://gitee.com/sleep-during-class,具体代码在专栏里有对应仓库链接!!!
免费资源,免费专栏,一起学习!!!!
展开
-
[数据结构]————排序总结——插入排序(直接排序和希尔排序)—选择排序(选择排序和堆排序)-交换排序(冒泡排序和快速排序)—归并排序(归并排序)
直接插入排序是一种简单观的排序算法,它基本思想是将待排序的元逐个插入到已经排好序的序列中,直到所有元素都插入完成为止下面是对直接插入排序的析总结:最好情况下待排序序列已经是有序的此时只需要比较n-1次,时间复杂度为O(n)。最坏情况下,待排序序列是逆序的,此时需要比较和移动元素的次数最多,时间复杂度为O(n^2)。平均情况下,假设待排序序列中的每个元素都等概率地出现在任何位置,那么平时间复杂度为O(n^2)。原创 2024-05-04 23:52:05 · 981 阅读 · 2 评论 -
[数据结构]——非递归排序总结——笔试爱考
创建一个栈ST,并初始化为空。将结束索引end和开始索引开始依次入栈ST。进入循环,直到栈ST为空: a. 从栈ST中弹出两个索引,分别赋值给left和right。b. 调用PartSort3函数,将数组a在[left, right]范围内进行三路划分,返回划分后的基准元素的索引keyi。c. 如果left < keyi - 1,则将keyi - 1和left依次入栈ST,用于后续处理[left, keyi-1]范围内的子数组。原创 2024-05-04 13:33:38 · 926 阅读 · 0 评论 -
[数据结构]——非比较排序—计数排序
计数排序的局限性主要体现在它对数据类型的限制上,不适合非整数类型的数据排序。此外,当数据范围非常大时,所需的额外空间也会非常大,这在资源受限的环境下可能是个问题。:计数排序不通过元素间的直接比较来进行排序,而是通过计算元素的分布情况来确定它们的位置,这使得它在最好、最坏和平均情况下都有较好的性能表现。综上,计数排序在特定场景下(如数据范围不大、整数类型)是一种快速且高效的排序选择,但其适用场景相对有限,且空间效率较低。思想:计数排序又称为鸽巢原理,是对哈希直接定址法的变形应用。原创 2024-05-03 23:34:51 · 704 阅读 · 2 评论 -
[数据结构]———归并排序
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide andConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。是主接口函数,负责初始化和释放临时数组。是递归函数,负责实际的排序工作。原创 2024-05-03 22:11:47 · 632 阅读 · 6 评论 -
[数据结构]———交换排序
函数返回的是基准值在排序后的位置,用于在递归调用中分割左右子数组原创 2024-05-01 23:46:50 · 1432 阅读 · 10 评论 -
[数据结构]———选择排序
直接选择排序的特性总结:1. 直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用2. 时间复杂度:O(N^2)3. 空间复杂度:O(1)4. 稳定性:不稳定堆排序的特性总结:1. 堆排序使用堆来选数,效率就高了很多。2. 时间复杂度:O(N*logN)3. 空间复杂度:O(1)4. 稳定性:不稳定。原创 2024-04-30 23:51:54 · 987 阅读 · 0 评论 -
[数据结构]——排序——插入排序
1. 元素集合越接近有序,直接插入排序算法的时间效率越高2. 时间复杂度:O(N^2)3. 空间复杂度:O(1),它是一种稳定的排序算法4. 稳定性:稳定在实际应用中,如果待排序的数组已经基本有序,那么插入排序的效率会比较高。但是对于逆序数组或者随机排序的数组,插入排序的效率会比较低。因此,插入排序通常用于对小规模数据或者部分有序数据的排序。1. 希尔排序是对直接插入排序的优化。2. 当gap > 1时都是预排序,目的是让数组更接近于有序。原创 2024-04-21 22:43:06 · 1204 阅读 · 2 评论 -
[数据结构]------排序----基本内容
数据结构(C语言版)》--- 严蔚敏《数据结构-用面相对象方法与C++描述》--- 殷人昆因为咋们的gap是按照Knuth提出的方式取值的,而且Knuth进行了大量的试验统计,我们暂时就按照:来算。4. 稳定性:不稳定。原创 2024-04-21 00:01:26 · 513 阅读 · 0 评论 -
[数据结构]——二叉树链式结构的实现
由于现在大家对二叉树结构掌握还不够深入,为了降低大家学习成本,此处手动快速创建一棵简单的二叉树,快速进入二叉树操作学习,等二叉树结构了解的差不多时,我们反过头再来研究二叉树真正的创建方式。首先判断根节点是否为空,如果为空则打印"N"(表示空节点),然后递归遍历左子树,打印根节点的值,最后递归遍历右子树。函数实现了二叉树的后序遍历。首先判断根节点是否为空,如果为空则打印"N"(表示空节点),然后递归遍历左子树,递归遍历右子树,最后打印根节点的值。2. 非空:根节点,根节点的左子树、根节点的右子树组成的。原创 2024-04-17 17:30:15 · 909 阅读 · 0 评论 -
[数据结构]——二叉树——堆排序
后续代码以此为基础。原创 2024-04-16 18:09:14 · 625 阅读 · 1 评论 -
[数据结构]——二叉树——堆的实现
如果有一个关键码的集合K = { , , ,…, },把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足: = ) i = 0,1,2…,则称为小堆(或大堆)。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。堆的性质:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。原创 2024-04-12 16:09:53 · 1176 阅读 · 1 评论 -
[数据结构]—二叉树基本概念
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。有一个特殊的结点,称为根结点,根节点没有前驱结点除根节点外,其余结点被分成M(M>0)个互不相交的集合T1、T2、……、Tm,其中每一个集合Ti(1原创 2024-04-12 08:52:38 · 668 阅读 · 0 评论 -
链表,栈,队列的区别及其应用
C语言中链表、栈和队列都是常见的数据结构,用来存储和操作数据。链表(Linked List)是一种动态数据结构,由一系列的节点组成,每个节点包含数据和指向下一个节点的指针。链表的特点是可以轻松地进行插入和删除操作,但是访问某个节点的时间复杂度是O(n)。链表可以分为单向链表和双向链表两种形式。栈(Stack)是一种后进先出(Last In First Out, LIFO)的数据结构,只能在栈的一端进行插入和删除操作。插入操作称为入栈(push),删除操作称为出栈(pop)。栈可以通过数组或链表实现。原创 2024-04-10 00:05:08 · 950 阅读 · 0 评论 -
[数据结构]—栈和队列
目录💓1.栈💞1.栈的概念及结构💞2.栈的实现💞 3.代码实现💘1.总体实现💘2.详细解析💔1.栈的初始化💔2.释放了动态数组中的空间💔3.入栈操作💔4. 栈顶元素删除💔 5.获取栈顶元素💔6.判断栈(ST)是否为空💔7.获取栈大小💘3.整体代码💔1.Stack.h💔2.Stach.c💔3.test.c💓2.队列💞1.队列的概念及结构💞2.队列的实现💞3.代码实现💘1.总体实现💘2. 详细解析💔1.初始化队列💔2.销毁队列💔3.往队列中插入一个元素💔4.队列的出队💔5.获取队列头部元素。原创 2023-11-22 12:36:51 · 371 阅读 · 15 评论 -
[数据结构]—带头双向循环链表——超详解
目录💓1.总体布局💓2.详细解读❣️1.创建双向链表节点❣️2.初始化双向循环链表❣️3.打印双向循环链表❣️4.循环双向链表尾插❣️5.双向循环链表中删除尾节点❣️6.双向链表的头插操作❣️7.双向链表的头部删除操作❣️8.循环链表中查找指定值节点❣️9.该函双向链表中指定节点pos的前面插入一个新的节点❣️10.双向链表中删除某个节❣️11.销毁一个循环双向链表💓3.部分代码进阶❣️1.根据2—9:void LTInsert(LTNode* pos, LTDataType x)原创 2023-11-15 12:13:21 · 180 阅读 · 10 评论 -
[数据结构]——单链表——超详解
❤️作者简介:双非一本 通信工程 大二在读 ❤️❣️小白选手❣️💗有不足,希望大佬多多指教💗个人主页:@小李很执着的个人主页系列专栏:数据结构。原创 2023-11-09 18:55:03 · 85 阅读 · 6 评论 -
[数据结构]——顺序表和链表
线性表(linear list)是n个具有相同特性的数据元素的有限序列。线性表在逻辑上是线性结构,也就说是连续的一条直线。顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存。链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表。用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...:结构最复杂,一般用在单独存储数据。来很多优势,实现反而简单了,后面我们代码实现了就知道了。线性表在物理上存储时,通常以数组和链式结构的形式存储。原创 2023-11-05 22:22:40 · 48 阅读 · 3 评论 -
[数据结构]——算法的时间复杂度和空间复杂度
算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源。因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的,即。在计算机发展的早期,计算机的存储容量很小。所以对空间复杂度很是在乎。但是经过计算机行业的迅速发展,计算机的存储容量已经达到了很高的程度。所以我们如今已经不需要再特别关注一个算法的空间复杂度。原创 2023-11-01 15:31:44 · 99 阅读 · 6 评论