逆波兰表达式

中缀表达式

首先,从 中缀表达式 开始。

中缀表达式就是日常生活中我们所遇到的数学表达式,对于我们而言很好理解。它由操作数(也就是参与运算的数字)与操作符组成。

中缀表达式中有如下几种基本操作符

相加:+ 相减:- 相乘:* 相除:/

以及括号:()

例如:2*(3+5)+7/1-4

然而计算机是没有办法处理这种式子,需要将其转换,因此有了波兰表达式(前缀表达式)。

但波兰表达式是从右向左处理的,因此有了逆波兰表达式(后缀表达式)(从左向右处理)。

逆波兰表达式

这种式子可以仅依靠栈来实现,因此十分适合计算机来进行计算。

逆波兰表达式的运行过程

从右向左扫描表达式

  1. 如果扫描到操作数,则将其压入栈中
  2. 如果扫描到一个二元运算符,则对栈顶上两个元素执行该计算,将计算结果压入栈中
  3. 如果扫描到一个一元运算符,则对栈顶上的元素执行该计算,将计算结果压入栈中

一直重复这个过程,最后得到的数便是运算结果

PS:所谓二元运算符就是需要两个数才能运算的操作符,如加减乘除;一元就是只需要一个数字就能运算的操作符,如sin,cos

下面以2*(3+5)+7/1-4来看一下

先将其转换为逆波兰表达式

2 3 5 + * 7 1 / + 4 -

读入
2 2
3 3
2
5 5
3
2
+ //5+3=8,压入8
8
2
* //2*8=16,压入16
16
7 7
16
1 1
7
16
/ //7/1=7,压入7
7
16
+ //7+16=23,压入23
23
4 4
23
- //23-4=19,压入19
19

读完了表达式,得到最终答案是19,这就是逆波兰表达式是如何运行的

posted @ 2020-02-22 20:28  Salty_Fish  阅读(161)  评论(0编辑  收藏  举报