一、栈
栈的定义
栈的基本操作
出栈顺序
总结
二、顺序栈
顺序栈的定义
基本操作
初始化操作
进栈操作
出栈操作
读取栈顶元素
另一种基本操作的实现方式
共享栈
总结
三、链栈
复习单链表
链栈的定义
总结
四、队列
队列的定义
队列的基本操作
总结
五、顺序队列
顺序队列的定义
顺序队列的初始化
入队操作
循环队列
出队
判空/判满
方案一:牺牲一个存储空间
方案二:利用size变量记录队列长度
方案三:利用tag记录最后一次操作
其它实现方式
总结
六、链队列
链队列的定义
链队列的基本操作
链队列的初始化
带头结点
不带头结点
入队
带头节点
不带头节点
出队
带有头节点
不带头节点
判满
总结
七、双端队列
双端队列的定义
考点
对于栈的输出序列的合法性
绿色为合法,红色为非法
对于输入受限的双端队列的输出序列的合法性
绿色为合法,红色为非法,带下划线是在栈中不合法,但在输入受限的双端队列中合法的。
对于输出受限的双端队列
绿色为合法,红色为非法,带下划线是在栈中不合法,但在输出受限的双端队列中合法
这种输出受限的双端队列,看序号较大的元素输出的位置,这意味着,在它输出之前,比它小的元素的相对位置是确定的,接下来就是考虑有什么插入的方法能实现这种相对位置关系!
总结
八、栈的应用
括号匹配问题
实际过程
正好匹配
左右不匹配
右括号单身
左括号单身
整个流程
算法实现
总结
表达式求值
算数表达式是什么?
由三个部分组成(操作数,运算符,界限符)
前/后缀表达式的诞生
中/后/前缀表达式的区别
中转后的过程:
上图中,后缀表达式的算术符的先后次序对应中缀表达式的生效的先后次序,但是这是一定的吗?
左优先原则,可保证运算顺序唯一性,以确定机算算法输出结果的唯一性!!
机算算法实现
中转前的过程
中转后和中转前的区别:
中转前的机算过程:
总结
"左优先"/“右优先”原则和左/右操作数不是专业说法,仅供理解!
表达式求值——具体代码实现
中转后机算
手算过程:
机算过程:
中缀表达式的计算
CPU只能执行单个的加减乘除运算,上边这么搞的意义就是为了将高级程序语言编译成简单的机器码,让CPU去执行!
总结
栈在递归中的应用
递归的过程就是函数调用的过程
适合用“递归”算法解决的问题
求阶乘:
使用递归时,需要注意调用栈溢出!
可以自定义栈将递归算法改造成非递归算法!
求斐波那契数列
总结
九、队列的应用
树的层次遍历
提示:不知道树这种数据结构的同学,可以考虑先跳过本文内容,等了解树之后,再来康康~
详细实现内容在树的章节实现!
图的广度优先遍历
遍历是指找出所有元素节点
队列在操作系统中的应用
CPU资源分配问题
打印数据缓冲区