
数据结构
文章平均质量分 78
数据结构是计算机科学中至关重要的一部分,它们为我们提供了组织和处理数据的有效方法。数据结构探索专栏旨在帮助读者深入了解各种数据结构,从基础的数组和链表到更复杂的树、图和散列表。我们将深入探讨不同数据结构的原理、应用和实现方式,并提供清晰的示例和解释,以帮助读者理解它们如何在实际编程中发挥作用。
qiyi.sky
我可复杂,简介不了。(doge)
展开
-
数据结构与算法——希尔排序(引例、希尔增量序列、原始希尔排序、代码、时间复杂度、Hibbard增量序列、Sedgewick增量序列)
数据结构与算法——希尔排序(引例、希尔增量序列、原始希尔排序、代码、时间复杂度、Hibbard增量序列、Sedgewick增量序列)可以发现,8、4、2间隔的插入排序并没有给序列成功排序,最后还是通过间隔1来完成排序的功能。学习自:MOOC数据结构——陈越、何钦铭。希尔排序在插入排序的基础上进行改进。即表示上界也表示下界,为正常值。-间隔”有序的序列,在执行“-间隔”排序后,仍然是“原创 2023-07-16 08:00:00 · 1644 阅读 · 1 评论 -
数据结构和算法——了解哈希表(哈希查找、散列的基本思想)
数据结构和算法——了解哈希表(哈希查找、散列的基本思想)还有没有更快的查找方法呢?我们先看下面的例子:在登陆QQ的时候,QQ服务器是如何核对你的身份的?面对庞大的用户群,如何快速找到用户信息?301T移动大量数据如何快速搜索到需要的关键词呢?如果关键词不方便比较怎么办?。于是我们引进哈希查找法。时间复杂度几乎是常量:O(1),即查找时间与问题规模无关。原创 2023-08-06 08:00:00 · 268 阅读 · 0 评论 -
数据结构和算法——哈希查找冲突处理方法(开放地址法-线性探测、平方探测、双散列探测、再散列,分离链接法)
数据结构和算法——哈希查找冲突处理方法(开放地址法-线性探测、平方探测、双散列探测、再散列,分离链接法)在开放地址散列表中,删除操作要很小心。通常只能“懒惰删除”,即需要增加一个“删除标记(Deleted)”,而并不是真正删除它。以便查找时不会“断链”。其空间可以在下次插入时重用。原创 2023-08-10 08:00:00 · 14359 阅读 · 0 评论 -
数据结构与算法——最小生成树问题(什么是最小生成树、Prim算法、Kruskal算法)
数据结构——最小生成树问题(什么是最小生成树、Prim算法、Kruskal算法)什么是最小生成树:1.是一颗树无回路个顶点一定有条边2.是生成树包含全部顶点条边都在图里3.边的权重和最小向生成树中任加一条边都一定构成回路最小生成树存在图连通。原创 2023-07-10 16:05:02 · 394 阅读 · 0 评论 -
数据结构和算法——桶排序和基数排序(图示、伪代码、多关键字排序,基数排序代码)
假设有N个学生,他们的成绩是0到100之间的整数(于是有M=101个不同的成绩值)。如何在线性时间内将学生按成绩排序?桶排序的处理方法是:建立M个桶,一开始初始化为空链表;插入成绩值时,找到对应的桶,链接到对应的桶里面。原创 2023-07-26 08:00:00 · 318 阅读 · 0 评论 -
数据结构与算法——拓扑排序(引例、拓扑排序、伪代码、代码、关键路径问题)
关键路径问题是拓扑排序的一个应用,用到了另外一种网络。AOE(Activity On Edge)网络。Activity On Vertex 网络。学习自:MOOC数据结构——陈越、何钦铭。此算法可以用来检测有向图是否DAG。,一般用于安排项目的工序。原创 2023-07-12 08:00:00 · 727 阅读 · 0 评论 -
数据结构和算法——归并排序(有序子列的归并、递归算法、非递归算法、思路图解、C语言代码)
如果只在Merge中声明临时数组TmpA,则在递归的过程中会不断进行申请和释放空间;归并排序一般不用于内排序,因为其要额外消耗空间;所以一般在外排序时才会使用归并排序。学习自:MOOC数据结构——陈越、何钦铭。原创 2023-07-20 08:00:00 · 113 阅读 · 0 评论 -
数据结构和算法——快速排序(算法概述、选主元、子集划分、小规模数据的处理、算法实现)
取头、中、尾的中位数,例如取三个数的中位数:8、12、3的中位数就是8;快速排序有一个比较明显的问题,那就是用递归,而递归需要频繁地调用栈;在小规模数据的处理上不占优势。当递归的数据规模充分小时,则停止递归,直接调用简单排序(例如插入排序)也就是说,对小规模的数据(例如N不到100)可能还不如插入排序快。很显然,rand()函数的时间效率是很低的,当然也不考虑。如果有元素正好等于pivot时,则停下来进行交换。,即每次选主元都为元素的中位数的位置。选好基准之后,我们就进入子集的划分。原创 2023-07-22 08:00:00 · 579 阅读 · 0 评论 -
数据结构与算法——简单排序-冒泡排序、插入排序,时间复杂度下界(图示、代码、时间复杂度、定理)
数据结构与算法——简单排序-冒泡排序、插入排序,时间复杂度下界(图示、代码、时间复杂度、定理)X为具体的排序名称,例如:冒泡、插入、希尔等等;A[ ] 为要排序的主体;N为要排序的数据个数。N是正整数大多数情况下,为简单起见,讨论从小到大的整数排序只讨论基于比较的排序(即 > = < 有定义)只讨论内部排序(即数据全部存在于内存内,没有内存外部的数据需要排序,相对应的为外部排序)稳定性:任意两个相等的数据,排序前后的相对位置不发生改变没有一种排序是任何情况下都表现最好的。原创 2023-07-14 09:00:00 · 349 阅读 · 0 评论 -
数据结构和算法——排序算法的比较和排序综测测验
归并排序是一种分治算法,它将待排序的数组不断地分割成更小的子数组,然后将这些子数组合并成有序的数组。归并排序的时间复杂度是,其中N是待排序数组的长度。它是一种稳定的排序算法,即相等元素的相对顺序在排序后不会改变。希尔排序、堆排序和快速排序都是不稳定的排序算法。希尔排序(Shell Sort): 希尔排序是插入排序的一种改进版本。它通过将待排序的数组分割成若干个子序列,对这些子序列进行插入排序,然后逐渐缩小子序列的长度,直到整个数组有序。在希尔排序的过程中,相等元素之间的相对顺序可能会发生改变,因为每原创 2023-07-28 08:00:00 · 265 阅读 · 0 评论 -
数据结构和算法——散列表的性能分析(开放地址法的查找性能、期望探测次数与装填因子的关系、分离链接法的查找性能)
(优点)选择合适的h(key),散列表的查找效率期望是常数O(1),它几乎与关键字的空间的大小n无关!也适合于关键字直接比较计算量大的问题它是以较小的为前提。因此,散列方法是以空间换时间(缺点)散列方法的存储对关键字是随机的,不便于顺序查找关键字,也不适用与范围查找,或最大值最小值查找。开放地址法(优点)散列表是一个数组,存储效率高,随机查找(缺点)散列表有“聚集”现象分离链接法散列表顺序存储和链式存储的结合,链表部分的存储效率和查找效率都比较低。原创 2023-08-12 08:00:00 · 1128 阅读 · 0 评论 -
数据结构和算法——堆排序(选择排序、思路图解、代码、时间复杂度、堆排序及代码)
(在内存足够的情况下,一般没有问题;但如果在固定内存中使用这种算法的堆排序,就会出现无法完成排序的情况;例如:2GB满内存的情况下,要对该序列进行排序,那么实际就需要4GB的内存来进行堆排序。先将序列A建成堆,然后重复地从堆中提取最小元素,并将其存储在临时数组中,实现了堆排序算法。最后,它将排序后的元素复制回原始数组A。虽然堆排序给出最佳平均时间复杂度,但实际效果不如用Sedgewick增量序列的希尔排序。堆排序处理N个不同元素的随机排序的平均比较次数是。,并且复制元素需要时间。原创 2023-07-18 08:00:00 · 150 阅读 · 0 评论 -
数据结构和算法——散列函数的构造方法(直接定址法、除留余数法、数字分析法、折叠法、平方取中法、ASCII码加和法、前三字符移位法)
数据结构和算法——散列函数的构造方法(直接定址法、除留余数法、数字分析法、折叠法、平方取中法、ASCII码加和法、前三字符、移位法)我们发现32是2的5次方,于是可以通过移位,也就是将一个数往左二进制移位五次,就相当于*32.,取后三位391,所以h(56793542) =种,但经过统计得到,实际中的组合约3000种,,即空间利用率大约30%,浪费了70%的空间。,理论上来说,前三字符所有可能性的组合为。原创 2023-08-08 08:00:00 · 1938 阅读 · 1 评论 -
数据结构和算法——表排序(算法概述、物理排序、复杂度分析,包含详细清晰图示过程)
表排序用于 待排元素都为一个庞大的结构,而不是一个简单的数字,例如:一本书,一部电影等等。如果这些待排元素都用之前的排序方法,元素需要频繁互换,那么移动这些元素的时间将会非常长久,效率很低。在表排序的过程中,实际上是不需要移动那些原始数据的,要移动的只是指向他们位置的那些指针。不移动元素本身,而只移动元素本身的排序方法,我们称之为“tabletable比较e和a,发现a比e小,所以a应该要插入到e的前面。但是我们不直接交换元素,而是交换table。原创 2023-07-24 08:00:00 · 561 阅读 · 0 评论 -
数据结构学习记录——树习题-Complete Binary Search Tree(题目描述、输入输出示例、数据结构的选择、核心算法、计算左子树的规模)
数据结构学习记录——树习题-Complete Binary Search Tree(题目描述、输入输出示例、数据结构的选择、核心算法、计算左子树的规模)总结一下计算左子树的规模:第一步是通过公式求出H;第二步是通过公式求出X;第三步是选出正确的X,最后一步就是代入求出我们最终的结果。end学习自:MOOC数据结构——陈越、何钦铭1-X%29%7D%201%29%7D%20X%201%29%7D%20X。原创 2023-06-01 21:06:07 · 777 阅读 · 0 评论 -
数据结构学习记录——如何建立图(邻接矩阵、邻接表-图节点的结构、创建并初始化、插入变、完整图的建立)
二维数组表示图的邻接矩阵。它的大小是MaxVertexNum × MaxVertexNum,用于存储顶点之间边的权重或者存在的情况。(无权重且存在边用1表示,无权重且不存在边则用0表示;有权重且存在边用其权重表示,有权重且不存在边则用一个极大值表示。其中,DataType Data[MaxVertexNum],可以用来存储与每个顶点相关的其他数据。例如:如果图表示一个社交网络,则可以存储每个顶点的个人资料信息(姓名、性别、年龄等),故而它的类型可以是整型,也可以是结构体类型。原创 2023-05-26 11:00:27 · 1950 阅读 · 0 评论 -
数据结构学习记录——图-最短路径问题(无权图单源最短路径算法、有权图单源最短路径算法、多源最短路径算法、Dijkstra(迪杰斯特拉)算法、Floyd算法)
在算法的每一步,我们将一个顶点加入集合S,该顶点是在当前阶段中距离源点s的最短路径长度最小的顶点。Floyd算法也是逐步地求出最短距离的,通过遍历所有可能的中间节点k,并不断尝试更新D[i][j]的值,Floyd算法逐步优化路径长度,最终找到图中所有节点对之间的最短路径。现在,我们引入一个中间节点k,想要通过节点k来尝试找到更短的路径,即尝试在节点i和节点j之间建立一条路径,其中包括节点k。在每一步中,选择的顶点v是当前阶段中距离源点s最近的顶点,而且该距离是经过已确定最短路径顶点集合S的路径长度。原创 2023-06-04 21:25:29 · 4394 阅读 · 1 评论 -
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
解这道题的思路并不难,我们之前就学习过通过两种遍历序列(其中一种为中序序列)就可以确定一颗唯一确定的二叉树,进而得到其余的遍历序列。后序遍历序列中,最后一个节点为根节点;如果当前子树节点个数大于1,则取出当前子树的根节点root,(即先序遍历序列的第一个元素)然后在中序遍历序列中找到root的位置,将其左边的节点个数记为L,右边的节点个数记为R;换句话说,就是我们之前学习过的,根据给出先序遍历和中序遍历求出该树的后序遍历序列。如果当前子树节点个数为1,则将该节点加入到后序遍历序列中,并返回;原创 2023-05-30 08:00:00 · 421 阅读 · 0 评论 -
数据结构学习记录——图应用实例-六度空间(题目描述、算法思路、伪代码及解读、图解)
换句话说,你通过你认识的某个人,再通过他们认识的另一个人,以此类推,最终可以与世界上任何一个陌生人建立联系。然后开始新一轮的循环,直到来到节点7,节点7的最后一个邻接点赋给tail,即节点19;此时last指向节点7;现假设给定了一个社交网络图,请对每个节点计算符合“六度空间”理论的节点占节点总数的百分比。增加计数器 count,表示访问的节点数量,并更新最后一个节点的位置为 W。然后开始遍历节点 V 的每个邻接点 W,即与节点 V 相连的节点。将起始节点 V 入队,Q为队列,用于存储待访问的节点。原创 2023-05-24 08:00:00 · 1277 阅读 · 0 评论 -
数据结构和算法学习记录——线性表之双向链表(下)-头插函数、头删函数、查找函数、pos位置之前插入结点、pos位置删除结点及其复用、销毁链表函数
数据结构和算法学习记录——线性表之双向链表(下)-头插函数、头删函数、查找函数、pos位置之前插入结点、pos位置删除结点及其复用、销毁链表函数。我们不使用大部分教材上的方法,即不多创建一个结点,直接进行指针的改变;这样就需要对指针改变的顺序有极大的要求,一旦指针改变的顺序不一样,就不能实现插入。这里使用的是创建一个结点记录下pos位置的前一个结点,好处是在进行指针改变时不用考虑改变顺序。原创 2023-03-22 12:00:00 · 299 阅读 · 0 评论 -
数据结构和算法学习记录——习题-移除元素
数据结构和算法学习记录——习题-移除元素。给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。原创 2023-03-04 08:00:00 · 77 阅读 · 0 评论 -
数据结构和算法学习记录——树(基本介绍、树的定义、树的特点、树的一些基本术语、树的表示、儿子-兄弟表示法)
树:n(n >= 0)个节点构成的有限集合。当n = 0时,称为空树;对于任意一颗非空树(n > 0),它具备以下性质:1.树中有一个称为“根(Root)”的特殊节点,用r表示;2.其余节点可分为m(m > 0)个互不相交的有限集T1,T2,...,Tm,其中每个集合本身又是一颗树,称为原来树的“子树(SubTree)”。每一个子树又是一颗树树的特点.子树是不相交的除了根节点外,每个节点有且仅有一个父节点;3.一颗N个节点的树有N-1条边。原创 2023-04-06 08:00:00 · 1312 阅读 · 0 评论 -
数据结构和算法学习记录——习题-移除链表元素
数据结构和算法学习记录——习题-移除链表元素。给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。原创 2023-03-14 23:09:03 · 70 阅读 · 0 评论 -
数据结构和算法学习记录——栈和队列作业(实现链栈上的进栈、实现链栈上的退栈、实现链队上的入队列)
数据结构和算法学习记录——栈和队列作业(实现链栈上的进栈、实现链栈上的退栈、实现链队上的入队列)题目来自:《数据结构》大连理工大学出版社(2019.8第一版)原创 2023-04-08 22:00:00 · 290 阅读 · 0 评论 -
数据结构和算法学习记录——习题-翻转链表(不带表头结点逆置算法、带表头结点的链表逆置算法)
数据结构和算法学习记录——习题-翻转链表(不带表头结点逆置算法、带表头结点的链表逆置算法)。给定单链表的头节点 head ,请反转链表,并返回反转后的链表的头节点。不带哨兵位结点的意思是头结点head只是一个指向第一个结点的指针。带哨兵位结点时,则有一个表头结点,其数据域为NULL,指针域则指向第一个结点。带有哨兵位结点(带表头)的翻转也很简单,我们用思路二来写一下其中的一种解法。先把头结点head用phead记录下来,把整个链表翻转之后,再用phead链接翻转之后的链表,返回phead即可。原创 2023-03-18 07:00:00 · 67 阅读 · 0 评论 -
数据结构和算法学习记录——线性表之单链表(上)-初始单链表及其尾插函数(顺序表缺陷、单链表优点、链表打印)
数据结构算法学习记录——线性表之单链表(上)-初始单链表及其头插函数(顺序表缺陷、单链表优点、链表打印)单链表是一种链式存取的数据结构,链表中的数据是以结点来表示的。每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置)。元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。以“结点的序列”表示的线性表称作线性链表(单链表),单链表是链式存取的结构。原创 2023-03-08 12:00:00 · 504 阅读 · 0 评论 -
数据结构和算法学习记录——线性表之顺序表(顺序表概念、结构、顺序表接口函数-头插头删、尾插尾删)
线性表(linear list)是n个具有相同特征的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串......线性表在逻辑上线性结构,也就是说连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常是以数组和链式结构的形式存储。顺序表是数组,但在数组的基础上,它还要求数据是从头开始连续存储的,不能跳跃间隔。顺序表、链表、栈、队列、字符串。原创 2023-03-02 21:55:32 · 137 阅读 · 0 评论 -
数据结构和算法学习记录——总结顺序表和链表(双向带头循环链表)的优缺点、CPU高速缓存命中率
数据结构和算法学习记录——总结顺序表和链表(双向带头循环链表)的优缺点、CPU高速缓存命中率。顺序表优点1. 支持随机访问(用下标访问),需要随机访问结构支持的算法可以很好的适用。2. CPU高速缓存命中率较高缺点1. 在头部或中部插入删除数据时,时间效率低。O(N)2. 是占用的连续的物理空间,空间不够时需要进行扩容。 ◦ 扩容有一定程度的空间消耗 ◦ 为了避免频繁扩容,一般我们都按倍数去扩容,用不完的这个空间就存在了空间浪费原创 2023-03-24 12:00:00 · 244 阅读 · 0 评论 -
数据结构和算法学习记录——二叉树的存储结构&二叉树的递归遍历(顺序存储结构、链表存储结构、先序中序后序递归遍历)
数据结构和算法学习记录——二叉树的存储结构&二叉树的递归遍历(顺序存储结构、链表存储结构、先序中序后序递归遍历)设想一下二叉树要用什么样的方式来存储,一种是用数组,按从上至下,从左到右顺序存储n个节点的完全二叉树。 其中的节点父子关系会满足:非根节点(序号 > 1)的父节点的序号是[i / 2]节点(序号为i)的左孩子节点的序号是[2i],(若2i原创 2023-04-12 22:26:05 · 1022 阅读 · 0 评论 -
数据结构和算法学习记录——初识二叉树(定义、五种基本形态、几种特殊的二叉树、二叉树的重要性质、初识基本操作函数)
数据结构和算法学习记录——初识二叉树(定义、五种基本形态、几种特殊的二叉树、二叉树的重要性质、初识基本操作函数)一个有穷的节点集合。这个集合可以为空;若不为空,则它是由根节点和称为其左子树和右子树的两个不相交的二叉树组成。原创 2023-04-10 13:18:35 · 4744 阅读 · 0 评论 -
数据结构和算法学习记录——复习静态顺序表的两个接口函数(在指定位置插入数据,在指定位置删除数据)
数据结构和算法学习记录——复习静态顺序表的两个接口函数(在指定位置插入数据,在指定位置删除数据)。原创 2023-03-12 00:08:02 · 79 阅读 · 0 评论 -
数据结构和算法学习记录——线性表之单链表(下)-头插函数、尾删函数、头删函数、查找函数、pos位置插入&删除数据、单链表销毁
数据结构和算法学习记录——线性表之单链表(下)-头插函数、尾删函数、头删函数、查找函数、pos位置插入&删除数据、单链表销毁。分类讨论一是链表为空时;二是链表中只有一个结点时;三是链表中大于等于2个结点时。为什么要分类讨论呢?我们从第三种情况往回分析就可以得到答案了:原创 2023-03-16 11:30:00 · 441 阅读 · 0 评论 -
数据结构和算法学习记录——栈和队列习题-用队列实现栈、用栈实现队列(核心思路、解题过程、完整题解)
数据结构和算法学习记录——栈和队列习题-用队列实现栈、用栈实现队列(核心思路、解题过程、完整题解)。1.入数据时,往不为空的队列入,保持另一个队列为空。2.出数据时,依次出队头的数据,转移到另一个队列保存。直到剩下最后一个数据,用来出数据,则实现了栈的先进后出。用队列实现栈,先定义一下这个栈的结构体类型。题目中定义的是匿名结构体,这个栈的结构体包括了两个队列的结构体。(属于嵌套定义)Queue q1;Queue q2;} MyStack;原创 2023-04-02 06:00:00 · 416 阅读 · 0 评论 -
数据结构和算法学习记录——线性表之双向链表(上)-结点类型定义、初始化函数、创建新结点函数、尾插函数、打印函数、尾删函数
数据结构和算法学习记录——线性表之双向链表(上)-结点类型定义、初始化函数、创建新结点函数、尾插函数、打印函数、尾删函数。原创 2023-03-20 23:27:25 · 173 阅读 · 0 评论 -
数据结构和算法学习记录——特殊线性表之栈(下)-销毁栈函数、判断栈是否为空、压栈函数、出栈函数、取栈顶元素、计算栈中有多少个元素、栈有关习题-有效的括号
数据结构和算法学习记录——特殊线性表之栈(下)-销毁栈函数、判断栈是否为空、压栈函数、出栈函数、取栈顶元素、计算栈中有多少个元素、栈有关习题-有效的括号原创 2023-03-28 08:00:00 · 139 阅读 · 0 评论 -
数据结构和算法学习记录——设计循环队列(数组实现循环队列)核心思路、题解过程、完整题解
在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元素,即使在队列前面仍有空间。(例如:一个循环队列能存储3个数据,那么它循环队列满的情况下,tail指向的位置就是第五个,下标为3;(3(tail) + 1) % (3(n) + 1)) = 0 == head)也就是说,当我们需要存n个数据,那使用循环队列的话,就要开n+1个空间,否则无法判断队列为空以及队列为满。先开辟一个循环队列结构体大小的空间,再开辟循环队列结构体内部数组大小的空间;// 返回 false,队列已满。// 返回 true。原创 2023-04-04 08:00:00 · 791 阅读 · 0 评论 -
数据结构和算法学习记录——删除有序数组中的重复项、合并两个有序数组
数据结构和算法学习记录——删除有序数组中的重复项、合并两个有序数组.给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。原创 2023-03-06 12:00:00 · 518 阅读 · 0 评论 -
数据结构和算法学习记录——特殊线性表之栈(上)-栈的概念、栈的结构、链式栈数组栈、栈的结构体定义、栈的基本接口函数、栈顶初始化函数
数据结构和算法学习记录——特殊线性表之栈(上)-栈的概念、栈的结构、链式栈数组栈、栈的结构体定义、栈的基本接口函数、栈顶初始化函数。栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。压栈:栈的插入操作叫做进栈/压栈/入栈。数据在栈顶进入。出栈:栈的删除操作叫做出栈。数据也在栈顶出去。原创 2023-03-26 11:30:00 · 393 阅读 · 0 评论 -
数据结构和算法学习记录——特殊线性表之队列-队列的概念、队列结构体类型定义 、基本接口函数、初始化函数、销毁队列函数、入队列函数、判断队列是否为空、出队列函数、读取队头队尾的数据 、计算队列数据个数
数据结构和算法学习记录——特殊线性表之队列-队列的概念、队列结构体类型定义 、基本接口函数、初始化函数、销毁队列函数、入队列函数、判断队列是否为空、出队列函数、读取队头队尾的数据 、计算队列数据个数。队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First in Frist Out)入队列:进行插入操作的一端称为队尾。出队列:进行删除操作的一端称为队头。原创 2023-03-30 08:00:00 · 115 阅读 · 0 评论 -
数据结构和算法学习记录——二叉搜索树的插入操作、删除操作
这样处理的好处是:左子树的最大值一定不是有两个孩子节点的情况、而右子树的最小值也一定不是有两个孩子节点的情况。我们已经知道了没有孩子节点的情况和只有一个孩子节点的情况该怎么删除了,当有两个孩子节点的情况时,就考虑能不能把它变成只有一个孩子节点的情况来处理呢?当找到了新节点应该插入的位置时,需要通过找到上一个节点的地址,来将上一个节点的左子树指针或者右子树指针指向新节点。是可以实现的:用另一节点替代被删除的节点,这个节点应是右子树的最小元素或者左子树的最大元素。它形成的二叉搜索树是怎样的呢?原创 2023-04-20 22:23:01 · 1246 阅读 · 0 评论