将中缀表达式转换成后缀表达式
中缀表达式:A+(B-C/D+E)*F
后缀表达式:ABCD/-E+F*+
本文使用栈来实现中缀表达式到后缀表达式的转换。
操作数:A B C D E F
操作符:+ - / * ( )
操作符优先级:( ) > / * > + -
转换规则:
1. 从中缀表达式逐个读取,操作数立即输出,操作符入栈(左括号也入栈)
2. 读入右括号,则把与此匹配的左括号后的所有操作符出栈输出。左括号也出栈,但不输出
3. 读入操作符,如果此操作符优先级大于栈顶操作符,则此操作符入栈;否则将栈顶操作符依次出栈直到遇到低优先级的操作符;只有在读入右括号时才处理左括号
4. 读取到输入末尾时,将栈内的操作符全部出栈输出
操作演示:
1.
输入:A+(B-C/D+E)*F
栈:
输出:A
2.
输入:A+(B-C/D+E)*F
栈:+
输出:A
3.
输入:A+(B-C/D+E)*F
栈:+(
输出:A
4.
输入:A+(B-C/D+E)*F
栈:+(
输出:AB
5.
输入:A+(B-C/D+E)*F
栈:+(-
输出:AB
6.
输入:A+(B-C/D+E)*F
栈:+(-
输出:ABC
7.
输入:A+(B-C/D+E)*F
栈:+(-/
输出:ABC
8.
输入:A+(B-C/D+E)*F
栈:+(-/
输出:ABCD
9. 操作符优先级小于等于栈顶操作符,-/出栈输出,+入栈
输入:A+(B-C/D+E)*F
栈:+(+
输出:ABCD/-
10.
输入:A+(B-C/D+E)*F
栈:+(+
输出:ABCD/-E
11. 遇到),栈内操作符依次出栈输出,直到匹配的(,()都不输出
输入:A+(B-C/D+E)*F
栈:+
输出:ABCD/-E+
12.
输入:A+(B-C/D+E)*F
栈:+*
输出:ABCD/-E+
13.
输入:A+(B-C/D+E)*F
栈:+*
输出:ABCD/-E+F
14. 输入结束,栈内所有操作符出栈
输入:A+(B-C/D+E)*F
栈:
输出:ABCD/-E+F*+

浙公网安备 33010602011771号