前缀、中缀、后缀表达式的转换(栈)

前缀表达式:op a b   

中缀表达式:a op b

后缀表达式 a b op

1、对于计算单独的后缀表达式较为简单,从左到右,遇到数字将其压入栈内,遇到操作符从栈中取出两个数进行相应操作,结果再次压入栈内。

2、对于前缀表达式的计算和后缀相似,从右到左的顺序,剩下和后缀一致

3、对于中缀表达式,我们可以选择将其转换成前缀或者后缀表达式。

中缀转后缀:(从左到右)

1、遇到一个数字就输出 (毕竟不管中缀和后缀,都只是操作符位置的改变,和数字无关)

2、遇到‘(  ’直接压入栈

3、遇到’  )‘将栈中操作符输出,直到输出’(  ‘  (括号内相当于另一个后缀表达式,当遇到’)‘时,就将括号内的符号都输出)

4、遇到操作符,将栈中优先级不低于的符号输出,然后将操作符压入栈 (乘除 > 加减 > 左括号)(因为优先级高的需要先运算,优先级相同的因为先出现所以先运算)

5、最后输出栈中剩下的所有操作符

中缀转前缀:(从右到左)

1、遇到一个数字就输出到临时栈 (毕竟不管中缀和前缀,都只是操作符位置的改变)

2、遇到‘ )  ’直接压入符号栈

3、遇到’  (‘将符号栈中操作符输出,直到输出’)  ‘

4、遇到操作符,将栈中优先级大于的符号输出,然后将操作符压入符号栈 (乘除 > 加减 > 右括号)

(优先级相同之所以不出栈,因为输出的前缀时倒序的,优先级相同应该在更后面输出,这样倒过来才是最前面)

5、最后输出符号栈中剩下的所有操作符至临时栈

6、然后输出临时栈中的结果(输出出来的才是前缀表达式)

原文地址:https://www.cnblogs.com/iwannabe/p/10631636.html