码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 栈的应用:表达式求值(中缀表达式,后缀表达式,前缀表达式)


    目录

    • 1.三种算术表达式
      • 1.中缀表达式
      • 2.后缀表达式
      • 3.前缀表达式
    • 2.后缀表达式相关考点
      • 1.中缀表达式转后缀表达式
        • 1.手算方法
        • 2.例题
        • 3.机算
      • 2.后缀表达式求值
        • 1.手算方法
        • 2.机算
    • 3.前缀表达式相关考点
      • 1.中缀表达式转前缀表达式
        • 1.手算方法
        • 2.例题
      • 2.前缀表达式求值
    • 4.中缀表达式求值

    1.三种算术表达式

    1.中缀表达式

    由三个部分组成:操作数、运算符、界限符。
    界限符是必不可少的,反映了计算的先后顺序。

    规则:运算符在两个操作数中间.
    在这里插入图片描述

    2.后缀表达式

    又称为逆波兰表达式。
    规则:运算符在两个操作数后面。
    在这里插入图片描述

    3.前缀表达式

    又称为波兰表达式。
    规则:运算符在两个操作数前面。
    在这里插入图片描述

    2.后缀表达式相关考点

    1.中缀表达式转后缀表达式

    1.手算方法

    ①确定中缀表达式中各个运算符的运算顺序
    ②选择下一个运算符,按照「左操作数 右操作数 运算符」的方式组合成一个新的操作数
    ③如果还有运算符没被处理,就继续②

    2.例题

    运算顺序不唯一,因此对应的后缀表达式也不唯一。
    为保证手算和机算结果相同,采用“左优先”原则:只要左边的运算符能先计算,就优先算左边的。

    在这里插入图片描述

    3.机算

    初始化一个栈,用于保存暂时还不能确定运算顺序的运算符。
    从左到右处理各个元素,直到末尾。可能遇到三种情况:
    ①遇到操作数。直接加入后缀表达式。
    ②遇到界限符。遇到“(”直接入栈;遇到“)”则依次弹出栈内运算符并加入后缀表达式,直到弹出“(”为止。
    注意:“(”不加入后缀表达式。
    ③遇到运算符。依次弹出栈中优先级高于或等于当前运算符的所有运算符,并加入后缀表达式,
    若碰到“(”或栈空则停止。之后再把当前运算符入栈。
    按上述方法处理完所有字符后,将栈中剩余运算符依次弹出,并加入后缀表达式。

    2.后缀表达式求值

    1.手算方法

    从左往右扫描,每遇到一个运算符,就让运算符前面最近的两个操作数执行对应运算,合体为一个操作数。
    注意:两个操作数的左右顺序。

    2.机算

    ①从左往右扫描下一个元素,直到处理完所有元素
    ②若扫描到操作数则压入栈,并回到①;否则执行③
    ③若扫描到运算符,则弹出两个栈顶元素(先出栈的是“右操作数”),执行相应运算,运算结果压回栈顶,回到①
    若表达式合法,则最后栈中只会留下一个元素,就是最终结果。

    3.前缀表达式相关考点

    1.中缀表达式转前缀表达式

    1.手算方法

    ①确定中缀表达式中各个运算符的运算顺序
    ②选择下一个运算符,按照「运算符 左操作数 右操作数」的方式组合成一个新的操作数
    ③如果还有运算符没被处理,就继续②
    “右优先”原则:只要右边的运算符能先计算,就优先算右边的。

    2.例题

    在这里插入图片描述

    2.前缀表达式求值

    ①从右往左扫描下一个元素,直到处理完所有元素
    ②若扫描到操作数则压入栈,并回到①;否则执行③
    ③若扫描到运算符,则弹出两个栈顶元素(先出栈的是左操作数),执行相应运算,运算结果压回栈顶,回到①

    4.中缀表达式求值

    用栈实现中缀表达式的计算:
    ①初始化两个栈,操作数栈和运算符栈若扫描到操作数,压入操作数栈
    ②若扫描到运算符或界限符,则按照“中缀转后缀”相同的逻辑压入运算符栈
    (期间也会弹出运算符,每当弹出一个运算符时,就需要再弹出两个操作数栈的栈顶元素(先弹出的是右操作数)并执行相应运算,运算结果再压回操作数栈)
    在这里插入图片描述

  • 相关阅读:
    Python调用ctype的动态库时出现的问题记录
    Chrome Dev Tools
    MS SQL SERVER查询 本日、本周、本月、本季度、本年起始时间
    竞赛:糖尿病遗传风险检测挑战赛(科大讯飞)
    DataFrame和list之间相互转换:df.values.tolist()和pd.DataFrame()
    利用transform和border 创造简易图标,以适应uniapp中多字体大小情况下的符号问题
    java计算机毕业设计健身房信息管理系统源码+mysql数据库+系统+lw文档+部署
    使用不同尺寸的传感器拍照时,怎么保证拍出同样视场范围的照片?
    VisualStudio(VS)设置程序的版本信息(C-C++)
    【Pytorch with fastai】第 10 章 :NLP 深入探讨 RNN
  • 原文地址:https://blog.csdn.net/qq_61888137/article/details/134299498
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号