码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 数据结构学习笔记——前、中、后缀表达式的转换(栈的应用)


    目录

    • 一、前、中、后缀表达式定义
    • 二、具体转换步骤
      • (一)中缀表达式转换为前缀表达式
      • (二)中缀表达式转换为后缀表达式
    • 例题

    一、前、中、后缀表达式定义

    一般我们常用的中缀表达式,中缀表达式不仅依靠运算符的优先级,也要处理括号的优先级;后缀表达式中没有括号,只有操作数和运算符,且运算符放在操作数的后面;前缀表达式也是一种没有括号的算术表达式,其运算符写在前面,操作数写在后面。
    在这里插入图片描述
    将常用的中缀表达式转换为前缀表达式、后缀表达式后,可以通过栈的相关原理来实现具体的出栈 、入栈操作逻辑,从而可以一样完成与中缀表达式相同的运算。

    二、具体转换步骤

    (一)中缀表达式转换为前缀表达式

    以a+b-c*d为例,将中缀表达式转换为前缀表达式。

    1、首先按照运算优先级将所有的操作数都加上括号。
    在这里插入图片描述
    2、将运算符移至相对应的括号前。
    在这里插入图片描述
    3、将括号去掉,即可得到前缀表达式。
    在这里插入图片描述

    (二)中缀表达式转换为后缀表达式

    与前缀表达式相反,第二步将运算符移至相对应的括号后,然后再去掉括号,如下图:
    在这里插入图片描述
    这里以中缀表达式转换为后缀表达式,简单讲解具体的栈的实现方法:
    1、将一个中缀表达式转换为后缀表达式,首先从左到右扫描整个中缀表达式,当遇到操作数时加入至待定的后缀表达式区域中(这是一个栈);
    2、遇到操作符时,若为’(‘,则入栈,若为’)',则依次将栈中的运算符加入至后缀表达式的栈中,直到出现‘(’后,从栈中删除‘(’;
    3、遇到运算符时,当为比括号优先级高的优先级时,直接入栈,否则,依次从栈中弹出比当前运算符优先级高和优先级相等的运算符,直到遇到比它优先级低或者遇到一个‘(’为止;
    4、当扫描完结束后,栈中的所有运算符依次出栈加入后缀表达式。
    在这里插入图片描述
    通过手工算,第一步转换为(a+((b-(c*d))/e)),第二步提运算符转为(a((b(cd)*)-e)/)+,去掉括号得abcd*-e/+。

    例题

    例1、表达式a*(b+c)-d的后缀表达式是________。

    首先第一步,加上括号得:((a*(b+c))-d)
    然后由于是转为后缀表达式,将符号提至对应的括号后,得:((a(bc)+)*d)-
    括号去掉,即可得到后缀表达式:abc+*d-

    例2、求表达式a / b + (c * d-e * f) / g的前缀表达式。

    第一步也是加上括号:((a/b)+(((c*d)-(e*f))/g))
    然后由于是转为前缀表达式,将符号提至对应的括号前,得:+(/(ab)/(-(*(cd)*(ef))g))
    括号去掉,即可得到前缀表达式:+/ab/-*cd*efg

  • 相关阅读:
    前端工程化精讲第二十课 流程优化:部署流程中的构建流程策略优化
    MyBatis:基础入门
    maven的版本锁定
    腾讯云标准型s5和s6有什么区别?CPU处理器有差异吗?
    `英语` 2022/8/18
    008_第一代软件系统架构
    239. 滑动窗口最大值/76. 最小覆盖子串
    Node.js【模块化的基本概念、Node.js 中的模块化、npm与包】
    MySQL事务和锁
    [Mac软件]Infuse 7 PRO v7.6.3 一个强大的视频播放器(激活版)
  • 原文地址:https://blog.csdn.net/qq_43085848/article/details/125470817
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号