逆波兰表达式(简介)
##一 问题描述
解析并计算 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] 最终结果