• 学习逆波兰法


    首先是将中缀表达式 转换为后缀表达式 https://blog.csdn.net/qianyayun19921028/article/details/89228263

    中缀转后缀是为了便于堆栈运算,此外中缀转成后缀表达式之后不带括号。

    例如,表达式a+b*c+(d*e+f)*g
    中缀转后缀的基本方法:

    从左向右扫描该表达式,
    碰到数字,就直接打印,
    碰到运算符,分三种情况:核心原则,栈顶非空时一定是最高优先级的运算符。
      1.如果堆栈是空的,就将操作符push至符号栈中
      2.如果堆栈非空,且运算符优先级大于栈顶运算符,就push运算符
      3.如果运算符优先级小于栈顶运算符,就弹出栈顶元素,直到符合条件2,且弹出的运算符要打印出来
      4.左括号运算符push进堆栈,直到碰到右括号,将一直弹栈直到把左括号弹出。括号不会打印在后缀表达式中
      5.前缀表达式扫描完之后,如果符号栈中仍有运算符,则需要全部弹出并打印到
    

    除了堆栈法,还有括号法和语法树法。
    最后转成后缀表达式为abc*+de*f+g *+
    那么如何计算后缀表达式呢?
    参考连接 https://www.cnblogs.com/jiu0821/p/6692878.html

    核心原则:

    从左到右扫描后缀表达式,遇到数字就把数字压栈,遇到运算符就把栈中两个字符弹出来计算,得到的值再压栈。直到遍历完表达式,将栈中的唯一值也是栈顶值弹出,
    即得到了最终答案。
    

    在计算机程序中,不生成中间的后缀表达式,而直接计算。

    符号栈中的符号弹出的时候,直接再取数字栈中的两个数字进行计算,得到结果后再压入数字栈中。
    

    如何记住?
    两个栈,一个符号,一个数字。
    从左向右遍历。 数字压入数字栈,符号压入符号栈。 每弹出一个符号,就弹出两个数字进行计算,结果再次入栈。
    符号压栈时,如果栈顶优先级高,要弹栈,直到优先级不高或者相等。

  • 相关阅读:
    括号
    vue 框架原理
    Angular 1.x 框架原理
    ES5的数组方法
    js 对象细节
    《高性能网站建设进阶指南》笔记
    vue 运行时 + 编译器 vs. 只包含运行时
    vue-loader 细节
    vue 错误处理
    移动web touch事件
  • 原文地址:https://www.cnblogs.com/goto2091/p/13726770.html
Copyright © 2020-2023  润新知