408 数据结构笔记

408 数据结构

常用名词

存取

  • 一般是用作计算机术语,存取是一个动作合成词,存指代计算机的写入,取指代计算机的读取

第一章-绪论

数据结构的基本概念

数据的存储结构

顺序存储

在这里插入图片描述

链式存储

在这里插入图片描述

索引存储

在这里插入图片描述

散列存储

在这里插入图片描述

数据类型和抽象数据类型

  • 数据类型是一个值的集合和在此集合上的一组操作的总称。
    在这里插入图片描述
  • 抽象数据类型不考虑物理结构(存储结构)
    在这里插入图片描述

知识总览

在这里插入图片描述

学习方式顺序

在这里插入图片描述

算法的基本概念

在这里插入图片描述

时间复杂度

在这里插入图片描述

空间复杂度

在这里插入图片描述

第二章-线性表

总览

在这里插入图片描述

顺序表

顺序表的定义

知识结构

在这里插入图片描述

在这里插入图片描述

静态分配

在这里插入图片描述

动态分配

在这里插入图片描述

顺序表的特点

在这里插入图片描述

顺序表的插入删除

在这里插入图片描述

第三章-栈和队列

队列

顺序存储的循环队列

  • 队列元素长度:(rear+MaxSize-front) %MaxSize
front指向队头,rear指向下一个元素入队的位置(队尾元素的下一个位置)
判断队列已满
  • 方法一:用一个空闲空间
    (Q.rear+1)%MaxSize == Q.front
    在这里插入图片描述
  • 方案2:size记录大小
    在这里插入图片描述
  • 方案3:tag记录最近的操作是入队(导致队满)还是出队(导致队空)
    在这里插入图片描述
判断队列为空
  • Q.front = Q.rear
入队

在这里插入图片描述

front指向队头,rear指向队尾元素
入队

在这里插入图片描述

队列初始化
  • front = 0,rear = n-1
判空

在这里插入图片描述

判满
  • 方案一:牺牲一个存储单元
    (Q.rear+2)%MaxSize == Q.front;
    在这里插入图片描述

  • 方案二:增加辅助变量

栈的应用

中缀表达式转后缀表达式

在这里插入图片描述

第四章——串

KMP算法

求next数组

  • 串的前缀:包含第一个字符,且不包含最后一个字符的子串。
  • 串的后缀:包含最后一个字符,且不包含第一个字符的子串。
  • next [j] = 前1~j-1个字符组成的串S最长相等前后缀长度 + 1。

第五章-树

数的定义和基本术语

  • 特性:
    在这里插入图片描述
  • 定义:
    在这里插入图片描述

常见考点

结点数和总度数

    1. 结点数 = 总度数(总边数)+1

度数为m的树

    1. 度为m的树:各结点的度(边数)的最大值
    • 至少有一个结点度数为m
    • 一定是非空树,至少有m+1个结点

m叉树

    1. m叉树:每个结点最多只能有m个孩子的树
    • 任意结点的度小于等于m
    • 允许是空树

第i层的结点数最多有

在这里插入图片描述

高度为h的m叉树最多有

在这里插入图片描述

高度为h的m叉树最少有h个结点

在这里插入图片描述

具有n个结点的m叉树的最小高度

在这里插入图片描述

二叉树

二叉树的五种状态

在这里插入图片描述

几个特殊的二叉树

满二叉树

在这里插入图片描述

完全二叉树

在这里插入图片描述

二叉排序树

在这里插入图片描述

平衡二叉树

在这里插入图片描述

二叉树选择题重要考点

在这里插入图片描述

二叉树的存储结构

二叉树顺序存储

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 二叉树顺序存储结构,只适合存储完全二叉树

二叉树的链式存储

在这里插入图片描述

  • n个结点的二叉链表共有n+1个空链域。

二叉树的先中后序遍历

先序遍历

  • 根节点—左子树—右子树

中序遍历

  • 左子树—根节点—右子树

后序遍历

  • 左子树—右子树—根节点

求二叉树深度

在这里插入图片描述

总结

在这里插入图片描述

由遍历序列构造二叉树

在这里插入图片描述

前序 + 中序遍历序列

在这里插入图片描述

层序+中序遍历序列

在这里插入图片描述

线索二叉树

在这里插入图片描述

中序线索化

在这里插入图片描述

先序线索化

