标签:
中缀表达式(标准形式):A+(B-C/D+E)*F
后缀表达式(便于计算机计算):ABCD/-E+F*+
本文使用栈来实现中缀表达式到后缀表达式的转换。
操作数:A B C D E F
操作符:+ - / * ( )
操作符优先级:( ) > / * > + -
逐个字符读取中缀表达式,结果不断输出,利用栈对操作符进行缓存:
1. 遇到操作数直接输出
2. 遇到操作符,如果此操作符优先级大于栈顶操作符,则将此操作符压栈,否则输出栈顶操作符;如遇到),则把栈内操作符依次弹出,直到(,()不用输出
操作演示:
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/-+EF
14. 输入结束,将栈内操作符全部弹出
输入:A+(B-C/D+E)*F
栈:
输出:ABCD/-+EF*+
标签:
原文地址:http://www.cnblogs.com/lxdong/p/4343606.html