中缀表达式转后缀表达式

后缀表达式

后缀表达式也叫逆波兰表达式 ,其表达式表述严谨,没有括号,并严格遵循“从左到右”的后缀表达式表示方法

后缀表达式求值

后缀表达式求值过程用到栈做辅助存储,假设给定后缀表达式字符串s为6523+8*+3+*,借用栈来存储数字,顺序读取,遇到数字则入栈,遇到表达符c则依次从栈中取出a和b,计算bca,并将其值入栈,最后栈中的值即为最终结果,下面演示求值过程:

  1. 读取6,入栈,栈中为6
  2. 读取5,入栈,栈中为6、5
  3. 读取2,入栈,栈中为6、5、2
  4. 读取3,入栈,栈中为6、5、2、3
  5. 读取+,从栈中依次取出3、2,计算2+3,将结果5入栈,栈中为6、5、5
  6. 读取8,入栈,栈中为6、5、5、8
  7. 读取*,从栈中依次取出8、5,计算5*8,将结果40入栈,栈中为6、5、40
  8. 读取+,从栈中依次取出40、5,计算40+5,将结果45入栈,栈中为6、45
  9. 读取3,入栈,栈中为6、45、3
  10. 读取+,从栈中依次取出3、45,计算45+3,将结果48入栈,栈中为6、48
  11. 读取*,从栈中依次取出48、6,计算6*48,将结果288入栈,栈中为288
  12. 读取到行末提示符,运算结束,结果即为栈中元素288

中缀表达式转后缀表达式

简便方法

以中缀表达式a+b*c+(d*e+f)*g为例,转换为后缀表达式:

  1. 对每一次运算(只要出现加减乘除符号)及其运算数加括号,为((a+(b*c))+(((d*e)+f)*g))
  2. 将运算符移到括号后面,为((a(bc)*)+(((de)*f)+g)*)+
  3. 去掉括号,为abc*+de*f+g*+

一般方法

待补充