码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-03-17 10:17:02      阅读:120      评论:0      收藏:0      [点我收藏+]

标签:

中缀表达式(标准形式):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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!