中缀表达式转后缀表达式
后缀表达式
后缀表达式也叫逆波兰表达式 ,其表达式表述严谨,没有括号,并严格遵循“从左到右”的后缀表达式表示方法
后缀表达式求值
后缀表达式求值过程用到栈做辅助存储,假设给定后缀表达式字符串s为6523+8*+3+*,借用栈来存储数字,顺序读取,遇到数字则入栈,遇到表达符c则依次从栈中取出a和b,计算bca,并将其值入栈,最后栈中的值即为最终结果,下面演示求值过程:
- 读取6,入栈,栈中为
6
- 读取5,入栈,栈中为
6、5
- 读取2,入栈,栈中为
6、5、2
- 读取3,入栈,栈中为
6、5、2、3
- 读取+,从栈中依次取出3、2,计算2+3,将结果5入栈,栈中为
6、5、5
- 读取8,入栈,栈中为
6、5、5、8
- 读取*,从栈中依次取出8、5,计算5*8,将结果40入栈,栈中为
6、5、40
- 读取+,从栈中依次取出40、5,计算40+5,将结果45入栈,栈中为
6、45
- 读取3,入栈,栈中为
6、45、3
- 读取+,从栈中依次取出3、45,计算45+3,将结果48入栈,栈中为
6、48
- 读取*,从栈中依次取出48、6,计算6*48,将结果288入栈,栈中为
288
- 读取到行末提示符,运算结束,结果即为栈中元素288
中缀表达式转后缀表达式
简便方法
以中缀表达式a+b*c+(d*e+f)*g
为例,转换为后缀表达式:
- 对每一次运算(只要出现加减乘除符号)及其运算数加括号,为
((a+(b*c))+(((d*e)+f)*g))
- 将运算符移到括号后面,为
((a(bc)*)+(((de)*f)+g)*)+
- 去掉括号,为
abc*+de*f+g*+
一般方法
待补充