表达式求值
2019-05-26 10:19 Gizing 阅读(178) 评论(0) 编辑 收藏 举报对一个中缀表达式求值分为两部分:
- 将中缀表达式转为后缀表达式
- 对后缀表达式求值
tip:波兰式是前缀表达式,逆波兰式是后缀表达式
中缀转后缀
利用栈实现,扫描输入的中缀表达式,大致思路:
- 遇到操作数,直接输出
- 遇到左括号,将其放入栈中
- 遇到右括号,将栈元素弹出并输出,直至遇到左括号
- 遇到其他操作符,如加减乘除,不断从栈中弹出比当前操作符优先级更高的元素,然后将当前操作符入栈。有一点需要注意,只有在遇到" ) "的情况下我们才弹出" ( ",其他情况我们都不会弹出" ( "
- 如果读到了输入的末尾,则将栈中所有元素弹出
例子
中缀表达式a + b*c + (d * e + f) * g,其转换成后缀表达式则为a b c * + d e * f + g * +。
对后缀求值
利用栈实现,扫描输入的后缀表达式,大致思路:
- 遇到操作数则入栈
- 遇到操作符则从栈中弹出两个元素进行运算,将结果入栈
最终栈里的元素就是结果值