堆栈应用:表达式求值
回忆:应用堆栈实现后缀表达式求值的基本过程:
- 从左到右读入后缀表达式的各项(运算符或运算数)
- 运算数:入栈;
- 运算符:从堆栈中弹出适当数量的运算数,计算并结果入栈;
- 最后,堆栈顶上的元素就是表达式的结果值。
中缀表达式求值
基本策略:将中缀表达式转换为后缀表达式,然后求值
如何将中缀表达式转换为后缀?
观察一个简单例子:2+9/3-5 -> 2 9 3 / + 5 -
- 运算数相对顺序不变
- 运算符号顺序发生改变
- 需要存储“等待中”的运算符号
- 要将当前运算符号与“等待中”的最后一个运算符号比较
有括号怎么办?
【例】a*(b+c)/d=?
堆栈的其他应用:
- 函数调用及递归实现
- 深度优先搜索
- 回溯算法