逆波兰表达式1(简介)

逆波兰表达式(简介)

##一 问题描述
解析并计算 9+(3-1)*3+10/2

首先,以上的公式对于人来说是很好解析计算的。但是对于计算机来说就不是那么友好了。后来波兰的逻辑学家创建了一种后缀表达法类解决这个问题。这位同学的表示方法被称为逆波兰表达式。

###1 后缀表达式:
简单介绍下什么叫做中缀表达式和后缀表达式。
中缀表达式:平时的计算表达式为中缀表达式,类似3-1这样的平时我们书写的格式。比如上面的9+(3-1)*3+10/2。
后缀表达式:将计算的操作数放在前面,最后才放置操作符。称为后缀表达式。比如3-1的后缀表达式为 3,1, -。

###2 后缀表达式的转换
比如将上面表达式的中缀表达式转为后缀表达式:

[9,+,(,3,-,1,)*,3,+,10,/,2]

首先(3-1)转换为

[3,1,-]

首先(3-1)*3 需要转换为 

[3,1,-,3,*]

然后 9 + (3-1)*3 转换为

[9,3,1,-,3,*,+]

继续如此转换,得到最终的后缀表达式如下:

[9,3,1,-,3,*,+,10,2,/,+ ]

###2 后缀表达式的计算
已经将中缀表达式转化为后缀表达式后,进行计算结果。

我们可以没遇到一个符号,就先计算符号前面的结果,然后将值放回到表达式中:

如下:

[9,2,3,*,+,10,2,/,+ ]	遇到符号*,计算 2,3,* =6

[9,6,+,10,2,/,+]	遇到符号+,计算9,6,+=15

[15,10,2,/,+]   遇到符号/,计算10,2,/ = 5

[15,5,+]	遇到符号+,计算15,5,+ =20

[20]	最终结果

posted @ 2013-04-24 10:04  零界寒冰  阅读(162)  评论(0编辑  收藏  举报