利用栈可以很方便实现中缀表达式到后缀表达式的转换,下面来介绍具体规则:
从左至右遍历中缀表达式,将运算符入栈
- 遇到操作数,直接输出,添加到后缀表达式;
- 栈为空时,遇运算符,直接入栈;
- 遇到左括号,直接入栈;
- 遇左括号,执行出栈,直至弹出的左括号,括号不输出;
- 遇其他运算符:加减乘除,弹出所有优先级大于或等于该运算符的栈顶元素,然后将该元素入栈;
- 最终将栈中元素依次出栈。
例:(a+b)*c*(d-e/f) ————> ab+c*def/-*
下面我们再来看后缀表达式的运算,规则如下:
从左至右遍历表达式,遇到数字就进入栈;遇到符号,则将栈顶的两个元素拿出,第一个栈顶元素作为操作数,第二个栈顶元素作为被操作数,进行运算,然后将结果入栈。
来源:oschina
链接:https://my.oschina.net/u/2835802/blog/745339