利用逆波兰表达式求算数表达式的值

算数表达式即中缀表达式,而逆波兰表达式即为后缀表达式。
例如:
中缀表达式:  2+3*8+9-(1+4)/2 =
后缀表达式:  2 3 8 * 9 1 4 + 2 / - + + =
而这两者之间的区别:前者是由人来计算的,比较直观,而对于机器来说,后者更加的快速,而且还去掉了括号。
后缀表达式的运算规则:从左至右,遇到运算符则将前面两值进行运算:
例如:2 3 8* 的时候,等价于 2 3*8 即 2 24 
原式变成了2 249 1 4 + 2/ - + +
如何将中缀表达式转换为后缀表达式?
假设中缀表达式为centerE 设得到后缀表达式为behindE 在转化过程中我们还需要一个栈 设为 tempS
转换规则是:
   从centerE取出一个元素A,
   如果是数字则加入到behindE中;
  如果是运算符,将操作符A与操作符堆栈tempS栈顶的运算符的优先关系相比较;
   如果,优先关系高于temoS栈顶的运算符,则将该运算符压入tempE;
  倘若不是(低于或等于)的话,则将栈tempE栈顶的运算符从栈中弹出保存到behindE,重复此步骤,直到操作符A压入栈tempE。(对于+、-来说,把tempE全部弹出,然后把A压入tempE中)
如果是左括号"(",则压入栈tempE;(注意,"("将之后的运算符的优先级与之前tempE中运算符的优先级隔开)
如果是右括号")",则栈tempE弹出操作符并加入到behindE中,直到弹出左括号"(";
  重复步骤2中的操作,所有元素处理完毕后将堆栈tempE弹出操作符并加入到behindE中;
这样中缀式表示的简单算术表达式转化为逆波兰表达式所表示的简单算术表式。

你可能感兴趣的:(利用逆波兰表达式求算数表达式的值)