第四章 栈与队列
应用场合
- 逆序输出
- 递归嵌套
- 延迟缓冲
栈接口与实现
栈应用:进制转换
逆序输出
LIFO
短除法
栈应用:括号匹配
递归嵌套
平凡:无括号的表达式是匹配的
顺序扫描表达式,用栈记录已扫描的部分
反复迭代:凡遇(则进栈,凡遇)则出栈
栈应用:栈混洗
对栈中元素进行重新排列
将A的顶元素弹出并压入S,将S的顶元素弹出并压入B,经过一系列操作,A中元素全部转入B
栈应用:中缀表达式求值
延迟缓冲
栈加线性扫描
主算法:
- 运算数栈、运算符栈
- '\0’首先入栈
- 逐个处理各字符,直到运算符栈空
- 若当前字符为操作数,则读入操作数
- 若当前字符为运算符,则视其与栈顶运算符之间优先级的高低处理
- 弹出并返回最后计算结果
不同优先级处理方法:
- 如果栈顶运算符优先级更低,则计算推迟,当前运算符进栈
- 优先级相等(运算符为右括号,或者’\0’),脱括号并接受下一个字符
- 如果栈顶运算符优先级更高,实施相应的计算,结果入栈
栈应用:逆波兰表达式
RPN,不使用括号表示优先级
队列接口与实现
FIFO
队尾插入(查询):enqueue() + rear()
队头删除(查询):dequeue() + front()