![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 84
炮炮轰
待到秋来九月八&&我花开后百花杀
展开
-
数据结构——二叉树的先中后序遍历
——本节内容为Bilibili王道考研《数据结构》P43~P45视频内容笔记。 目录一、二叉树的先中后序遍历1.先中后序遍历2.举例 3.先中后序遍历和前中后缀的关系4.代码实现5.求遍历序列6.应用:求树的深度二、二叉树的层次遍历1.层次遍历2.算法思想:3.算法演示:4.代码实现:三、由遍历序列构造二叉树1.遍历序列构造二叉树2.前序+中序3.后序+中序4.层序+中序(1)二叉树的递归特性: ①要么是个空二叉树; ②要么是由“根结点+左子树+右子树”组成的二叉树。(2)基于此原创 2022-12-03 22:58:53 · 13735 阅读 · 2 评论 -
力扣中的线性扫描
力扣628题中提到的“线性扫描”原创 2024-05-16 23:44:04 · 538 阅读 · 0 评论 -
数据结构——散列查找
1.散列表(Hash Table),又称哈希表。根据关键字而直接访问的数据结构。也就是说,散列表建立了关键字和存储地址之间的一种直接映射关系(数据元素的关键字与其存储地址直接相关)。2.散列函数:一个把查找表中的关键字映射成该关键字对应的地址的函数,记为(这里的地址可以是数据下标,索引或内存地址等)。3.冲突越多,查找效率越低。4.,装填因子会直接影响散列表的查找效率。原创 2023-02-04 20:31:50 · 582 阅读 · 0 评论 -
数据结构——B树、B+树
B树又称多路平衡查找树,B树中所有结点的孩子个数的最大值称为B树的阶,通常用m表示。一棵m阶B树或为空树,或为满足如下特性的m叉树:(1)树中每个结点至多有m棵子树,即至多含有m-1个关键字;(2)若根结点不是终端结点,则至少有两棵子树;(3)除根结点外的所有非叶节点至少有棵子树,即至少含有个关键字;(4)所有的叶结点都出现在同一层次上,并且不带信息(可以视为外部结点或类似于折半查找判定树的查找失败结点,实际上这些结点并不存在,指向这些结点的指针为空);原创 2023-01-23 00:13:33 · 2776 阅读 · 0 评论 -
数据结构——红黑树
红黑树是二叉排序树,即左子树结点值原创 2023-01-06 22:36:59 · 982 阅读 · 0 评论 -
数据结构——查找的基本概念
若不等,则所需查找的元素只能在中间元素以外的前半部分或后半部分(例如,在查找表升序排序时,若给定值key大于中间元素,则所查找的元素只可能在后半部分)。然后再缩小的范围内继续进行同样的查找,如此重复,直到找到为止,或确定表中没有所需要查找的元素,则查找不成功,返回查找失败的信息。式中,n是查找表的长度即元素个数;(2)可以用如图所示的判定树来描述有序线性表的查找过程,树中的圆形结点表示有序线性表中存在的元素,树中的矩形结点称为失败结点(若有n个结点,则相应地有n+1个查找失败节点)。原创 2022-12-29 19:07:37 · 340 阅读 · 0 评论 -
数据结构——关键路径
在带权有向图中,以顶点表示事件,以有向边表示活动,以边上的权值表示完成该活动的开销(如完成活动需要的时间),称之为用边表示活动的网络,简称AOE网。(6)若一个活动的时间余量为0,则说明该活动必须要如期完成,d(i)=0即l(i)=e(i)的活动ai是关键活动,由关键活动组成的路径就是关键路径。(5)活动ai的时间余量:d(i)=l(i)-e(i),表示在不增加完成整个工程所需总时间的情况下,活动ai可以拖延的时间;(2)活动ai的最早开始时间e(i):指该活动弧的起点所表示的事件的最早发生时间;原创 2022-12-28 23:10:10 · 8409 阅读 · 1 评论 -
数据结构——拓扑排序
拓扑排序是对有向无环图的顶点的一种排序,它使得若存在一条从顶点A到顶点B的路径,则在排序中顶点B出现在顶点A的后面。(用顶点表示活动的网)用DAG图(有向无环图)表示一个工程,顶点表示活动,有向边表示活动Vi必须先于活动Vj进行;(3)重复(1)和(2)直到当前AOV网为空或当前网中不存在无前驱的顶点为止(如果当前所有顶点入度>0,说明原图存在回路)。(1)从AOV网中选择一个没有前驱(入度为0)的顶点并输出;(3)重复(1)和(2)直到当前AOV网为空。(1)邻接表:O(|V|+|E|);原创 2022-12-28 22:35:41 · 314 阅读 · 0 评论 -
数据结构——有向无环图描述表达式
有向无环图:若一个有向图中不存在环,则称为有向无环图,简称DAG图(Directed Acyclic Graph),如下图所示;3.一般会给出一个算术表达式,让我们来求出所需要的最少的顶点个数,下面给出解答步骤;原创 2022-12-22 12:00:52 · 1374 阅读 · 0 评论 -
数据结构——最短路径问题
对于一个带权连通无向图G=(V,E),生成树不同,每棵树的权(即树中所有边上的权值之和)也可能不同。设R为G的所有生成树的集合,若T为R中边的权值之和最小的生成树,则T称为G的最小生成树(Minimum-Spanning-Tree,MST)。原创 2022-12-21 21:28:27 · 783 阅读 · 0 评论 -
数据结构——图的深度优先遍历(DFS)
(1)DFSTraverse(Graph G)函数针对于非连通图无法遍历完所有结点的情况,思想和广度优先遍历中的BFSTraverse一样;②同一个图的邻接表的表示方式不唯一,因此深度优先遍历序列不唯一,深度优先生成树也不唯一;②查找每个顶点的邻接点都需要O(|V|)的时间,而总共有|V|个顶点;②查找各个顶点的邻接点共需要O(|E|)的时间;①访问|V|个顶点需要O(|V|)的时间;①访问|V|个顶点需要O(|V|)的时间;③时间复杂度=O(|V|+|E|);(2)最坏情况,递归深度为O(|V|);原创 2022-12-19 19:14:31 · 635 阅读 · 0 评论 -
数据结构——图的广度优先遍历(BFS)
①初始化一个辅助队列;②根结点入队;③若队列非空,则队头结点出队,并访问该结点,然后将其左、右子树结点插入队尾(如果有的话);原创 2022-12-16 21:30:52 · 709 阅读 · 0 评论 -
数据结构——图的基本操作
删出边时间复杂度O(1)~O(|V|);时间复杂度O(1)~O(|V|)。时间复杂度:出度O(1)~O(|V|);(1)功能:假设图G中顶点y是顶点x的一个邻接点,返回除y之外顶点x的下一个邻接点的顶点号,若y是x的最后一个邻接点则返回-1。出边时间复杂度O(1),入边时间复杂度O(1)~O(|E|)。②Set_edge_value(G,x,y,v):设置图G中边(x,y)或对应的权值为v。①Get_edge_value(G,x,y):获取图G中边(x,y)或对应的权值;原创 2022-12-16 18:49:13 · 1309 阅读 · 0 评论 -
数据结构——图的存储(2)
①i=2,j=1边结点中jLink的指向改为顺延原本所指的下一个jLink的所指也就是NULL;(3)边结点包括:边的两个顶点编号i,j、权值、依附于顶点 i 的下一条边、依附于顶点 j 的下一条边;(4)和十字链表法类似,按顺序画顶点结点、边结点、firstedge连线、iLink和jLink连线;(3)弧结点包括:弧尾顶点编号、弧头顶点编号、权值、弧头相同的下一条弧、弧尾相同的下一条弧;(2)顶点结点包括:数据域、该顶点作为弧头的第一条弧、作为结尾的第一条弧;(2)删除边、删除结点等操作很方便;原创 2022-12-15 18:08:24 · 164 阅读 · 0 评论 -
数据结构——图的存储(1)
define MaxVertexNum 100 //顶点数目的最大值//顶点表//邻接矩阵,边表//图的当前顶点数和边数/弧数}MGraph;(1)顶点中可以存更复杂的信息;(2)由于在邻接矩阵当中只需要存0和1两种状态,所以边表的数据类型可以改为bool型或枚举类型;原创 2022-12-14 19:16:05 · 180 阅读 · 0 评论 -
数据结构——图的基本概念
1.图G由顶点集V和边集E组成,记为G=(V,E),其中V(G)表示图G中顶点的有限非空集;E(G)表示图G中顶点之间的关系(边)集合。2.若,则用 |V| 表示图G中顶点的个数,也称图G的阶;3.,用 |E| 表示图G中边的条数;(1)设有两个图G=(V,E)和G'=(V',E'),若V'是V的子集,且E'是E的子集,则称G'是G的子图;说白了就是从原图中摘出来一部分,但这部分必须称得上图;(2)若有满足V(G')=V(G)的子图G',则称其为G的生成子图;原创 2022-12-14 00:40:53 · 207 阅读 · 0 评论 -
数据结构——哈夫曼树
1.在含有n个带权叶结点的二叉树中,其中带权路径长度(WPL)最小的二叉树称为哈夫曼树,也称最优二叉树。原创 2022-12-13 17:04:53 · 3489 阅读 · 0 评论 -
数据结构——平衡二叉树
1.平衡二叉树,简称平衡树(AVL树),树上任一结点的左子树和右子树的高度之差不超过1;2.结点的平衡因子=左子树高-右子树高;3.平衡二叉树结点的平衡因子的值只可能是-1、0、1;4.只要有任一结点的平衡因子绝对值大于1,就不是平衡二叉树。1.key为数据域;2.balance为平衡因子。int key;原创 2022-12-13 15:14:16 · 769 阅读 · 0 评论 -
数据结构——二叉排序树
(1)二叉排序树,又称二叉查找树。一棵二叉树或是空二叉树,或是具有如下性质的二叉树:①左子树上所有结点的关键字均小于根结点的关键字;②右子树上所有结点的关键字均大于根结点的关键字;③左子树和右子树又各是一棵二叉排序树。(2)由于左子树结点值原创 2022-12-11 18:46:44 · 375 阅读 · 0 评论 -
数据结构——树和森林的遍历
(1)定义:若树非空,先依次对每棵子树进行后根遍历,最后再访问根结点。(1)定义:若树非空,先访问根结点,再依次对每棵子树进行先根遍历。③先序遍历除去第一棵树之后剩余的树构成的森林。③中序遍历除去第一棵树之后剩余的树构成的森林。①中序遍历森林中第一棵树的根结点的子树森林;(3)树的先根遍历序列与这棵树相应的二叉树先序序列相同。(3)树的后根遍历序列与这棵树相应二叉树的中序序列相同。(3)树的后根遍历序列与这棵树相应二叉树的中序序列相同。①访问森林中第一棵树的根结点;(4)树的后根遍历也称深度优先遍历。原创 2022-12-10 22:39:23 · 715 阅读 · 0 评论 -
数据结构——树的存储结构
④如果删除的结点是一棵子树的根结点,那么要将这棵子树的所有结点都删掉;(7)查询:双亲表示法来查指定结点的双亲很方便,但查找孩子结点只能从头到尾遍历依次对比;先将森林的各个树转换为二叉树,再将各个树的根结点视为兄弟关系绑在一起即可;①采用数组的形式,把根结点固定存在数组下标为0的位置,并且用-1表示其没有父结点;最后给结点数n--;左边为孩子,右边为兄弟,最右边一条线上的为各个树的根结点;(1)定义:每个结点中保存指向双亲的“指针”(实则为数组下标);③孩子结点就当左孩子结点,兄弟结点就当右孩子结点;原创 2022-12-08 19:47:25 · 3757 阅读 · 2 评论 -
数据结构——线索二叉树
——本节内容为Bilibili王道考研《数据结构》P46~P48视频内容笔记。目录一、线索二叉树的概念1.引入2.中序线索二叉树3.中序线索二叉树的存储结构 4.先序线索二叉树二、二叉树的线索化1.找中序序列前驱2.中序线索化3.先序线索化4.后序线索化三、线索二叉树找前驱、后继1.中序线索二叉树找中序后继2.中序线索二叉树找中序前驱3.先序线索二叉树找先序后继4.先序线索二叉树找先序前驱5.后序线索二叉树找后序前驱6.后序线索二叉树找后序后继(1)普通的二叉树,我们之前学到可以写出其中序遍历序列。这个序列原创 2022-12-07 23:04:21 · 296 阅读 · 0 评论 -
数据结构——树与二叉树基础
(1)二叉树是n(n>=0)个结点的有限集合:①空二叉树,即n=0;②由一个根结点和两个互不相交的被称为根的左子树和右子树组成,左子树和右子树又分别是一棵二叉树。(2)特点:①每个结点至多只有两棵子树;②左右子树不能颠倒(二叉树是有序树)。原创 2022-12-02 20:45:40 · 300 阅读 · 0 评论 -
从朴素匹配算法到KMP算法
定义结构体SString,结构体成员分别为:1.char型字符;2.int型串长length。原创 2022-12-02 10:57:12 · 93 阅读 · 0 评论 -
栈在表达式求值中的应用
1.中缀:也就是平时我们常用的表达式,比如1+2这种运算符在两个操作数中间的表达式;2.前缀:+ 1 2;运算符在操作数前的表达式,也称波兰表达式(Polish notation);3.后缀:1 2 +;运算符在操作数后的表达式,也称逆波兰表达式(Reverse Polish notation),相对于前缀表达式,后缀表达式用的更多一些,并且后缀表达式适用于基于栈的编程语言;4.不论是前缀还是后缀,要注意两个操作数的左右顺序不能随意改变。原创 2022-11-27 18:36:41 · 111 阅读 · 0 评论 -
队列基础篇
define MaxSize 10 //定义队列中元素的最大个数//用静态数组存放队列元素//队头指针和队尾指针}SqQueue;(1)声明时:SqQueue Q;(2)front指向队头元素;rear指向队尾元素的后一个位置(下一个应该插入的位置);(3)这里的front和rear也同样不是数据类型指针,而是功能上类似指针的int型整数,在这里映射的是队头队尾元素的数组下标。typedef struct LinkNode { //链式队列结点int data;原创 2022-11-24 15:25:26 · 482 阅读 · 0 评论 -
栈的基本操作
define MaxSize 10 //定义栈中元素的最大个数{//静态数组存放栈中元素int top;//栈顶指针,名叫指针,实则只是一个int型整数来反映栈顶元素的数组下标}SqStack;//后续声明一个顺序栈(分配空间)就 SqStack S;补充解释:(1)顺序存储:给各个数据元素分配连续的存储空间,大小为MaxSize*sizeof(ElemType);(2)结构中定义的int top名为栈顶指针,这里的“指针”和我们所说的数据类型指针实际上不是一回事。原创 2022-11-24 14:32:39 · 4737 阅读 · 3 评论 -
顺序表OR链表,到底爱哪个?
顺序表和链表的区别与取舍原创 2022-11-20 21:23:41 · 219 阅读 · 0 评论 -
双链表、循环链表、静态链表
双链表、循环链表、静态链表原创 2022-11-20 20:15:30 · 516 阅读 · 0 评论 -
单链表的基本操作
单链表基本操作原创 2022-11-20 15:00:23 · 2919 阅读 · 0 评论 -
顺序表的基本操作
顺序表的基本操作原创 2022-11-18 13:22:23 · 1686 阅读 · 1 评论