将中缀表达式转换成后缀表达式

中缀表达式: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*+

posted @ 2015-03-17 09:44  xdlv  阅读(1001)  评论(0)    收藏  举报