换换为后序方法:
中序表达式: a+b*(c+d/e)
按计算顺序加上括号 :(a+(b*(c+(d/e))))
把运算符放到对应括号后面 :(a(b(c(de)/)+)*)+
去掉括号 : abcde/+*+
换换为前序方法:
与上面的方法类似
中序表达式: a+b*(c+d/e)
按计算顺序加上括号 :(a+(b*(c+(d/e))))
把运算符放到对应括号前面 :+(a*(b+(c/(de))))
去掉括号 : +*+/abcde
总结就给每一次运算找到对应的对象,并将之括号起来,然后将运算符号提出来就好了,放在前面和后面
1、为什么要把中缀表达式转化为后缀,前缀?
计算机没法计算带有括号,以及区分优先级的表达式,或者说很难计算。使用后缀,前缀,消除了括号和优先级。
2、计算机如何计算后缀,前缀表达式?
计算后缀:从左到右遍历后缀表达式,遇到操作数,放进栈,遇到操作符,栈顶两个数出栈,进行运算,运算结果放进栈,直到读完后缀表达式。
计算前缀:从左到右遍历前缀表达式,遇到操作符,放进栈,遇到操作数,查看栈顶,栈顶为操作符,放进栈,栈顶为操作数,取出栈顶操作数和操作符,进行运算,运算后继续判断栈顶的情况。
3、中缀表达式如何转化为后缀,前缀表达式?
转化为后缀:从左到右遍历中缀表达式,遇到操作数,输出,遇到操作符,当前操作符的优先级大于
栈顶操作符优先级,进栈,否则,弹出栈顶优先级大于等于
当前操作符的操作符,当前操作符进栈。
转化为前缀:从右到左遍历中缀表达式,遇到操作数,输出,遇到操作符,当前操作符的优先级大于等于
栈顶操作符优先级,进栈,否则,弹出栈顶优先级大于
当前操作符的操作符,当前操作符进栈。