前缀表达式:op a b
中缀表达式:a op b
后缀表达式 a b op
1、对于计算单独的后缀表达式较为简单,从左到右,遇到数字将其压入栈内,遇到操作符从栈中取出两个数进行相应操作,结果再次压入栈内。
2、对于前缀表达式的计算和后缀相似,从右到左的顺序,剩下和后缀一致
3、对于中缀表达式,我们可以选择将其转换成前缀或者后缀表达式。
中缀转后缀:(从左到右)
1、遇到一个数字就输出 (毕竟不管中缀和后缀,都只是操作符位置的改变,和数字无关)
2、遇到‘( ’直接压入栈
3、遇到’ )‘将栈中操作符输出,直到输出’( ‘ (括号内相当于另一个后缀表达式,当遇到’)‘时,就将括号内的符号都输出)
4、遇到操作符,将栈中优先级不低于的符号输出,然后将操作符压入栈 (乘除 > 加减 > 左括号)(因为优先级高的需要先运算,优先级相同的因为先出现所以先运算)
5、最后输出栈中剩下的所有操作符
中缀转前缀:(从右到左)
1、遇到一个数字就输出到临时栈 (毕竟不管中缀和前缀,都只是操作符位置的改变)
2、遇到‘ ) ’直接压入符号栈
3、遇到’ (‘将符号栈中操作符输出,直到输出’) ‘
4、遇到操作符,将栈中优先级大于的符号输出,然后将操作符压入符号栈 (乘除 > 加减 > 右括号)
(优先级相同之所以不出栈,因为输出的前缀时倒序的,优先级相同应该在更后面输出,这样倒过来才是最前面)
5、最后输出符号栈中剩下的所有操作符至临时栈
6、然后输出临时栈中的结果(输出出来的才是前缀表达式)