zoukankan      html  css  js  c++  java
  • 逆波兰表达式

    中缀表达式

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

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

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

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

    以及括号:()

    例如: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,这就是逆波兰表达式是如何运行的

  • 相关阅读:
    git常用操作的总结
    Vue全局错误捕获
    Vue全局布局组件的设计
    Python 创建守护进程
    常用代码集合
    Linux -- 终端命令快捷键汇总
    MySQL -- 查询结果 直接导出至本地文件
    Linux -- 守护进程
    ConcurrentWebSocketSessionDecorator(并发安全的websocket) The remote endpoint was in state [TEXT_PARTIAL_WRITING]
    Ubuntu安装docker
  • 原文地址:https://www.cnblogs.com/Salty-Fish/p/12347000.html
Copyright © 2011-2022 走看看