1.将前缀表达式:+-*^ABCD/E/F+GH转换成中缀表达式
规则:从右至左扫描表达式,遇到数字时,将数字入栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算,并将结果入栈,重复上述过程直到表达式最左端。
步骤:(1)首先扫描H,是数字,入栈,栈中为:H
(2)扫描G,是数字,入栈,栈中为:G,H
(3)扫描+,是运算符,依次弹出G,H,得到G+H,入栈,栈中为:G+H
(4)扫描F,是数字,入栈,栈中为:F,G+H
(5)扫描/,是运算符,依次弹出F,G+H,计算F/(G+H),入栈,栈中为:F/(G+H)
(6)扫描E,是数字,入栈,栈中为:E,F/(G+H)
(7)扫描/,是运算符,依次弹出E,F/(G+H),计算E/F/(G+H),入栈,栈中为:E/F/(G+H)
(8)扫描D,是数字,入栈,栈中为:D,E/F/(G+H)
(9)扫描C,是数字,入栈,栈中为:C,D,E/F/(G+H)
(10)扫描B,是数字,入栈,栈中为:B,C,D,E/F/(G+H)
(11)扫描A,是数字,入栈,栈中为:A,B,C,D,E/F/(G+H)
(12)扫描^,是运算符,依次弹出A,B,计算A^B,入栈,栈中为:A^B,C,D,E/F/(G+H)
(13)扫描*,是运算符,依次弹出A^B,C,计算A^B*C,入栈,栈中为:A^B*C,D,E/F/(G+H)
(14)扫描-,是运算符,依次弹出A^B*C,D,计算A^B*C-D,入栈,栈中为:A^B*C-D,E/F/(G+H)
(15)扫描+,是运算符,依次弹出A^B*C-D,E/F/(G+H),计算A^B*C-D+E/F/(G+H),得到结果
所以,最后的中缀表达式为A^B*C-D+E/F/(G+H)
2.如何将该中缀表达式A^B*C-D+E/F/(G+H)转换为后缀表达式
规则:从左到右扫描表达式,若是数字就输出,若是运算符,则判断其与栈顶运算符的优先级,是右括号或者是优先级不高于栈顶运算符,则栈顶元素依次出栈并输出,并将当前运算符进栈,一直到最终输出后缀表达式为止。
步骤:(1)扫描A,是数字,输出A,总表达式为:A
(2)扫描^,是运算符,入栈,栈中为:^
(3)扫描B,是数字,输出B,总表达式为:AB
(4)扫描*,是运算符,优先级小于^,输出^,*入栈,栈中为:*,总表达式为:AB^
(5)扫描C,是数字,输出C,总表达式为:AB^C
(6)扫描-,是运算符,优先级小于*,输出*,-入栈,栈中为:-,总表达式为:AB^C*
(7)扫描D,是数字,输出D,总表达式为:AB^C*D
(8)扫描+,是运算符,优先级不高于-,输出-,+入栈,栈中为:+,总表达式为:AB^C*D-
(9)扫描E,是数字,输出E,总表达式为:AB^C*D-E
(10)扫描/,是运算符,优先级大于+,不输出+,/入栈,栈中为:/+,总表达式为:AB^C*D-E
(11)扫描F,是数字,输出F,总表达式为AB^C*D-EF
(12)扫描/,是运算符,优先级不高于/,输出栈顶/,将这个/入栈,栈中为:/+,总表达式为:AB^C*D-EF/
(13)扫描(,是左括号,还没有配对,入栈,栈中为:(/+,总表达式为:AB^C*D-EF/
(14)扫描G,是数字,输出G,总表达式为:AB^C*D-EF/G
(15)扫描+,是运算符,因为栈顶是(,所以直接入栈,栈中为:+(/+,总表达式为AB^C*D-EF/G
(16)扫描H,是数字,输出H,总表达式为:AB^C*D-EF/GH
(17)扫描),是右括号,此时,我们需要去匹配前面的(,所以栈顶依次出栈,并输出,知道(出栈为止,此时,(上方只有+,因此输出+,栈中为:/+,总表达式为:
AB^C*D-EF/GH+
(18)扫描完毕,依次将栈中运算符全部出栈并输出,所以,最终的表达式为AB^C*D-EF/GH+/+