在这里插入图片描述

后序线索化

在这里插入图片描述

线索二叉树找前后继

中序线索二叉树找后继

在这里插入图片描述

中序线索二叉树找前驱

在这里插入图片描述

先序线索二叉树找先序后继

在这里插入图片描述

先序线索二叉树找先序前驱

在这里插入图片描述

后序线索二叉树找后序前驱

在这里插入图片描述

后序线索二叉树找后序后继

  • 不能找到父节点
    在这里插入图片描述
  • 能找到父节点,三叉链表
    在这里插入图片描述

知识回顾

在这里插入图片描述

二叉排序树

二叉排序树的查找

在这里插入图片描述

二叉排序树的插入

在这里插入图片描述

二叉排序树的删除

  • 情况1:若被删除结点z是叶结点,则直接删除,不会破坏二叉排序树的性质。
    在这里插入图片描述
  • 情况2: 若结点z只有一颗左子树或右子树,则让z的子树成为z父节点的子树,替代z的位置。
    在这里插入图片描述
  • 情况3:若结点z有左、右两颗子树,则令z的直接后继(或直接前驱)替代z,然后从二叉排序树中删除这个直接后继(或直接前驱),这样就转换成了第一种情况。
    在这里插入图片描述

平均查找长度

在这里插入图片描述
在这里插入图片描述

知识回顾

在这里插入图片描述

平衡二叉树

最小不平衡子树

在这里插入图片描述

调整最小不平衡子树(LL)

在这里插入图片描述

调整最小不平衡子树(RR)

在这里插入图片描述

LL与RR代码

在这里插入图片描述

调整最小不平衡子树(LR)

在这里插入图片描述

调整最小不平衡子树(RL)

在这里插入图片描述

高度为h的平衡二叉树至少需要多少个结点

假设F1,F2为TL,TR的最少节点数,则,F(n) = F1+F2 +1。那么F1,F2 到底等于多少呢?

由于TL,TR与T一样是平衡二叉树,又由于我们知道T的最少节点数是F(n),其中n为T的高度,因此如果我们知道TL,TR的高度就可以知道F1,F2的值了。

由平衡二叉树的定义可以知道,TL和TR的高度要么相同,要么相差1,而当TL与TR高度相同(即:都等于n-1)时,我们算出来的F(n)并不能保证最小,两边都是(n-1),明显比(n-2)大,节点数更多

因此只有当TL与TR高度相差一(即:一个高度为n-1,一个高度为n-2)时,计算出来的F(n)才能最小。

此时我们假设TL比TR高度要高1(即:TL高度为n-1,TR高度为n-2),则有:F1 = F(n-1),F2 = F(n-2)。

因此得到结论:F(n) = F(n-1) + F(n -2 ) + 1

总结

在这里插入图片描述

树的存储结构

双亲表示法

  • 优点:查找指定结点的双亲很方便。
  • 缺点:查指定结点的孩子只能从头遍历。
    在这里插入图片描述

孩子表示法

  • 优点:找孩子方便。
  • 缺点:找双亲不方便。
    在这里插入图片描述

孩子兄弟表示法

在这里插入图片描述

森林和二叉树的转换

  • 二叉树的右指针指向兄弟结点
  • 二叉树的左指针指向孩子结点
    在这里插入图片描述

森林、树、二叉树的遍历

在这里插入图片描述

哈夫曼树

思想

  • 使权重(代表出现次数或概率)最多的元素占用最短的路径(代表操作次数)。

带权路径长度

  • 结点的带权路径长度:从树的根到该结点的路径长度(经过的边数)与该结点上权值的乘积。
    在这里插入图片描述

哈夫曼树定义

哈夫曼树:带权路径长度(WPL)最小的二叉树称为哈夫曼树,也就是最优二叉树
在这里插入图片描述

哈夫曼树的构造

在这里插入图片描述

前缀编码

在这里插入图片描述

  • 各个字符出现的频度作为权值,编码长度作为路径长度。
    在这里插入图片描述

第六章-图

图的基本概念

图的定义

在这里插入图片描述

无向图

在这里插入图片描述

有向图

在这里插入图片描述

简单图

在这里插入图片描述

