代码改变世界

表达式求值

2019-05-26 10:19  Gizing  阅读(171)  评论(0编辑  收藏  举报

对一个中缀表达式求值分为两部分:

  1. 将中缀表达式转为后缀表达式
  2. 对后缀表达式求值

tip:波兰式是前缀表达式,逆波兰式是后缀表达式

中缀转后缀

利用栈实现,扫描输入的中缀表达式,大致思路:

  1. 遇到操作数,直接输出
  2. 遇到左括号,将其放入栈中
  3. 遇到右括号,将栈元素弹出并输出,直至遇到左括号
  4. 遇到其他操作符,如加减乘除,不断从栈中弹出比当前操作符优先级更高的元素,然后将当前操作符入栈。有一点需要注意,只有在遇到" ) "的情况下我们才弹出" ( ",其他情况我们都不会弹出" ( "
  5. 如果读到了输入的末尾,则将栈中所有元素弹出

例子

中缀表达式a + b*c + (d * e + f) * g,其转换成后缀表达式则为a b c * + d e * f + g * +。

对后缀求值

利用栈实现,扫描输入的后缀表达式,大致思路:

  1. 遇到操作数则入栈
  2. 遇到操作符则从栈中弹出两个元素进行运算,将结果入栈

最终栈里的元素就是结果值