《数据结构》读书笔记
2021-07-21 18:56:21 0 举报
AI智能生成
考研408计算机综合数据结构部分知识框架、思维导图
作者其他创作
大纲/内容
1.1 数据结构的基本概念
1.2 算法和算法评价
第1章 绪论
2.1 线性表的定义和基本操作
2.2 线性表的顺序表示
2.3 线性表的链式表示
第2章 线性表
特性:LIFO(Last In First Out)入栈和出栈顺序相反
所有操作都在单链表表头执行
便于多个栈共享存储空间提高效率
不存在栈满上溢的情况
链栈
链式存储
进栈操作:S.data[++S.top]=x;
出栈操作:x=S.data[S.top--];
判断栈空条件:S.top==-1
顺序栈(top指向栈顶元素)
定义:两个顺序栈共享一个一维数组空间,将两个栈的栈底分别设置在共享空间的两端,两个栈顶向共享空间的中间延伸
优点:节省存储空间,降低上溢风险
判断栈满条件:
共享栈
顺数存储
存储结构
判断合法的出栈顺序
n个不同元素的出栈序列个数:卡特兰数(Catalan数)
穷举法
出栈序列
上溢:栈顶指针超出了最大范围因为栈的增删都是在栈顶进行的
C语言标识符:只能以字母、下划线开头,不能以数字开头
相关考点
括号匹配
前缀表达式(波兰表达式):+ab
中缀表达式(普通表达式):a+b
“左右先”原则
习题2
习题1
后缀表达式(逆波兰表达式):ab+
机算步骤/算法:1.操作数,直接加入后缀表达式2.界限符,'('直接入栈,')'则依次弹出栈元素直到弹出'('3.运算符,依次弹出栈内优先级≥当前运算符的元素并加入后缀表达式,直到'('或栈空。之后再入栈当前运算符
中缀表达式转后缀表达式(机算)
表达式求值
工作原理:每进入一层递归,就将递归调用所需的信息(返回点、局部变量、传入实参)压入栈顶每退出一层递归,就从栈顶弹出相应信息
缺点:多层递归可能导致栈溢出
递归工作栈
递归算法:斐波那契数列
递归
进制转换、迷宫求解等
栈的应用
3.1 栈(Stack)
特性:FIFO(First In First Out)入队和出队顺序一致
入队操作:(确定maxSize!!!)rear=(rear+1)%maxSize;A[rear]=x;
出队操作:
队列长度(size/length):=(rear-front+maxSize)%maxSize
判断队满条件:1.(Q.rear+1)%MaxSize==Q.front2.size==MaxSize(size记录队列长度)3.front==rear&&tag==1(tag记录最后一次操作类型)
判断队空条件:1.Q.rear==Q.front2.size=0(size记录队列长度)3.front==rear&&tag==0(最后执行了删除操作)
顺序存储(循环队列)
判断队空条件:1.Q.front->next==null2.Q.front==Q.rear
带头结点
判断队空条件:1.Q.front==null2.Q.rear==null
不带头结点
定义:允许两端进行增删的队列
输入受限的双端队列
输出受限的双端队列
变种
考点:对输出序列合法性的判断
双端队列
树的层次遍历
图的广度优先遍历
就绪队列解决多用户的资源竞争问题
缓冲区解决主机与外部设备间速度不匹配问题
操作系统中的应用
队列的应用
3.2 队列(Queue)
3.3 栈和队列的应用
策略:只存储主对角线+下三角区
按行优先原则,数组B[]下标从0开始(i≥j)是第个元素==>B[K]
考虑上三角? 列优先?数组下标从1开始?i<j?的情况
对称矩阵
下三角矩阵:除了对角线核下三角区,其余的元素都相同的矩阵
策略:行优先存储下三角区,并在最后一个位置存储常量C
三角矩阵
定义:当|i-j|>1时,有span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" data-equation=\"a_{ij}=0\
策略:行优先\\列优先原则,只存储带状部分
行优先,数组下标从0开始时:->B[k],k=2i+j-3,是第k+1个元素B[k]->,,j=k-2i+3
三对角矩阵(带状矩阵)
定义:非零元素远远少于零元素的个数
策略:1.顺序存储——三元组<行,列,值>2.链式存储——十字链表法
稀疏矩阵
3.4 特殊矩阵的压缩存储
第3章 栈和队列
字符集:英文字符——ASCII字符集中英文 ——Unicode字符集
定义:由一个或多个字符组成的有限序列一般记为,空串用表示
定长顺序存储(静态数组实现)
堆分配存储(动态数组实现)
块链存储每个节点存多个字符,没有字符的位置用'#'或'\\0'补足
4.1 串的定义和实现
思想:将主串中所有长度为m的子串与模式串比较
时间复杂度:最坏O(nm),最好O(n)
朴素模式匹配算法
时间复杂度:O(m+n)求next数组时间复杂度O(m)模式匹配过程最坏时间复杂度O(n)
4.2 串的模式匹配(主串n>>模式串m)
第4章 串(String)
树的路径长度:树根到每个结点的路径长度的总和
基本术语
节点数=总度数+1
度为m的树中第i层上至多有个节点(i≥1)
高度为h的m叉树至多有个节点(等比数列求和),至少有h个节点高度为h,度为m的树至少有h+m-1个节点
具有n个节点的m叉树的最小高度为
树的性质
5.1 树的基本概念
定义:每个结点至多只有两棵子树并且有左右之分,次序不能任意颠倒
定义:高度为h,且含有个节点的二叉树
特点:1.只有最后一层有叶子结点2.不存在度为1的结点3.节点i的左孩子为2i,右孩子为2i+1,父节点为
满二叉树
定义:每个结点都与高度为h的满二叉树中编号为1~n的结点一一对应
特点:1.只有最后两层可能有叶子结点2.最多只有一个度为1的结点3.节点i的左孩子为2i,右孩子为2i+1,父节点为4.为分支结点,\\lfloor n/2\floor\" contenteditable=\"false\"为叶子结点
※完全二叉树
定义:
二叉排序树
平衡二叉树
特殊的二叉树
性质1:叶子结点比二分支结点多一个
性质2:非空二叉树第k层至多有个结点
性质3:高度为h的二叉树至多有个结点
性质4:对完全二叉树①当i>1时,结点i的双亲编号为②当2i≤n时,结点i的左孩子编号为2i,否则无左孩子③当2i+1≤n时,结点i的右孩子编号为2i+1,否则无右孩子④结点i所在层次(深度)为
性质5:具有n个结点的完全二叉树的高度为或
二叉树的性质
为满足二叉树的任意性,深度为h的二叉树要申请大小的数组
完全二叉树和满二叉树适合顺序存储
顺序存储
n个结点的二叉链表有n+1个空链域
5.2 二叉树的概念
先序遍历
中序遍历
后序遍历
层次遍历
遍历序列
前序+中序遍历序列
后续+中序遍历序列
层次+中序遍历序列
由遍历序列构造二叉树
递归算法和非递归算法的转换
二叉树(逻辑结构)的遍历
作用:方便找到某个结点的前驱和后继,方便遍历
线索:指向前驱/后继的指针称为线索
先序前驱/先序后继;中序前驱/中序后继;后序前驱/后序后继;
相关概念
先序线索二叉树
中序线索二叉树
不能有效解决后序线索二叉树中求后序后继的问题
后序线索二叉树的遍历仍需要栈的支持
后序线索二叉树
分类
存储结构:在二叉树链式存储结构的基础上增加两个标志位 ltag 和 rtagltag/rtag 为 1 时表示 lchild/rchild 指向前驱/后继ltag/rtag 为 0 时表示 lchild/rchild 指向左孩子/右孩子
手画线索二叉树
视频5.3.5
二叉树线索化
线索二叉树(物理结构)
5.3 二叉树的遍历和线索二叉树
顺序存储结点数据,节点中保存父节点在数组中的下标,根节点为-1
优点:找父节点方便;缺点:找孩子不方便
双亲表示法
顺序存储节点数据,结点中保存孩子链表头指针(顺序+链式存储)
优点:找孩子方便;缺点:找父节点不方便
孩子表示法
用二叉链表存储树——左孩子右兄弟
从存储视角来看形态上和二叉树类似
考点:1.树与二叉树的相互转换,本质就是用孩子兄弟表示法存储树2.已知树、森林的非终端节点个数,求对应二叉树的右指针为空的节点个数
※孩子兄弟表示法
树的存储结构
本质:用孩子兄弟表示法——二叉链表存储森林
森林中各个根结点之间视为兄弟关系
树、森林与二叉树的转换
先根遍历
后根遍历
层序遍历
树的遍历
森林的遍历
树、森林遍历和二叉树遍历的对应关系
树和森林的遍历
5.4 树、森林√
定义:左子树结点值<根节点值<右子树结点值,默认不允许两个结点的关键字相同
二叉排序树的查找:从根结点开始,目标更小向左找,目标更大向右找
二叉排序树的插入:找到插入位置(一定是叶子结点),修改其父节点的指针
被删为叶子节点,直接删除
被删结点只有左子树或只有右子树,其子树顶替其位置
后继结点(右子树中最左下结点)顶替并删除
前驱结点(左子树中最右下结点)顶替并删除
被删结点左右子树都存在
二叉排序树的删除:
取决于树的高度,最好O(log n),最坏O(n)
查找成功的情况
查找失败的情况(需补充失败结点)
平均查找长度的计算
查找效率分析
二叉排序树(BST)
定义:树上任一结点的左子树和右子树的高度之差不超过1结点的平衡因子=左子树高-右子树高
和二叉排序树相同,找到合适的位置插入,但新插入的结点可能导致查找路径上的某个结点不再平衡
找到最小不平衡子树进行调整,记最小不平衡子树的根为A
LL平衡旋转(右单旋转):在A的左孩子的左子树插入导致A失衡,将A的左孩子右上旋
RR平衡旋转(左单旋转):在A的右孩子的右子树插入导致A失衡,将A的右孩子左上旋
LR平衡旋转(先左后右双旋转):在A的左孩子的右子树插入导致A失衡,将A的左孩子的右孩子,先左上旋再右上旋
RL平衡旋转(先右后左双旋转):在A的右孩子的左子树插入导致A失衡,将A的右孩子的左孩子,先右上旋再左上旋
\"不平衡\"调整的四种规律
平衡二叉树的插入
考点:高为h的平衡二叉树最少有几个节点——递推求解
平衡二叉树最大深度为O(log n),平均查找长度/查找的时间复杂度为 O(log n)
平衡二叉树的查找
平衡二叉树(AVL)
哈夫曼树(最优二叉树):在含有给定的n个带权叶节点的二叉树中,WPL最小的二叉树
结点的权:某种特定含义的数值
结点的带权路径长度=根到结点的路径长度*结点的权值
树的带权路径长度(WPL)=树中所有叶子结点的带权路径长度之和
定义
每次选两个根节点权值最小的树合并,并将两者权值之和作为新的根结点的权值
哈夫曼树不唯一,但WPL必然都是最小值
哈夫曼树的构造
将字符频次作为字符结点权值,构造哈夫曼树即可得哈夫曼编码,可用于数据压缩
前缀编码——没有一个编码是另一个编码的前缀
固定长度编码——每个字符用相等长度的二进制位表示
可变长度编码——允许对不同字符用不等长的二进制表示
※哈夫曼编码
哈夫曼树和哈夫曼编码
5.5 树与二叉树的应用√
第5章 树与二叉树
KMP求next数组例子
边的权和网(带权图)
连通:在无向图中,存在顶点u到顶点v的路径,则称u和v是连通的连通图:若图G中任意两个顶点是连通的,则称图G为连通图,否则称为非连通图连通分量:无向图中的极大连通子图称为连通分量(若n个顶点的图边数小于n-1,那么必是非连通图)
强连通:有向图中,顶点u,v之间双向均存在路径,则称u,v是强连通的强连通图:若图中任意一对顶点都是强连通的,则称为强连通图强连通分量:有向图中的极大强连通子图称为有向图的强连通分量
路径:顶点到顶点之间的一条路径是指顶点序列(或边序列)span class=\"equation-text\" data-index=\"2\" data-equation=\
简单路径:路径序列中顶点不重复出现的路径简单回路:除第一个和最后一个顶点,其余顶点不重复出现的回路
距离:u到v的最短路径长度,若不存在记该距离为无穷
点到点的关系
无向图中讨论连通性有向图中讨论强连通性
子图:
极大连通子图:极大强连通子图:
生成树:连通图中包含全部顶点的极小连通子图生成森林:非连通图中各连通分量的生成树构成了非连通图的生成森林
图的局部
简单图:如果图G满足:①不存在重复的边;②不存在顶点到自身的边,那么成图G为简单图多重图:
完全图(简单完全图)无向完全图:有n(n-1)/2条边的无向图称为无向完全图,任意两个顶点之间都存在边有向完全图:有n(n-1)条边的有向图称为有向完全图,任意两个顶点之间都存在两条方向相反的弧
稠密图与稀疏图:边数很少的图称为稀疏图,反之称为稠密图。一般当图G满足span class=\"equation-text\" contenteditable=\"false\" data-index=\"0\" data-equation=\"|E|时视为稀疏图
有向树:一个顶点入度为0,其余顶点入度为1的有向图称为有向树
几种特殊形态的图
6.1 图的基本概念√√
邻接矩阵法
邻接表法
十字链表
邻接多重表
图的存储
重要考点
图的基本操作
6.2 图的存储及基本操作√√
类似于树的层序遍历
无论是邻接表还是邻接矩阵,都需要辅助队列Q,空间复杂度
时间复杂度:邻接表存储图时,每个顶点需入队一次,每条边至少访问一次,时间复杂度邻接矩阵存储图时,查找每个顶点的邻接点所需时间O(|V|),故时间复杂度
BFS算法的性能分析
BFS算法求解单源最短路径问题
由广度优先遍历确定的树
邻接表存储的图表示方式不唯一,遍历序列,生成树也不唯一
遍历非连通图可得广度优先生成森林
广度优先的生成树和生成森林
广度优先搜索
类似于树的先序遍历
DFS算法是递归算法,需要借助递归工作栈,故空间复杂度
时间复杂度:DFS遍历图的过程实际上是对每个顶点查找其邻接点的过程邻接表存储图时,访问顶点所需,查找所有顶点的邻接点所需,故总时间复杂度邻接矩阵存储图时,查找每个顶点的邻接点所需时间,故总的时间复杂度
DFS算法的性能分析
由深度优先遍历确定的树
邻接表存储图的表示方式不唯一,遍历序列,生成树也不唯一
遍历非连通图可得深度优先生成森林
深度优先的生成树和生成森林
深度优先搜索
DFS/BFS调用次数=连通分量数
无向图
若从起始顶点到其他顶点都有路径,则只需调用一次DFS/BFS函数
对于强连通图,从任意顶点出发都只需调用一次DFS/BFS函数
有向图
图的遍历与图的连通性
6.3 图的遍历√
Prim算法
Kruskal算法
最小生成树
Dijkstra算法求单源最短路径问题
Floyd算法求各顶点之间的最短路径问题
最短路径
有向无环图描述表达式
拓扑排序
关键路径
6.4 图的应用
第6章 图
7.1 查找的基本概念
7.2 顺序查找和折半查找
7.3 B树和B+树
7.4 散列表
第7章 查找
8.1 排序的基本概念
8.2 插入排序
8.3 交换排序
8.4 选择排序
8.5 归并排序和基数排序
8.6 各种内部排序算法的比较及应用
第8章 排序
408-数据结构
0 条评论
回复 删除
下一页