• 【数据结构与算法】栈的三种表达式 前缀、中缀、后缀表达式(逆波兰表达式)


    简介

      前缀表达式、中缀表达式、后缀表达式都是四则运算的表达方式,用以四则运算表达式求值,即数学表达式的求值。

    前缀表达式

      前缀表达式叫做波兰表达式。

      前缀表达式的运算符位于操作数之前,它的符号并不是按照在表达式里所出现的顺序, 例如:(3 + 4)x 5 - 6 所对应的前缀表达式是 - x + 3 4 5 6

       前缀表达式的计算机计算过程

      从右至左扫描表达式,当遇到数字时候,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素和次顶元素,也就是栈顶前面两个元素),并将结果入栈。重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果

      例如:(3 + 4)x 5 - 6 所对应的前缀表达式是 - x + 3 4 5 6

      1.从右至左扫描,将6、5、4、3压入堆栈

      2.遇到+运算符,因此弹出3和4(3为栈顶元素,4为次顶元素,注意与后缀表达式做比较),计算出3+4的值,得7,再将7入栈。

      3.接下来是×运算符,因此弹出7和5,计算出7×5=35,将35入栈。

      4.最后是-运算符,计算出35-6的值,即29,由此得出最终结果。

    中缀表达式

      中缀表达式就是最常见的运算表达式,如 (3+4) × 5 - 6。中缀表达式是我们最熟悉的,但是对于计算机是不太好处理的,在计算过程中一般会将中缀表达式转换成其他表达式来操作,比如后缀表达式。

    后缀表达式

      后缀表达式叫做逆波兰表达式,和前缀表达式是相反的,它表达式里的运算符都是位于操作符之后的,例如(3+4) × 5 - 6对应的后缀表达式就是 3 4 + 5 x 6 - 。

        再比如

    正常数学表达式 后缀表达式
    a + b a b +
    a + (b - c) a b c - +
    a + ( b - c ) x d a b  c - d x +
    a + d x (b - c) a d b c - x +
    a = 1 + 3 a 1 3 + =

        后缀表达式的计算机计算过程

      从左至右扫描表达式,当遇到数字时候,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(次顶元素栈顶元素),并将结果入栈。重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果。

      例如:(3 + 4)x 5 - 6 所对应的后缀表达式是 3 4 + 5 x 6 -

      1.从右至左扫描,将6、5、4、3压入堆栈

      2.遇到+运算符,因此弹出3和3(4为栈顶元素,3为次顶元素),计算出4+3的值,得7,再将7入栈,这时候栈底是7。

      3.将5入栈。

      4.接下来是×运算符,因此弹出7和5,计算出5×7=35,将35入栈。

      5.将6入栈。

      6.最后是-运算符,计算出35-6的值,即29,由此得出最终结果。

  • 相关阅读:
    深度分析:SpringBoot异常捕获与封装处理,看完你学会了吗?
    去年去阿里面试,面试官居然问我Java类和对象,我是这样回答的!
    面试官:小伙子,你给我详细说一下线程的状态有哪些吧?
    新鲜出炉!JAVA线程池精华篇深度讲解,看完你还怕面试被问到吗?
    面试官:小伙子,你给我讲一下java类加载机制和内存模型吧
    深度分析:面试90%被问到的多线程、创建线程、线程状态、线程安全,一次性帮你全搞定!
    close与shutdown
    select模型(二 改进服务端)
    select模型(一 改进客户端)
    5种IO模型
  • 原文地址:https://www.cnblogs.com/songgj/p/9636375.html
Copyright © 2020-2023  润新知