顶点的度

  • 无向图:顶点v的度是指依附于该顶点的边的条数,记为TD(v)。
  • 有向图
    • 入度:以顶点v为终点的有向边的数目。 ID(v)。
    • 出度:以顶点v为起点的有向边的数目。OD(v)。
  • 有向图的入度之和出度之和相等
    在这里插入图片描述

顶点与顶点的关系描述

在这里插入图片描述

连通图、强连通图
  • 无向图中,若从顶点v到顶点w有路径存在则称v和w是连通的
  • 有向图中,若从顶点v到顶点w和从顶点w到顶点v之间都有路径,则称这两个顶点是强连通的。
    在这里插入图片描述

子图、生成子图

  • 生成子图:包含了原图的所有点。
    在这里插入图片描述
连通分量、极大连通子图(无向图)
  • 极大连通子图(连通分量):必须连通,且包含尽可能多的顶点和边。
    在这里插入图片描述
强连通分量、极大强连通分量(有向图)

在这里插入图片描述

生成树(极小连通子图)
  • 连通图的生成树是包含图中全部顶点的一个极小连通子图
    在这里插入图片描述

边的权、带权图/网

在这里插入图片描述

几种特殊形态的图

在这里插入图片描述
在这里插入图片描述

邻接矩阵

  • 缺点:空间复杂度高,不适合存储稀疏图。

求顶点的度

  • 有向图中:A元素的对应A元素的出度,A元素的对应A元素的入度
    在这里插入图片描述

带权图

在这里插入图片描述

邻接矩阵的性质

  • A^n的元素A ^n[i][j] = 由顶点i到顶点j的长度为n的路径的数目。
    在这里插入图片描述

邻接表

邻接表定义

在这里插入图片描述

计算度、出度、入度

  • 无向图:度,遍历行
  • 有向图:
    • 出度:遍历行
    • 入度:难算,遍历整个图
      在这里插入图片描述

对比

在这里插入图片描述

十字链表

  • 只适合有向图
    在这里插入图片描述

邻接多重表

  • 只适合无向图
    在这里插入图片描述

最小生成树

普利姆算法

在这里插入图片描述

Kruskal算法

在这里插入图片描述

时间复杂度对比

在这里插入图片描述

求最短路径

Dijstra算法

  • 求一个顶点v0所有其他顶点的最短路径
    在这里插入图片描述

Floyd算法

  • 求出所有顶点之间的最短路径
    在这里插入图片描述

对比

在这里插入图片描述

有向无环图(DAG)

定义

在这里插入图片描述

AOV网

  • 顶点表示活动
    在这里插入图片描述

拓扑排序

在这里插入图片描述

逆拓扑排序

在这里插入图片描述
在这里插入图片描述

AOE网

  • Activity on Edge Network
  • 顶点表示事件(一瞬间发生),边表示活动。
求关键路径
1.求事件vk的最早发生时间 ve(k)
  • 事件vk的最早发生时间:
    • 源点v1到顶点vk的最长路径长度。
    • 决定了从v1开始的活动的最早发生时间
      在这里插入图片描述
  • vj 为 vk的任意前驱
2.事件vk的最迟发生事件 vl(k)
  • 该事件最迟必须发生的时间
    在这里插入图片描述
  • vj为vk的任意后继
3.活动的最早发生时间

在这里插入图片描述

4.求所有活动的最迟发生时间

在这里插入图片描述

5.e(i)=l(i)的即为关键路径

在这里插入图片描述

关键路径特性

在这里插入图片描述
在这里插入图片描述

第七章-查找

平均查找长度

  • 衡量查找算法效率最主要的指标
    在这里插入图片描述

顺序查找

实现

在这里插入图片描述

无序表ASL

在这里插入图片描述

有序表ASL

在这里插入图片描述

折半(二分)查找

实现

在这里插入图片描述

查找效率分析

在这里插入图片描述

折半查找判定树

  • 左子树比右子树多一个元素(或少一个元素)。
    在这里插入图片描述

折半查找的查找效率

  • 折半查找判定树的树高为
    在这里插入图片描述

分块查找

思想

在这里插入图片描述

用折半查找查索引

  • 要在low所指分块中查找
    在这里插入图片描述

查找效率分析

在这里插入图片描述
在这里插入图片描述

红黑树

为什么要发明红黑树

在这里插入图片描述

红黑树的定义

  • 左子树结点值<= 根结点值 <= 右子树结点值 (左根右)
  • 根结点和叶节点是黑色的(根叶黑)
  • 不存在两个相邻的红结点
  • 黑路同
    在这里插入图片描述

