一、栈

栈的定义



栈的基本操作

出栈顺序

总结

二、顺序栈

顺序栈的定义

基本操作
初始化操作

进栈操作

出栈操作

读取栈顶元素

另一种基本操作的实现方式


共享栈

总结

三、链栈

复习单链表


链栈的定义

总结

四、队列

队列的定义



队列的基本操作

总结

五、顺序队列

顺序队列的定义

顺序队列的初始化

入队操作


循环队列


出队

判空/判满
方案一:牺牲一个存储空间

方案二:利用size变量记录队列长度

方案三:利用tag记录最后一次操作

其它实现方式



总结

六、链队列

链队列的定义

链队列的基本操作
链队列的初始化
带头结点

不带头结点

入队
带头节点

不带头节点

出队
带有头节点

不带头节点

判满

总结

七、双端队列

双端队列的定义

考点
对于栈的输出序列的合法性

绿色为合法,红色为非法
对于输入受限的双端队列的输出序列的合法性

绿色为合法,红色为非法,带下划线是在栈中不合法,但在输入受限的双端队列中合法的。
对于输出受限的双端队列

绿色为合法,红色为非法,带下划线是在栈中不合法,但在输出受限的双端队列中合法
这种输出受限的双端队列,看序号较大的元素输出的位置,这意味着,在它输出之前,比它小的元素的相对位置是确定的,接下来就是考虑有什么插入的方法能实现这种相对位置关系!
总结

八、栈的应用
括号匹配问题

实际过程

正好匹配

左右不匹配

右括号单身

左括号单身

整个流程

算法实现

总结

表达式求值

算数表达式是什么?
由三个部分组成(操作数,运算符,界限符)

前/后缀表达式的诞生

中/后/前缀表达式的区别

中转后的过程:

上图中,后缀表达式的算术符的先后次序对应中缀表达式的生效的先后次序,但是这是一定的吗?


左优先原则,可保证运算顺序唯一性,以确定机算算法输出结果的唯一性!!



机算算法实现


中转前的过程

中转后和中转前的区别:

中转前的机算过程:

总结

"左优先"/“右优先”原则和左/右操作数不是专业说法,仅供理解!
表达式求值——具体代码实现

中转后机算
手算过程:

机算过程:

中缀表达式的计算


CPU只能执行单个的加减乘除运算,上边这么搞的意义就是为了将高级程序语言编译成简单的机器码,让CPU去执行!
总结

栈在递归中的应用
递归的过程就是函数调用的过程


适合用“递归”算法解决的问题

求阶乘:

使用递归时,需要注意调用栈溢出!

可以自定义栈将递归算法改造成非递归算法!
求斐波那契数列

总结

九、队列的应用
树的层次遍历
提示:不知道树这种数据结构的同学,可以考虑先跳过本文内容,等了解树之后,再来康康~

详细实现内容在树的章节实现!
图的广度优先遍历
遍历是指找出所有元素节点

队列在操作系统中的应用
CPU资源分配问题

打印数据缓冲区
