![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 94
大学学的最认真的一门课了,希望这次有个质变
_李白_
内外兼修,方是正途;外是架构,内是数学。
展开
-
定时器的实现
目录1、定时器概述2、定时器设计2.1、接⼝设计2.2、数据结构选择2.2.1、红⿊树2.2.2、最⼩堆2.2.3、跳表2.2.4、时间轮2.3、红黑树实现定时器2.4、最小堆实现定时器2.5、时间轮实现定时器2.5.1、单层级时间轮2.5.2、多层级时间轮1、定时器概述对于服务端来说,驱动服务端逻辑的事件主要有两个,⼀个是⽹络事件,另⼀个是时间事件;在不同框架中,这两种事件有不同的实现⽅式;第⼀种,⽹络事件和时间事件在⼀个线程当中配合使⽤原创 2021-04-11 23:38:26 · 833 阅读 · 0 评论 -
数据结构:布隆过滤器
布隆过滤器是一种数据结构,比较巧妙的概率型数据结构,特点是高效地插入或查询,可以用来告诉你“某样东西一定不存在或可能存在”。相比较于传统的List、Set、Map等数据结构,它更高效、占用空间更少,但是确点是其返回的不是确定值,而是概率性的结果。...原创 2021-01-20 22:09:28 · 468 阅读 · 0 评论 -
数据结构(61):带你手撕红黑树的插入与删除(图文详解)
红黑树是每个节点都带有颜色属性的二叉查找树,颜色为红色或黑色。在二叉查找树的一般要求以外,对于任何有效的红黑树增加了如下的额外要求:节点是红色或黑色。 根是黑色。 所有叶子都是黑色(叶子是NIL节点)。 每个红色节点必须有两个黑色的子节点。(从每个叶子到根的所有路径上不能有两个连续的红色节点。) 从任一节点到其每个叶子的所有简单路径都包含相同数目的黑色节点。这些约束确保了红黑树的关键特性:从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。结果是这个树大致上是平衡的。因为操作比如.原创 2021-01-05 18:46:03 · 29690 阅读 · 6 评论 -
数据结构(60) :归并排序
归并排序是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。...原创 2020-12-28 19:25:41 · 174 阅读 · 0 评论 -
数据结构(59) :交换排序(冒泡排序、快速排序)
目录1、冒泡排序1.1、基本思想:1.2、算法实现1.3、算法性能2、快速排序2.1、基本思想2.2、算法实现2.3、算法性能交换排序的基本方法是:两两比较待排序元素的关键字,并交换不满足次序要求的那些偶对,直到全部满足为止。1、冒泡排序1.1、基本思想:通过无序区中相邻元素关键字之间的比较和位置的交换,使关键字最小的元素如气泡一般逐渐往上“漂浮”直至“水面”。整个算法是从最下面的元素开始,对每两个相邻元素的关键字进行比较,且使关键字较小的元素切换到较大的原创 2020-12-24 23:56:46 · 227 阅读 · 1 评论 -
数据结构(58) :选择排序(简单选择排序、堆排序)
选择排序的基本方法是:每步从待排序的元素中选出关键字最小的元素,顺序放在已排序的元素序列的最后,直到全部排序完成为止。1、简单选择排序1.1、基本思想简单选择排序的过程是:假设元素存放在R[0..n-1]之中,其中R[0..i-1]是有序区,R[i..n-1]是无序区,且有序区的所有关键字均小于无序区的所有关键字。需将R[i]添加到R[0..i-1]之中,使R[0..i]成为有序的。1.2、算法实现/*select sort*/#include <iostream>原创 2020-12-24 17:19:30 · 673 阅读 · 0 评论 -
数据结构(57) :插入排序(直接插入排序、折半插入排序、希尔排序)
插入排序的基本思想是:每一趟讲一个待排序的元素,将其按关键字值的大小插入到已经排序的部分文件的适当位置上,直到全部插入完成。博主今天介绍三种插入排序方法:直接插入排序、折半插入排序、希尔排序1、直接插入排序直接插入排序是一种最简单的排序方法,其过程是依次将每个元素插入到一个有序的序列中去。假设元素存在R[0..i-1]是已经排好序的元素区(简称有序区,初始时有序区只有一个元素);R[i..n-1]是未排序的元素区(无序区)。插入排序将R[i]插入到R[0..i-1]之中,使R[0..i]成为有序原创 2020-12-21 21:12:23 · 1651 阅读 · 0 评论 -
数据结构(56) 排序的基本概念
1、算法的稳定性若待排序表中有两个元素Ri和Rj,其对应的关键字相同即keyi=keyj,且在排序前Ri在Rj的前面,若使用某一排序算法排序后,Ri仍然在Rj的前面,则称这个排序算法是稳定的,否则称排序算法是不稳定的。需要注意的是,算法是否具有稳定性并不能衡量一个算法的优劣,它主要是对算法的性质进行描述。如果待排序表中的关键字不允许重复,则排序结果是唯一的,那么选择排序算法时的稳定与否就无关紧要了。2、内部排序与外部排序在排序过程中,根据数据元素是否完全在内存中,可将排序算法分为两类:①内部排序原创 2020-08-08 20:05:13 · 225 阅读 · 0 评论 -
数据结构(55) 散列表(哈希表,hash table,hash map)
目录1、散列表的基本概念2、散列函数的构造方法3、常用的散列函数3.1、直接定址法3.2、除留余数法3.3、数字分析法3.4、平方取中法4、处理冲突的办法4.1、开放定址法4.2、拉链法(链接法,chaining)5、散列表查找6、散列表的查找过程的性能分析1、散列表的基本概念在前面介绍的线性表和树表的查找中,记录在表中的位置和记录的关键字之间不存在确定关系,因此,在这些表中查找记录时需进行一些列的关键字比较。这类查找方法建立在“比较”的基础上,查找的原创 2020-08-08 19:43:55 · 1624 阅读 · 0 评论 -
数据结构(54) B树、B+树
1、B树1.1、B树的定义B树,又称多路平衡查找树,B树中所有结点的孩子个数的最大值称为B树的阶,通常用m表示。一棵m阶B树或为空树,或为满足如下特性的m叉树:1)树中每个结点至多有m棵子树,即至多含有m-1个关键字。2)若根节点不是终端结点,则至少有两棵子树。3)除根节点外的所有非叶结点至少有棵子树,即至少含有个关键字。4)所有非叶结点的结构如下:Ki(i = 1,2,...,n)代表关键字且满足K1<K2<...<Kn;Pi(i = 0,1,...,原创 2020-08-08 14:18:03 · 5858 阅读 · 0 评论 -
数据结构(53) 顺序查找、二分查找、分块查找(索引顺序查找)
目录1、顺序查找1.1、一般线性表的顺序查找1.2、有序表的顺序查找1、顺序查找顺序查找又称线性查找,主要用于在线性表中进行查找。顺序查找通常分为对一般的无序线性表的顺序查找和对按关键字有序的顺序表的顺序查找。下面分别进行讨论。1.1、一般线性表的顺序查找作为一种最直观的查找方法,其基本思想是从线性表的一端开始,逐个检查关键字是否满足给定的条件。若查找到某个元素的关键字满足给定条件,则查找成功,返回该元素在线性表中的位置;若已经查找到表另一端,但还没有查找到符合给定条件的元素,则原创 2020-08-05 16:46:36 · 7315 阅读 · 4 评论 -
数据结构(52)查找的基本概念
1)查找在数据集合中寻找满足某种条件的数据元素的过程称为查找。查找的结果一般分为两种:一是查找成功,即在数据集合中找到了满足条件的数据元素;二是查找失败。2)查找表(查找结构)用于查找的数据集合称为查找表,它由同一类型的数据元素(或记录)组成,可以是一个数组或链表等数据类型。对查找表经常要进行的操作一般有4种:① 查询某个特定的数据元素是否在查找表中② 检索满足条件的某个特定的数据元素的各种属性③ 在查找表中插入一个数据元素④ 从查找表删除某个数据元素3)静态查找表若一个原创 2020-08-05 15:18:18 · 1199 阅读 · 0 评论 -
数据结构(51)关键路径
在带权有向图中,以顶点表示事件,以有向边表示活动,以边上的权值表示完成该活动的开销(如完成活动所需的时间),称之为用边表示活动的网络,简称AOE网。AOE网和AOV网都是有向无环图,不同之处在于它们的边和顶点所代表的含义是不同的,AOE网中的边有权值;而AOV网中的边无权值,仅表示顶点之间的前后关系。AOE网具有以下两个性质:①只有某顶点所代表的事情发生后,从该顶点出发的各有向边所代表的活动才能开始②只有在进入某顶点的各有向边所代表的活动都已结束时,该顶点所代表的事情才能发生。在AOE网中仅原创 2020-07-30 18:37:06 · 4452 阅读 · 6 评论 -
数据结构(50)有向无环图和AOV网的拓扑排序
有向无环图:若一个有向图中不存在环,则称为有向无环图,简称DAG图。有向无环图是描述含有公共子式的表达式的有效工具。例如表达式((a+b)*(b*(c+d) + (c+d)*e) * ((c+d)*e)*((c+d)*e)可以用二叉树来表示,如图50-1所示 图50-1 二叉树描述表达式仔细观察上述表达式,可发现有一些相同的子表达式(c+d)和(c+d)*e。若利用有向无环图,则可实现对相同子式的共享,从而节省存储空间,图50-2所示为...原创 2020-07-30 10:47:10 · 1553 阅读 · 0 评论 -
数据结构(49)图的应用之单源最短路径Dijkstra算法与多源最短路径Floyd算法
目录1、简述2、单源最短路径中的单源到底啥意思?3、Dijkstra算法求单源最短路径问题4、思考Dijkatra算法与Prim算法有何相似之处?1、简述广度优先搜索查找最短路径只是对无权图而言的。当图是带权图时,把从一个顶点v0到图中其余任意一个顶点vi的一条路径(可能不止一条)所经过边上的权值之和,定义为该路径的带权路径长度,把带权路径长度最短的那条路径称为最短路径。求解最短路径的算法通常都依赖于一种性质,即两点之间的最短路径也包含了路径上其他顶点间的最短路径。带权有向图G的原创 2020-07-26 22:33:51 · 3940 阅读 · 0 评论 -
数据结构(48)图的应用之最小生成(代价)树(Prim算法与Kruskal算法)
1、最小生成树一个连通图的生成树包含图的所有顶点,并且只含尽可能少的边。对于生成树来说,若砍去它的一条边原创 2020-07-26 16:07:25 · 4946 阅读 · 0 评论 -
数据结构(47)图的遍历之深度优先搜索
1、深度优先搜索与广度优先搜索不同,深度优先搜索(Depth-First_Search,DFS)类似于树的先序遍历。如其名称中所暗含的意思一样,这种搜索算法所遵循的搜索策略是尽可能“深”地搜索一个图。它的基本思想如下:首先访问图中某一起始顶点v,然后由v出发,访问与v邻接且未被访问的任一顶点w1,再访问与w1邻接且未被访问的任一顶点w2...重复上述过程。当不能再继续向下访问时,依次退回到最近被访问的顶点,若它还有邻接顶点未被访问过,则从该点开始继续上述搜索过程,直至图中所有顶点均被访问过为止。原创 2020-07-20 17:44:42 · 908 阅读 · 0 评论 -
数据结构(46)图的遍历之广度优先搜索
目录1、广度优先搜索2、BFS算法的性能分析3、BFS算法求解单源最短路径问题4、广度优先生成树图的遍历是指从图中的某一顶点出发,按照某种搜索方法沿着图中的边对图中的所有顶点访问一次且仅访问一次。注意到树是一种特殊的图,所以树的遍历实际上也可视为一种特殊的图的遍历。图的遍历算法是求解图的连通性问题、拓扑排列和求关键路径等算法的基础。图的遍历比树的遍历要复杂得多,因为图的任一顶点都可能和其余的顶点相邻接,所以在访问某个顶点后,可能沿着某条路径搜索又回到该顶点上。为避免同一顶点被访问多次原创 2020-07-18 03:08:10 · 1367 阅读 · 0 评论 -
数据结构(45)图的基本操作
图的基本操作是独立于图的存储结构的。而对于不同的存储方法,操作算法的具体实现会有不同的性能。在设计具体算法的实现时,应考虑采用何种存储方式的算法效率会更高。图的基本操作主要包括(仅抽象地考虑,故忽略掉各变量的类型):Adjacent(G,x,y):判断图G是否存在边<x,y>或(x,y)。Neighbors(G,x):列出图G中与结点x邻接的边。InsertVertex(G,x):在图G中插入顶点x。DeleteVertex(G,x):从图中删除顶点x。AddEdge(G原创 2020-07-04 10:50:02 · 1491 阅读 · 0 评论 -
数据结构(45)图的四种存储方法:邻接矩阵法、邻接表法、十字链表、邻接多重表
图的存储必须要完整、准确地反映顶点集合边集的信息,根据不同图的结构和算法,采用不同的存储方式将对程序的效率产生相当大的影响,因此所选的存储结构应适合于欲求解的问题。目录1、邻接矩阵法2、邻接表法3、十字链表4、邻接多重表1、邻接矩阵法所谓邻接矩阵存储,是指用一个一维数组存储图中顶点的信息,用一个二维数组存储图中边的信息(即各顶点之间的邻接关系),存储顶点之间邻接关系的二维数组称为邻接矩阵。结点数为n的图G=(V,E)的邻接矩阵A是n*n的。将G的顶点编号为v1,v2,...,原创 2020-07-03 23:24:50 · 3483 阅读 · 0 评论 -
数据结构(44)图的定义和常见术语
1、图的定义图G由顶点集V和边集E组成,记为G=(V,E),其中V(G)表示图G中顶点的有限非空集;E(G)表示图G中顶点之间的关系(边)集合。若V={ v1,v2,...,vn},则用|V|表示图G中顶点的个数,也称图G的阶,E={(u,v)|u∈V,v∈V},用|E|表示图G中边的条数。注意:线性表可以是空表,树也可以是空树,但图不可以是空图,就是说,图中不能一个顶点也没有,图的顶点集V一定非空,但边集E可以为空,此时图中只有顶点而没有边。2、常见术语和概念2.1、有向图若E..原创 2020-06-23 09:15:12 · 1862 阅读 · 1 评论 -
数据结构(36)哈夫曼树和哈夫曼编码
目录1、哈夫曼树的定义2、哈夫曼树的构造3、哈夫曼编码1、哈夫曼树的定义在许多应用中,树中结点常常被赋予一个表示某种意义的数值,称为该结点的权。从树的根到任意结点的路径长度(经过的边数)与该结点上权值的乘积,称为该结点的带权路径长度。树中所有叶结点的带权路径长度之和称为该树的带权路径长度,记为式中,Wi是第i个叶结点所带的权值,Li是该叶结点到根节点的路径长度。在含有n个带权叶结点的二叉树中,其中带权路径长度(WPL)最小的二叉树称为哈夫曼树,也称最优二叉树。例如,图36-1原创 2020-06-21 19:39:04 · 2612 阅读 · 0 评论 -
数据结构(35)平衡二叉树
1、平衡二叉树(BBT,Binary Balance Tree)的定义为了避免树的高度增长过快,降低二叉排序树的性能,规定在插入和删除二叉树结点时,要保证任意结点的左、右子树高度差不超过1,将这样的二叉树称为平衡二叉树,简称平衡树。定义结点左子树与右子树的高度差为该结点的平衡银子,则平衡二叉界限的平衡银子的值只可能是-1、0或1。因此,平衡二叉树可定义为或者使一棵空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树。且左子树和右子树的高度差的绝对值不超过1。图35-1 平衡..原创 2020-06-21 16:37:44 · 2030 阅读 · 0 评论 -
数据结构(34)二叉排序树
目录1、二叉排序树(BST,Binary Sort Tree)定义2、二叉排序树的查找3、二叉排序树的插入4、二叉排序树的构造6、二叉排序树的查找效率分析7、二叉排序树与二分排序对比1、二叉排序树(BST,Binary Sort Tree)定义二叉排序树(也称为二叉查找树)或者是一棵空树,或者是具有以下特性的二叉树:1)若左子树非空,则左子树上所有结点的值均小于根节点的值。2)若右子树非空,则右子树上所有结点的值均大于根节点的值。3)左、右子树也分别是一棵二叉排序原创 2020-06-20 23:04:02 · 10647 阅读 · 1 评论 -
数据结构(33)树的应用--并查集
并查集是一种简单的集合表示,它支持以下3种操作:1)Union(S,Root1,Root2):把集合S中的子集合Root2并入子集合Root1。要求Root1和Root2互不相交,否则不执行合并。2)Find(S,x):查找集合S中单元素x所在的子集合,并返回该子集合的名字。3)Initial(S):将集合S中的每个元素都初始化为只有一个单元素的子集合。通常用树(森林)的双亲表示法作为并查集的存储结构,每个子集合以一棵树表示。所有表示子集合的树,构成表示全集合的森林,存放在双亲表示数组内。通原创 2020-06-20 20:33:15 · 430 阅读 · 2 评论 -
数据结构(32)树、森林
1、树的存储结构树的存储方式有很多,即可采用顺序存储结构,又可采用链式存储结构,但无论采用何种存储方式,都要求能唯一地反映树中各结点之间的逻辑关系,这里介绍3中常用的存储结构。1.1、双亲表示法这种存储方式采用一组连续空间来存储各个结点,同时在每个结点中增设一个伪指针,指示其双亲结点在数组中的位置。如图32-1所示,根节点下标为0,其伪指针域为-1。 图32-1 树的双亲表示法双亲表示法的存储结构描述如下:...原创 2020-06-19 23:53:45 · 2836 阅读 · 0 评论 -
数据结构(31)线索二叉树(通过中序非递归遍历建立中序线索二叉树)
1、基本概念遍历二叉树是以一定的规则将二叉树中的结点排列成一个线性序列,从而得到几种遍历序列,使得该序列中的每个结点(第一个和最后一个结点除外)都有一个直接前驱和直接后继。传统的二叉链表存储仅能体现一种父子关系,不能直接得到结点在遍历中的前驱或后继。前面提到,在含n个结点的二叉树中,有n+1个空指针。由此设想能否利用这些空指针来存放指向其前驱或后继的指针?这样就可以像遍历单链表那样方便地遍历二叉树。引入线索二叉树正是为了加快查找结点前驱和后继的速度。规定:若无左子树。令lchild指向其前驱结点原创 2020-06-19 21:22:35 · 1310 阅读 · 0 评论 -
数据结构(30)二叉树层次遍历
图30-1所示为二叉树的层次遍历,即按照箭头所指方向,按照1,2,3,4的层次顺序,对二叉树中的各个结点进行访问。 图30-1 二叉树的层次遍历要进行层次遍历,需要借助一个队列。先将二叉树根结点入队,然后出队,访问出队结点,若它有左子树,则将左子树根节点入队;若它有右子树,则将右子树根节点入队。然后出队,访问出队结点......如此反复,直至队列为空。二叉树的层次遍历算法如下:template<typename DataType>inline voi...原创 2020-06-18 15:35:10 · 992 阅读 · 0 评论 -
数据结构(29)二叉树的先序、中序、后序遍历的递归形式与非递归形式;先序、中序、后序已知两个求另一个或者直接求二叉树(附带一个本人git上的关于二叉树的一个小型c++模板库)
二叉树的遍历是原创 2020-06-14 23:52:48 · 1216 阅读 · 0 评论 -
数据结构(28)二叉树易混点
1、下列关于二叉树的说法中,正确的是(C) A. 度为2的有序树就是二叉树。 B. 含有n个结点的二叉树的高度为⌊log2(n)⌋+1。 C. 在完全二叉树中,若一个结点没有左孩子,则它必是叶节点。 D. 在任意一棵非空二叉排序树中,删除某结点后又将其插入,则所得二叉排序树与删除前原二叉排序树相同。解析:A:度为2的有序树和二叉树的区别在于,当某个分支结点有一个孩子的时候,度为2的二叉树部分左右孩子,而二叉树分左右孩子,即使只有一个孩子。D...原创 2020-06-14 21:00:32 · 3683 阅读 · 0 评论 -
数据结构(27)二叉树的定义、性质、存储结构和几个特殊二叉树
目录1、二叉树的定义2、几个特殊的二叉树2.1、满二叉树2.2、完全二叉树2.3、二叉排序树2.4、平衡二叉树3、二叉树的性质4、二叉树的存储结构、4.1、顺序存储结构4.2、二叉树的链式存储1、二叉树的定义二叉树是另一种树形结构,其特点是每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点),并且二叉树的子树有左右之分,其次序不能颠倒。与树相似,二叉树也以递归的形式定义。二叉树是n(n>=0)个结点的有限集合:①或者为空二叉树,即n=0。原创 2020-06-14 14:51:38 · 750 阅读 · 0 评论 -
数据结构(26)树的基本概念
目录1、树的定义2、基本术语3、树的性质1、树的定义树是n(n>=0)个节点的有限集。当n=0时,称为空树。在任意一颗非空树中应满足:1)有且仅有一个特定的称为根的结点。2)当n>1时,其余节点可分为m(m>0)个互不相交的有限集T1,T2,...,Tm,其中每个集合本身又是一棵树,并且称为根的子树。显然,树的定义是递归的,即在树的定义中又用到了其自身,树是一种递归的数据结构。树作为一种逻辑结构,同时也是一种分层结构,具有以下两个特点:1)树的根结点没有原创 2020-06-13 23:02:19 · 1819 阅读 · 0 评论 -
数据结构(24)串的存储方式和基本操作
串(string)是由零个或多个字符组成的有限序列,一般记为S='a1a2...an'(n>=0)其中,S是串名,单引号括起来的字符序列是串的值;ai可以是字母、数字或其他字符;串中字符的个数n称为串的长度。n=0时的串称为空串。串中任意个连续的字符组成的子序列称为该串的子串...原创 2020-06-08 16:25:52 · 3324 阅读 · 0 评论 -
数据结构(22)特殊矩阵的压缩存储
1、假设一个算术表达式中包含圆括号、方括号和花括号3种类型的括号 ,编写一个算法来别表达式中的括号是否配对,以字符“\0”作为算术表达式的结束符。bool isPair(char *str){ int i = 0; stack<char> mystack; while (*(str+i) != '\0') { if (*(str + i) == '{' || *(str + i) == '[' || *(str + i) == '(')...原创 2020-06-07 15:54:45 · 4272 阅读 · 1 评论 -
数据结构(21)队列的简单应用
1、若希望循环队列中的元素都能得到利用,则需要设置一个标志域tag,并以tag的值为0或1来区分队头指针front和队尾指针rear相同时的队列是“空”还是“满”。试编写于此结构相应的入队和出队算法。2、利用两个栈S1,S2来模拟一个队列,月已知栈的4个运算定义如下:Push(S,x); //元素x入栈Pop(S,x); //S出栈并将出栈的值赋给xStackEmpty(S); //判断栈是否为空StackOverflow(S); //判断栈是否满如何利用栈的运...原创 2020-06-02 17:13:03 · 1288 阅读 · 2 评论 -
数据结构(20)栈的简单应用
1、有5个元素,其入栈次序依次为A,B,C,D,E,在各种可能的出栈次序中,第一个出栈元素为C且第二个出栈元素为D的出栈序列有哪几个?解析:第一个元素为C说明在C出栈之前,栈中元素依次从栈底到栈顶为A,B,C,所以AB元素的出栈序列只能是B在A之前出栈这一种情况;第二个出栈元素为D,说明C出栈后,D接着入栈,出栈;综合分析可得:出栈的顺序有种:CDEBA,CDBEA,CDBAE2、若元素的进栈序列为A,B,C,D,E,运用栈操作,能否得到栈序列B,C,A,E,D和D,B,A,C.原创 2020-06-01 10:43:58 · 4014 阅读 · 0 评论 -
数据结构(19)栈和队列的实际应用
1、栈在括号匹配中的应用假设表达式中允许两种括号:圆括号和方括号,其嵌套的顺序任意即([]())或[([][])]等均为正确的格式,[(])这种交叉的为不正确的格式。考虑下面括号序列:[ ( [ ] [ ] ) ]1 2 3 4 5 6 7 8分析如下:1)计算机接收第一个“[”后,期待与之匹配的第8个括号“]”出现。2)获得了第2个括号“(”,此时第一个括号“[”暂时放在一边,而几波期待与之匹配的第7个括...原创 2020-05-29 22:10:47 · 7264 阅读 · 0 评论 -
数据结构(18)输入受限的双端队列和输出受限的双端队列详解
关于双端队列的基本概念和什么叫受限双端队列,请戳双端队列与受限双端队列。本文主要通过一个经典的习题来分享一下受限双端队列的入队和出队情况。设有一个双端队列,输入序列为1,2,3,4,试分别求出以下条件的输出序列。(1)能由输入受限的双端队列得到,但不能由输出受限的双端队列得到的输出序列(2)不能由输入受限的双端队列得到,但能由输出受限的双端队列得到的输出序列(3)既不能由输入受限的双端队列得到,又不能由输出受限的双端队列得到的输出序列看完是不是有点想打人,那我们从容易到简单把这个题.原创 2020-05-28 18:45:21 · 44678 阅读 · 2 评论 -
数据结构(17)队列的链式存储结构和双端队列
1、队列的链式存储队列的链式表示称为链队列 ,它实际上是一个同时带有队头指针和队尾之战的单链表。头指针指向队头结点。尾指针指向队尾结点,即单链表的最后一个结点。 图17.1 不带头结点的链式队列队列的链式存储类型可描述为//链式队列结点typedef struct{ ElemType data; struct LinkNode *next;}LinkNode;//链式队列typedef st...原创 2020-05-28 14:54:12 · 1661 阅读 · 1 评论 -
数据结构(16)队列的顺序存储结构
1、队列的顺序存储队列的顺序实现是指分配一块连续的存储单元存放队列中的元素,并附设两个指针:队头指针front指向队头元素。队尾指针rear指向队尾元素的下一个位置(其实和单链表有无头结点是一样的,队尾指针你想指向最后一个元素或者最后一个元素的下一位都行,注意相应的操作随之变动就行)。队列的顺序存储可描述为#define MaxSize 50typedef struct{ ElemType data[MaxSize]; int front,rear;}SqQueue;原创 2020-05-27 14:07:47 · 5402 阅读 · 5 评论