考研数据结构笔记
本人2021届考研学生,考874时整理的数据结构考研笔记供大家使用
sf9090
铁肩担道义,胸怀盛四方
展开
-
数据结构考研笔记(十九) ——广度优先搜索
图的遍历从图中某一顶点出发,按照某种搜索方法沿着图中的边对图中的所有顶点访问一次且仅访问—次。编号的顺序就是遍历的顺序广度优先搜索·首先访问起始顶点v;·接着由出发依次访问v的各个未被访问过的邻接顶点Wi,W2…Wi;·然后依次访问w,w2… w,的所有未被访问过的邻接顶点;·在从这些访问过的顶点出发,访问它们所有未被访问过的邻接顶点;…,以此类推;0表示未被访问0就入队实现bool visited[MAX_TREE_SIZE];void BFS原创 2021-10-30 13:33:39 · 14012 阅读 · 0 评论 -
数据结构考研笔记(二十) ——深度优先搜索
树的先序遍历深度优先搜索DFS·首先访问起始顶点v;·接着由v出发访问v的任意一个邻接且未被访问的邻接顶点w,;·然后再访问与w,邻接且未被访问的任意顶点yi;·若w,没有邻接且未被访问的顶点时,退回到它的上一层顶点v;·重复上述过程,直到所有顶点被访问为止。bool visited[MAX_TREE_SI2E];void DFSTraverse(Graph G){for(int i=0 ;i<G.vexnum;++i)visited[i]=FALSE;for(int i=0;i原创 2021-10-29 16:09:14 · 12924 阅读 · 0 评论 -
数据结构考研学习笔记之线性表应用题
1.设计一个递归算法,删除不带头结点的单链表L中的所有值为x的结点。解:设f(L,x)的功能是删除以L为首结点指针的单链表中所有值等于x的结点,显然f(L->next,x)的功能是删除以L->next为首结点指针的单链表中所有值等于x的结点。由此,可以推出递归模型如下。终止条件:f(L,x)≡不做任何事情; 若L为空表递归主体:f(L,x)...原创 2020-05-07 19:11:04 · 2948 阅读 · 0 评论 -
数据结构考研队列练习题
Q是一个队列,S是一个空栈,实现将队列中的元素逆置的算法。解析:由于对队列的一系列操作不可能将其中的元素逆置,而栈可以将入栈的元素逆序提取出来,因此我们可以让队列中的元素逐个地出队列,入栈;全部入栈后再逐个出栈,入队列。算法实现内联代码片。void Inverser(Stack S, Queue Q){ while(!QueueEmpty(Q)) { x = DeQueue(Q); //队列中全部元素依次出队 Push(S,x); //元素依次入栈 } while(原创 2020-11-19 06:55:00 · 858 阅读 · 0 评论 -
数据结构考研笔记(十)--------数组矩阵
数组数组是由n (n>=1)个相同类型的数据元素构成的有限序列,每个数据元素称为一个数组元素,每个元素受n个线性关系的约束,每个元素在n个线性关系中的序号称为该元素的卞标,并称该数组为n维数组。它是线性表的推广数组一旦被定义,其维度和维界不可变,数组除初始化和销毁外,只有存取元素和修改元素的操作矩阵...原创 2020-10-16 20:36:56 · 1748 阅读 · 0 评论 -
数据结构线性表之双链表、循环链表、静态链表、单链表和顺序表的区别以及最值、合并、逆置操作。
线性表1. 双链表1.1 插入操作1.2 删除操作2. 循环链表2.1 循环单链表2.2 循环双链表2.3 循环链表判空2.3.1 循环单链表2.3.2 循环双链表3. 静态链表4. 顺序表与链表比较4.1 存取方式4.2 逻辑结构、物理结构4.3 基本操作4.4 内存空间总结4.5 怎样选择线性表的存储结构4.6 三个常用操作4.6.1 最值:4.6.1.1 顺序表4.6.1.2 单链表4.6.2 逆置4.6.2.1 顺序表:4.6.2.2 单链表4.6.3 合并4.6.3.1 顺序表4.6.3.2 单原创 2020-10-09 18:30:35 · 24865 阅读 · 0 评论 -
数据结构考研之时间复杂度、空间复杂度讲解
#算法效率在算法效率中时间复杂度常常作为考点时间复杂度语句频度:该条语句可能重复执行的次数T(n) 所有语句的频度之和,其中n为问题的规模// An highlighted blockint sum = 0;for(int i = i; i ,= i;i++) sum +=1; ... //时间复杂度O(n)时间复杂度:T(n) = O(f(n)),其中O表示T(n)与f(n)在n->正无穷时为同阶无穷大加法规则 T(n) = T(1)+ T(2) = O(MAX(f原创 2020-10-09 18:55:22 · 1320 阅读 · 0 评论 -
数据结构考研学习笔记(七)---串
串1. 串的定义和实现1.1 串的定义1.2 串的存储结构1.2.1 定义顺序存储表示1.2.2 堆分配存储表示1.2.3 块链存储表示1.3 串的基本操作2. 串的模式匹配2.1 简单的模式匹配算法2.2 改进的模式匹配算法---KMP1. 串的定义和实现字符串简称串,计算机上非数值处理的对象基本都是字符串数据。我们常见的信息检索系统、文本编辑程序、问答系统、自然语言翻译系统等,都是以字符串数据作为处理对象的。1.1 串的定义串是由零个或者多个字符组成的有限序列。一般记为S = ‘a1a2a3a4原创 2020-05-17 20:52:16 · 36220 阅读 · 0 评论 -
数据结构考研笔记之栈和队列(三)输出序列之出栈顺序
输出序列1.连续输入和输出2.非连续输入输出2.1合法出栈序列的个数3.双端队列1.连续输入和输出栈:逆序队列:顺序2.非连续输入输出出栈序列中每一个元素后面所有比它小的元素组成一个递减序列,如下图橙色的不符合出栈规律。2.1合法出栈序列的个数以K结尾的合法序列个数f(n) = C(2n,n)/(n+1)3.双端队列双端队列允许两端都可以进行入队、出队操作的队列输出受限的双端队列一端删除、两端插入输入受限的双端队列一端插入、两端删除...原创 2020-10-10 10:34:18 · 4031 阅读 · 0 评论 -
数据结构考研笔记(十五)——图的存储结构邻接矩阵、邻接表、十字链表、临界多重表的概念
邻接矩阵法结点数为n的图G = (V,E)的邻接矩阵A是n×n的。将G的顶点编号为v1,v2,,…,Vn,(数组下标)若<vi,vj>∈E,则A[i][j]=1,否则A[i][j]=O。无向图#define MaxvertexNum 100typedef char vertexType;typedef int EdgeType;typedef struct{ vertexType vex[MaxvertexNum]; EdgeType Edge [Maxvert.原创 2020-11-19 07:10:36 · 4955 阅读 · 0 评论 -
数据结构考研笔记之栈与队列(四)栈与队列应用----括号匹配、中缀表达式转前缀后缀问题
栈与队列1.括号匹配问题栈例题1例题2-----不匹配例题1例题3-----不匹配例题22. 表达式求值问题例题1.中缀表达式转前缀表达式2.中缀表达式转后缀表达式实现过程:3. 递归:递归产生的问题:1.括号匹配问题栈例题1算法思想:1)初始一个空栈,顺序读入括号。若是右括号,则与栈顶元素进行匹配·若匹配,则弹出栈顶元素并进行下一个元素·若不匹配,则该序列不合法3)若是左括号,则压入栈中4)若全部元素遍历完毕,栈中非空则序列不合法解题:1.首先1、2都是左括号,直接进栈2.原创 2020-10-10 11:47:59 · 1683 阅读 · 0 评论 -
树的应用
最小生成树生成树连通图包含全部顶点的一个极小连通子图对于带权无向连通图G= (V,E),G的所有生成树当中边的权值之和最小的生成树为G的最小生成树(MST).性质1)最小生成树不一定唯一,即最小生成树的树形不一定唯一。当带权无向连通图G的各边权值不等时或G只有结点数减1条边时,MST唯一。2)最小生成树的权值是唯一的,且是最小。3)最小生成树的边数为顶点数减1IGENRIC_MST《G)[ T=NULL; while T未形成一棵生戍树: do 找到一条最小代价边(u,v)并且原创 2021-01-06 07:47:10 · 15112 阅读 · 0 评论 -
数据结构考研学习笔记(六)---栈和队列
队列1. 队列的基本概念1.1 队列的定义1.2 队列常见的基本操作2. 队列的顺序存储结构2.1 队列的顺序存储2.2 循环队列2.3 循环队列操作3. 队列的链式存储结构3.1 队列的链式存储4. 双端队列1. 队列的基本概念1.1 队列的定义队列简称队,也是一种操作受限的线性表,只允许在表的一端进行插入,而在表的另一端进行删除。向队列中插入元素称为入队或进队;删除元素称为出队或离队。操作特性:先进先出。1.2 队列常见的基本操作InitQueue(&Q):初始化队列,构造一个空队列Q原创 2020-05-12 21:38:51 · 757 阅读 · 0 评论 -
数据结构考研笔记(十二)——树的应用(并查集)
并查集并查集:一种简单的集合表示。通常用树的双亲表示法作为并查集的存储结构。通常用数组元素的下标代表元素名,用根结点的下标代表子集合名,根结点的双亲结点为负数。Initial(S)将集合S中的每个元素都初始化为只有一个单元素的子集合。Union(S, Root1, Root2)把集合S中的子集合(互不相交) Root2并入子集合Root1.Find(S, x)查找集合S中单元素x所在子集合,并返回该子集合的名字。下面的结点都是根节点,所以双亲结点都是负数S={0,1,2,3,4,5,原创 2020-10-18 21:29:55 · 1423 阅读 · 0 评论 -
数据结构考研学习笔记(二)---顺序表应用
**1.设计一个高效算法,将顺序表L得所有元素逆置,要求算法的空间复杂度为O(1)2.线性表(a1,a2,…,an)中的元素递增有序且按顺序存储于计算机内。要求设计一算法,完成用最少时间在表中查找数值为x的元素,若找到则将其后继元素位置相交换,若找不到则将其插入表中并使表中元素递增有序**本章节承接上一篇博客点击下面展示一些 逆置。void Reverse(SqList L) { Ele...原创 2020-05-01 19:58:54 · 390 阅读 · 0 评论 -
数据结构考研笔记(十)———二叉树遍历
先看一道例题:先序遍历若二叉树非空:1)访问根结点2)先序遍历左子树3)先序遍历右子树先序遍历的递归算法:void Preorder (BiTree T){ if(T!=NULL){ visit(T); Preorder(T->lchild); Preorder(T->rchild) ; )}先序遍历序列:124536中序遍历若二叉树非空:1)中序遍历左子树2)访问根结点3)中序遍历右子树中序遍历的递归算法:void Inorder (BiT原创 2020-10-26 20:34:53 · 2512 阅读 · 0 评论 -
数据结构考研笔记(十一)——线索二叉树
线索二叉树的概念线索化若无左子树,则将左指针指向其前驱结点;若无右子树,则将右指针指向其后继结点。typedef struct ThreadNode {ElemType data;struct ThreadNode *lchild,*rchild;int ltag, rtag;}ThreadNode,*ThreadTree;这种结点结构构成的二叉链表作为二叉树的存储结构,称为线索链表前驱结点若左指针为线索,则其指向结点为前驱结点若左指针为左孩子,则其左子树的最右侧结点为前原创 2020-11-08 21:42:28 · 9220 阅读 · 0 评论 -
数据结构考研学习笔记(五)---栈和队列
栈的基本概念1.栈的定义:栈是只允许在一端进行插入或删除操作的线性表。首先是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作。栈顶:线性表允许进行插入删除的那一端。栈底:固定的,不允许进行插入和删除的另一端。空栈:不含任何元素的空表2.栈的基本操作InitStack(&S): 初始化一个空栈S。StackEmpty(S):判断一个栈是否为空,若栈S为空则返回tru...原创 2020-05-06 21:11:19 · 337 阅读 · 0 评论 -
数据结构考研笔记(十六) ——哈夫曼树、编码应用
带权路径长度路径长度 路径上所经历边的个数。结点的权 结点被赋予的数值。哈实曼树也称最优二叉树,含有n个带权叶子结点带权路径长度最小的二叉树哈夫曼树的构造算法1)将n个结点作为n棵仅含有一个根结点的二叉树,构成森林F;2)生成一个新结点,并从F中找出根结点权值最小的两棵树作为它的左右子树,且新结点的权值为两棵子树根结点的权值之和;3)从F中删除这两个树,并将新生成的树加入到F中;4)重复2,3步骤,直到F中只有一棵树为止。哈夫曼树的性质1)每个初始结点都会成为叶节点,双支原创 2021-01-06 07:33:32 · 8060 阅读 · 0 评论 -
数据结构考研之线性表
线性表点击 线性表练习题线性表是具有 相同类型的n (n>=O)个元素的有限序列,其中n为表长,当n=0时,该表为空表。若L命名为线性表,则一般表示为L= ( a1,a2 ,…, ai,ai+1,…,an)除了表头(a1)结点都有前驱结点,除了表尾(an)结点都有后继结点线性表的特点:表中元素个数有限表中元素具有逻辑上的顺序性,在序列中各个元素排序有其先后次序表中元素的数据类型都相同,这意味着每个元素占有相同大小的存储空间表中元素具有抽象性,即讨论元素间一对一的逻辑关系,而不考原创 2020-10-06 09:42:02 · 30438 阅读 · 0 评论 -
数据结构考研学习笔记(三)---单链表之头插法、尾插法、按值按序号查找、插入节点、删除节点操作
*单链表之头插法、尾插法、按值按序号查找、插入节点、删除节点操作承接上一篇继续学习:顺序表应用单链表定义:线性表的链式存储又称单链表,它是指通过任意的存储单元来存储线性表中的数据元素。为了建立数据元素之间的线性关系,对每个链表结点,除存放元素自身的信息外,还需要存放一个指向其后继指针。单链表节点如下图所示。datanextnext:存放后继指针。data:数据域,存放数据...原创 2020-05-02 08:46:42 · 6971 阅读 · 2 评论 -
数据结构考研学习笔记之线性表应用题(三)
一日三题假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请编写算法将这两个单链表归为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表解答:算法思想:两个链表已经按元素值递增次序排序,将其合并时,均从第一个结点起进行比较,将小的结点链入链表中,同时后移工作指针。该问题要求结果链表按元素递减次序排列,故新链表的建立应该采用头插法。比较结束后,可能会有一个链表非空,此时用头插法将剩下的结点依次插入新链表中即可。下面展示一些 代码。void MergeList原创 2020-05-09 20:04:05 · 490 阅读 · 0 评论 -
数据结构考研笔记(十四) ——串的模式匹配
串的模式匹配int Index (SString S, sString T,int pos) {int i=pos,j=1;//i为主串标记 j为模式串标记while(i<=s.length & j<=T.length) { if(s.ch[i]= T.ch[j1) {//判断第一个字符是否相等 i++; j++; } else { i=i-j+2;//下移一个位置 j=1;//模式串归为1 } if (j>T. length) ret原创 2020-10-18 22:29:34 · 1906 阅读 · 0 评论 -
数据结构考研笔记(十七)——图的概念
图的基本概念图G由顶点集V和边集E组成,记为G= (V,E),其中V(G)表示图G中顶点的有限非空集;E(G)表示图G中顶点之间的关系(边)集合线性表,树都可以为空,但图不能为空|V|表示图G中顶点的个数,也称图G的阶;|E|表示图G中边的条数无向图&有向图简单图&多重图完全图子图设有两个图G=(VE)和G’=(v,E’),若V是V的子集,且E’是E的子集,则称G’为G的子图,且若V(G)= V(G’)则称G’为G的生成子图生成子图无向图& 有向图原创 2021-01-18 08:48:01 · 12224 阅读 · 0 评论 -
数据结构考研学习笔记(九)---树、森林
树、森林1. 树的存储结构1.1 双亲表示法1.2 孩子表示法1.3 孩子兄弟表示法2. 树、 森林与二叉树的转换3. 树和森 林的遍历4. *书的应用-并查集1. 树的存储结构树的存储方式有多种,即可采用顺序存储结构,又可采用链式存储结构。无论哪种方式都要反映出树中各结点之间的逻辑关系,下面介绍3种常用的存储结构1.1 双亲表示法这种存储方式采用哟组连续空间来存储每个结点,同时在每个结点种增设一个伪指针,指示其双亲结点在数组中的位置。双亲表示法的存储结构描述 内联代码片。#define MAX原创 2020-06-05 19:52:20 · 1902 阅读 · 0 评论 -
数据结构考研学习笔记(一)---顺序表基本操作:插入 查询 删除
数据结构考研学习笔记(一)—顺序表基本操作:插入 查询 删除声明:本文是笔者学习数据结构的笔记,参考:王道考研顺序表定义:线性表的顺序存储结构被称为顺序表,它是用一组地址连续的存储单元依次存储线性表中的数据元素,使得逻辑上相邻的两个元素在物理位置上也相邻。特点:1. 表中的元素的逻辑顺序与其物理顺序相同2. 最主要特点是随机访问,通过首地址和元素序号可在时间O(1)内找到指定元素3. ...原创 2020-04-30 12:30:39 · 1221 阅读 · 0 评论 -
数据结构考研学习笔记(八)---树与二叉树
树与二叉树1.树的基本概念1.1 树的定义1.2 基本术语1.3 树的性质2 二叉树的概念2.1二 叉树的定义及其主要特性1.二支树的定义2.几个特殊的二叉树1.树的基本概念1.1 树的定义树是n(n>=0)个节点的有限集。当n=0时,称为空树。在任意一棵非空树中应满足:(1)有且仅有一个特定的称为根的结点。(2)当n>1时,其余节点可分为(m>0)个互不相交的有限集T1,T2,…Tm,其中每个集合本身又是一棵树,并且称为根的子树。显然,树的定义是递归的,即在树的定义中又用到了原创 2020-05-23 20:32:39 · 25213 阅读 · 0 评论 -
数据结构考研笔记(十三)——二叉排序树
二叉排序树1.二叉排序树2.查找3.插入4.构造5.删除6.查找效率1.二叉排序树二叉排序树 BST 也称二叉查找树二叉排序树或者为空树,或者为非空树,当为非空树时有如下特点:1)若左子树排空,则左子树上所有结点关键字值均小于根结点的关键字。2)若右子树排空,则右子树上所有结点关键字值均大于根结点的关键字。3)左、右子树本身也分别是一 棵二叉排序树。中序遍历序列: 1 2 3 4 5 7 8 10 16左子树 根 右子树左子树结点值<根结点值<右子树结点值二叉排序树的原创 2020-10-18 22:17:15 · 3445 阅读 · 0 评论 -
数据结构考研学习笔记(四)---顺序表和链表比较
顺序表和链表比较1.存取(读写)方式顺序表可以顺序存取,也可以随机存取,链表只能从表头顺序存取元素。例如再第i个位置上执行存取的操作,顺序表仅虚一次访问,而链表则虚从表头开始依次访问i次。2.逻辑结构与物理结构采用顺序存储时,逻辑上相邻的元素,对应的物理存储位置也相邻。而采用链式存储时,逻辑上 相邻的元素,物理存储位置则不一定相邻,对应的逻辑关系是通过指针链表来表示的。3.查找、插入和...原创 2020-05-06 19:50:04 · 1556 阅读 · 0 评论 -
数据结构考研学习笔记之线性表应用题(二)
给定两个单链表,编写算法找出两个链表的公众结点。(这道题笔者看到时比较蒙,经过一番努力才弄明白,现在将整理的思想写出来)方法:都在第一个链表上顺序遍历每个结点,每遍历一个结点,在第二个链表上顺序遍历所有结点,若找到两个相同结点,则找到它们的公众结点,该算法时间复杂度O(len1len2).思想***那么如何判断两个单向链表有没有公共点呢? 如果两个链表有一个公共点,那么这个公共结点后面的所有...原创 2020-05-07 20:54:04 · 275 阅读 · 0 评论 -
数据结构考研笔记(十八) ——图的基本操作
Adjacent(G,x,y)判断图G是否存在边<x, y>或(x,y)邻接矩阵:0不存在,1存在邻接表:搜索单链表有向图:第几行第几列搜索顶点单链表Neighbors(G,x)列出图G中与结点x邻接的边无向图有向图lnsertVertex(G,x)在图G中插入顶点x(扩充)DeleteVertex(G,x)从图G中删除顶点xAddEdge(G,x,y)若无向边(x y)或者有向边<x,y>不存在,则向图G中添加该边RemoveEdge(G,x,原创 2021-10-29 15:57:01 · 14983 阅读 · 0 评论