红黑树的性质

在这里插入图片描述

红黑树的插入

在这里插入图片描述
在这里插入图片描述

B树

B树的核心特性

在这里插入图片描述
在这里插入图片描述
n个关键字把数值区域切分成n+1个部分

B树的高度

最小高度(每个结点的关键字和分叉最多)

在这里插入图片描述

最大高度(每个结点的关键字和分叉最小)

在这里插入图片描述

B树的插入

在这里插入图片描述

B树的删除

删除结点在终端结点(关键字数足够)

在这里插入图片描述

删除结点在非终端结点(关键字数足够)

在这里插入图片描述

关键字数不足够
兄弟够借

在这里插入图片描述

兄弟不够借(合并)

在这里插入图片描述

B+树

在这里插入图片描述

散列查找

散列表(哈希表)定义

在这里插入图片描述

散列函数的构造方法

数字分析法

在这里插入图片描述

除留余数法

在这里插入图片描述

直接定址法

在这里插入图片描述

平方取中法

在这里插入图片描述

处理冲突的方法

开放地址法
线性探测法

在这里插入图片描述
缺点:
在这里插入图片描述

平方探测法

在这里插入图片描述

伪随机序列法

在这里插入图片描述

在这里插入图片描述

再散列法
删除注意事项

在这里插入图片描述

拉链法(简单)

第8章—排序

插入排序

插入排序

在这里插入图片描述

折半插入排序

在这里插入图片描述

总结

在这里插入图片描述

希尔排序

在这里插入图片描述

冒泡排序

算法实现

在这里插入图片描述

算法性能分析

在这里插入图片描述

快速排序

代码

在这里插入图片描述

时间复杂度

在这里插入图片描述

简单选择排序

在这里插入图片描述

堆排序

堆的概念

在这里插入图片描述

建立大根堆

在这里插入图片描述

  • 代码:
    在这里插入图片描述

堆排序的完整逻辑

在这里插入图片描述

时间复杂度分析

在这里插入图片描述
在这里插入图片描述

稳定性

在这里插入图片描述

在堆中插入新元素

在这里插入图片描述

在堆中删除元素

在这里插入图片描述

插入删除总结

在这里插入图片描述

归并排序

代码实现

在这里插入图片描述

复杂度分析

在这里插入图片描述

外部排序

时间开销分析

  • 外部排序时间开销 = 内部排序的时间 + 读写外存的时间 + 内部归并的时间
  • 减少归并趟数来减少读写外存的时间
    在这里插入图片描述

优化1:多路归并

在这里插入图片描述

优化2:减少初始归并段数量

在这里插入图片描述
在这里插入图片描述

总结

在这里插入图片描述

败者树

在这里插入图片描述

最佳归并树(哈夫曼树)

在这里插入图片描述

添加虚段的数量

在这里插入图片描述

408数据结构笔记pdf整理是将408数据结构的课堂笔记整理成电子PDF格式的文件。整理这份笔记有以下几个目的和优点。 首先,整理这份笔记可以使学生更好地复习和回顾课堂内容。408数据结构是一门重要的计算机科学课程,课堂内容涉及许多复杂的数据结构和算法,学生在学习过程中可能会遇到各种各样的问题。通过整理这份笔记,学生可以更方便地查找和复习自己所学的内容,对于深化对于数据结构的理解和记忆起到了很大的帮助作用。 其次,整理这份笔记也可以作为学生之间的相互学习和交流的工具。由于408数据结构是一门独立的课程,学生之间的课堂笔记内容可能有所不同。通过整理这份笔记,可以将不同学生的观点和思考整合在一起,形成全面和多视角的学习资料。这样一方面能够帮助学生更好地理解和记忆课堂内容,另一方面也能促进学生之间的交流和合作,提高学习效率。 最后,整理这份笔记还可以方便老师的教学工作。作为授课教师,教师通常需要准备教案和课堂讲义。通过整理这份笔记,教师可以更轻松地准备教学材料,节省时间和精力。 综上所述,408数据结构笔记pdf整理是一项非常有益的工作。它可以帮助学生回顾和复习课堂内容,促进学生之间的合作和交流,也可以方便教师的教学工作。整理这份笔记是提高学生学习效率和质量的一个重要手段。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值