1、 后缀表达式
后缀表达式又叫逆波兰式,如下:
2+3*5-4*(5-3)的逆波兰式为:
235*+453-*-
逆波兰式的计算过程是:
将字符依次入栈,直到遇到操作符,遇到操作符后弹出两个字符,计算出结果(并且是上面的那个字符也就是最先出栈的那个字符做减数、除数……而后出栈的那个字符做被减数、被除数……),然后将结果推入栈中,继续遍历后缀表达式,重复前面的操作。
2、中缀表达式转后缀表达式的详细过程
例如 中缀表达式 a+b*c+(d*e+f)*g
后缀表达式 abc*+de*f+g*+
中缀表达式转后缀表达式的要求和步骤:
1、首先要建立一个空栈,这个栈用来存放计算符号(‘+’、‘-’、‘*’、‘/’、‘(’、‘)’),这些符号的优先级是左括号最高,乘除次之、加减最低;然后就可以遍历这个中缀表达式了;
2、如果当前栈是空的、或者当前元素的优先级高于栈顶元素的优先级、或者栈顶元素是左括号而当前入栈的元素又不是右括号,都直接入栈就可以了;
3、当前元素是右括号就意味着栈里面肯定有左括号了,那就开始直接输出,直到输出到左括号为止,(不过左括号和右括号本身是不能被输出的(出栈就可以了),右括号的作用就是让左括号及在左括号入栈之后入栈的元素全部输出,但整个过程右括号没有入过一次栈,可以看做就是一种标记吧);
4、如果当前元素的优先级低于栈顶元素,那么栈顶元素出栈然后输出,继续得到下一个栈顶元素,再与当前元素的优先级比较,如果还是比当前元素的优先级高,继续执行这个操作,否则,当前元素入栈;
5、整个遍历完之后,将栈中剩下的依次输出最后得到的就是后缀表达式;
代码:地址