本篇博客是考研期间学习王道课程 传送门 的笔记,以及一整年里对数据结构知识点的理解的总结。希望对新一届的计算机考研人提供帮助!!!
关于对 栈和队列
章节知识点总结的十分全面,涵括了《王道数据结构》课程里的全部要点(本人来来回回过了三遍视频),其中还陆陆续续补充了许多内容,所以读者可以相信本篇博客对于考研数据结构“栈和队列”章节知识点的正确性与全面性;
但如果还有自主命题的学校,还需额外读者自行再观看对应学校的自主命题材料。
数据结构与算法
笔记导航
- 第一章 绪论
(无)
- 第二章 线性表
- 第三章 栈和队列
⇦当前位置
- 第四章 串-KMP(看毛片算法)
- 第五章 树和二叉树
- 第六章 图
- 第七章 查找(B树、散列表)
- 第八章 排序 (内部排序:八大排序动图演示与实现 + 外部排序)
-
数据结构与算法 复试精简笔记 (未完成)
- 408 全套初复试笔记汇总 传送门
如果本篇文章对大家起到帮助的话,跪求各位帅哥美女们,求赞 、求收藏 、求关注!
你必考上研究生!
我说的,耶稣来了也拦不住!
精准控时:
如果不实际操作代码,只是粗略过一下知识点,需花费 40 分钟左右过一遍
这个40分钟是我在后期冲刺复习多次尝试的时间,可以让我很好的在后期时间紧张的阶段下,合理分配复习时间;
但是刚开始看这份博客的读者也许会因为知识点陌生、笔记结构不太了解,花费许多时间,这都是正常的。
重点!!!学习一定要多总结多复习!重复、重复、再重复!!!
食用说明书:
第一遍学习王道课程时,我的笔记只有标题和截图,后来复习发现看只看图片,并不能很快的了解截图中要重点表达的知识点。
所以再第二遍复习中,我给每一张截图中标记了重点,以及每张图片上方总结了该图片对应的知识点以及自己的思考。
最后第三遍,查漏补缺。
所以 ,我把目录放在博客的前面,就是希望读者可以结合目录结构去更好的学习知识点,之后冲刺复习阶段脑海里可以浮现出该知识结构,做到对每一个知识点熟稔于心!
请读者放心!目录展示的知识点结构是十分合理的,可以放心使用该结构去记忆学习!
注意(⊙o⊙)!,每张图片上面的文字,都是该图对应的知识点总结,方便读者更快理解图片内容。
第3章 栈和队列
文章目录
- 第3章 栈和队列
-
- 3.1 栈
-
- 3.1.1 基本概念
-
- 3.1.2 顺序栈
-
- 3.1.3 链栈
-
- 3.2 队列
-
- 3.2.1 基本概念
-
- 3.2.2 顺序队列
-
- 1.代码实现
- 2.基本操作
- 3.循环队列
- 4.小结
- 3.2.3 链式队列
-
- 1.代码实现
- 2.基本操作
- 3.双端队列
- 4.小结
- 3.3 栈和队列的应用
-
- 3.3.1 栈 - 括号匹配
-
- 3.3.2 栈 - 表达式求值
-
- 1.概念
- 2.中缀转后缀 - 左优先(手算)
- 3.后缀表达式的计算
- 4.中缀转前缀 - 右优先(手算)
- 5.前缀表达式的计算
- 6.中缀转后缀 (机算)
- 7.中缀表达式的计算
- 8.小结
- 3.3.3 栈 - 递归
- 3.3.4 队列 - 层序遍历
- 3.3.5 队列 - 计算机系统中的应用
- 3.4 特殊矩阵的压缩存储
-
- 3.4.1 数组的定义
- 3.4.2 数组的存储结构
- 3.4.3 特殊矩阵
-
- 1.对称矩阵
- 2.三角矩阵
- 3.三对角矩阵
- 4.稀疏矩阵
- 3.4.4 小结
3.1 栈
3.1.1 基本概念
1.定义
2.基本操作
3.小结
3.1.2 顺序栈
1.代码实现
2.基本操作
- ① 初始化
- top可以初始化-1,也可以初始化0。如果是0的话,下面的基本操作的一些细节就要修改,不过思路是一样的
- 当top初始化为0,那么top的含义就是下一个入栈元素的位置
- 当top初始化为-1,那么top的含义就是目前栈顶的位置
- 顺序栈的第一次元素是,data[0],不是data[1];取0取1都可以的,只是为了规范
- ② 进栈操作
3.共享栈
4.小结
3.1.3 链栈
1.代码实现
2.基本操作
3.小结
3.2 队列
3.2.1 基本概念
1.队列
2.基本操作
3.小结
3.2.2 顺序队列
1.代码实现
2.基本操作
- ① 初始化
- 对头、队尾指针都初始化为0,不是-1
- 队空判断:rear == front
3.循环队列
- 求队列长度:(rear+n-front)%MAXSIZE(看情况,有时候不大一样)
4.小结
3.2.3 链式队列
1.代码实现
2.基本操作
3.双端队列
4.小结
3.3 栈和队列的应用
3.3.1 栈 - 括号匹配
1.算法思想
2.代码实现
3.小结
3.3.2 栈 - 表达式求值
1.概念
- 后缀表达式最经常被考察,前缀表达式比较刺毛!
- 逆波兰表达式 = 后缀表达式
- 波兰表达式 = 前缀表达式
- 算数表达式:操作数 + 运算符 + 界限符
2.中缀转后缀 - 左优先(手算)
- ① 在人们的视角里中缀表达式看起来更方便计算,但是对于计算机后缀表达式更适合
- ② 注意:有时运算符的在中缀表达式中的生效顺序可以不唯一,导致后缀表达式不唯一
- 例如下图中同一个式子,可以有两种生效顺序,但结果相同。
- 故针对这一个问题,需要指定一个标准:左优先
- ③ 中缀转后缀:按照左优先的运算符生效顺序进行转换
3.后缀表达式的计算
上一小节介绍了“中缀转成后缀”的方法,接下来就是后缀表达式的计算问题了
- ① 从左往右扫描后缀表达式
- ② 扫描操作数入栈
- ③ 扫描操作符,弹出两个栈顶元素,计算结果入栈
- 思考:后缀转回中缀?
- 还是从左往右扫描后缀表达式,具体步骤自己思考,和这个算法差不多(前者得到具体值,后者得到一个式子)
4.中缀转前缀 - 右优先(手算)
5.前缀表达式的计算
- 从右往左扫描,其他和上面类似
- 注意:学完计算后缀和前缀,有一点容易搞错!
- 后缀弹出两个操作数,先弹出的是右操作数
- 而前缀先弹出的是左操作数
6.中缀转后缀 (机算)
1)举例一
- 中缀转后缀:
- ① 辅助栈,存储运算符
- ② 从左往右扫描中缀表达式,此时有可能遇到三种情况:① 操作数;② 界限符;③ 运算符
- ③ 遇到这三种情况的不同处理办法看下图了
2)举例二 - 遇到界限符的情况
- “ ( ” 被弹飞了
- 中缀扫描完了,依次将栈里的运算符弹出
- !!!考试可能会考这个栈最少需要多大?
7.中缀表达式的计算
- 如何在计算机中实现对中缀表达式的求值?
- ① 计算机会先把中缀转后缀
- ② 然后再计算后缀表达式
- 结合:一边转换,一边计算 (故需要两个栈)
- 中缀转后缀需要使用到运算符栈,计算后缀表达式需要用到操作数栈
8.小结
3.3.3 栈 - 递归
要理解 “递归算法” 和 “栈” 之间有什么本质联系!
3.3.4 队列 - 层序遍历
3.3.5 队列 - 计算机系统中的应用
3.4 特殊矩阵的压缩存储
3.4.1 数组的定义
自己看课本(略)
3.4.2 数组的存储结构
3.4.3 特殊矩阵
1.对称矩阵
- ① 数组大小:1 + 2 + 3 + …… + n;数组从0开始,故下标需要-1
2.三角矩阵
-
数组大小和映射函数
3.三对角矩阵
- 矩阵 -> 数组:(3 * n - 2) - 1(-1是因为数组下标开始为0)
4.稀疏矩阵
3.4.4 小结
加油考研人!!!点赞的一定考得上!!!哈哈哈!