Lovsog
Articles11
Tags11
Categories0
有趣的逆波兰表达式(后缀表达式)计算

有趣的逆波兰表达式(后缀表达式)计算

数据结构逆波兰!!!

开场白

通常,按人的逻辑来说,计算四则运算的规律为:“先加减,后乘除,从左到右,先括号内后括号外。”例如:9+(3-1)*3+10/2,我们按上述的规律很快就可以算出结果:20。

但是老一点的计算机“看到”这个式子就会懵逼好久,在它们的逻辑里,它们是以这样的规律算这个式子的:9 3 1 - 3 * + 10 2 / +,第一次看到这个式子,你是不是也懵了,这就是我们今天要讲的基于栈的一种应用:逆波兰表达式计算。


定义

逆波兰表达式又叫做后缀表达式。在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,这种表示法也称为中缀表示。波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的方法,按此方法,每一运算符都置于其运算对象之后,故称为后缀表示。
(简单的说就是:把运算量写在前面,把算符写在后面。)


举个栗子

中缀表达式:9+(3-1)*3+10/2

后缀表达式:9 3 1 - 3 * +10 2 / +


规则:从左到右遍历表达式的每个数字和符号,遇到是数字就进栈,遇到是符号,就将处于栈顶两个数字出栈,进行计算,运算结果进栈,一直到最终获得结果。

  1. 初始化一个空栈。此栈用来对要运算的数字进出使用。
  2. 后缀表达式中前三个都是数字,所以9、3、1进栈。
    在这里插入图片描述
  3. 接下来是“-”,所以讲栈中的1出栈作为减数,3出栈作为被减数,并运算3-1得到2,再将2进栈。
  4. 接着是数字3进栈。
    在这里插入图片描述
  5. 后面是“*”,也就意味着栈栈中3和2出栈,2与3相乘,得到6,并将6进栈。
  6. 下面是“+”,所以栈中6和9出栈,9与6相加,得到15,将15进栈。在这里插入图片描述
  7. 接着是10与2两数字进栈。
  8. 接下来是符号“/”,因此,栈顶的2与10出栈,10与2相除,得到5,将5进栈。在这里插入图片描述
  9. 最后一个是符号“+”,所以15与5出栈并相加,得到20,将20进栈。
  10. 结果是20出栈,栈变为空。
    在这里插入图片描述
Author:Lovsog
Link:https://art0white.github.io/2021/09/25/8/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可
×