全部数据结构、算法及应用课内模板请点击:https://blog.csdn.net/weixin_44077863/article/details/101691360

事实上,中缀表达式转后缀(或前缀表达式)不是课内重点

老师只讲了下手写怎么写,代码丝毫没有提及

但是我还是要强调这一应用

学会这个,离散数学的范式转换问题,你就能解决了

学会这个,栈的大部分应用,你就能得心应手了

学会这个,编译原理和计算机系统你就会学的更好(我不知道诶。。老师这么说的,博主写此文时刚上大二上)

不说废话了,先讲一下各种表达式什么意思

中缀表达式:23+34*45/(5+6+7)  (就是我们平常用的表达式,运算符在中间)

前缀表达式:+ 23 / * 34 45 + + 5 6 7 (又叫波兰式)

后缀表达式:23 34 45 * 5 6 + 7 + / + (又叫逆波兰式)

教材呢,没说前缀,只说了后缀,然后我们也主要讲后缀

然后呢,代码挺繁琐的,不上代码,只讲思路了,思路搞清了代码一下就出来了

先讲如何用前后缀把表达式值算出来

事实上,对中缀,机器是不认识的,它是要用前缀或后缀并利用栈算的

对前缀:不断把东西压入栈,当栈顶是数字,下面一个是运算符,且又要进来一个数字时

则把栈顶的运算符和数字取出来和当前数字做个计算,结果再扔回栈

不断循环这样的操作直至最后只剩一个结果

对后缀:不断把东西压入栈,当遇到运算符时,就把栈顶的两个数取出来

做一个计算,然后再把结果扔回栈,不断循环这样的操作直至最后只剩一个结果

然后要说的就是中缀如何转后缀了(前缀也差不多,所以我们只说一个)

中缀转后缀方法:

首先,需要两个栈,栈S1临时存遇到的运算符,栈S2存逆波兰式

然后按下面的步骤操作即可实现中缀转后缀

(1)若取出的字符是操作数,则分析出完整的运算数,该操作数直接送入S2栈

(2)若取出的字符是运算符,则将该运算符与S1栈栈顶元素比较,如果该运算符优先级(不包括括号运算符)大于S1栈栈顶运算符优先级,则将该运算符进S1栈,否则,将S1栈的栈顶运算符弹出,送入S2栈中,直至S1栈栈顶运算符低于(不包括等于)该运算符优先级,最后将该运算符送入S1栈。

(3)若取出的字符是“(”,则直接送入S1栈顶。

(4)若取出的字符是“)”,则将距离S1栈栈顶最近的“(”之间的运算符,逐个出栈,依次送入S2栈,此时抛弃“(”。

栈的应用--中缀表达式转后缀表达式相关推荐

  1. 数据结构——栈——中缀表达式和后缀表达式

    什么是中缀表达式,什么是后缀表达式 我们一般看见的多项式计算都是中缀表达式构成的:1+2*3+4/3 类似这种,为什么说是中缀呢?因为它的计算符号都是在两个数中间的. 那么自然而然的明白了后缀表达式是 ...

  2. 栈应用(中缀表达式转后缀表达式并计算后缀表达式的值)

    [0]README 0.1) 本文旨在总结 中缀表达式转后缀表达式并计算后缀表达式的值 的步骤,并给出源代码实现: 0.2) 本文中涉及到的源代码均为原创,是对中缀转后缀和计算后缀的简单实现,(旨在理 ...

  3. 数据结构 - 栈 (逆波兰计算器)(栈的三种表达式)(前缀、中缀和后缀表达式,后缀也叫逆波兰表达式)(中缀表达式转后缀表达式实现步骤及完整代码)

    栈的三种表达式:前缀.中缀和后缀表达式,后缀也叫逆波兰表达式 前缀(波兰表达式) 中缀(对人来讲很好理解,对于计算机来讲就方便了,一般会把中缀表达式转换成后缀表达式) 后缀(逆波兰表达式) 计算过程 ...

  4. 使用栈实现中缀表达式转为后缀表达式和后缀表达式的求解

    书籍在线网址http://interactivepython.org/runestone/static/pythonds/index.html 中文翻译书籍:https://facert.gitboo ...

  5. 栈应用:中缀表达式转后缀表达式

    网上有很多关于中缀转后缀的文章,很多文章或多或少都有bug,包括一些教学视频,经过本人无数次测试,保证下面的代码运算结果的正确性!前提是你写的中缀表达式是正确的哈,没有做中缀表达式是否正确的的完整性校 ...

  6. java利用栈求复杂表达式_java中的栈Stack的基本使用和应用(二) ——利用栈计算合法的算术表达,中缀表达式转后缀表达式...

    利用栈Stack计算合法的算术表达式 限定的算术表达式求值问题:包含 "+"."-"."*"."/" .正整数和圆括号的 ...

  7. 数据结构(3) 第三天 栈的应用:就近匹配/中缀表达式转后缀表达式 、树/二叉树的概念、二叉树的递归与非递归遍历(DLR LDR LRD)、递归求叶子节点数目/二叉树高度/二叉树拷贝和释放...

    01 上节课回顾 受限的线性表 栈和队列的链式存储其实就是链表 但是不能任意操作 所以叫受限的线性表 02 栈的应用_就近匹配 案例1就近匹配: #include <stdio.h> in ...

  8. java中缀表达式转后缀表达式(逆波兰算法)

    四则运算是栈的重要应用之一 中缀表达式转后缀表达式(逆波兰算法)过程 从左到右遍历中缀表达式 数字直接输出为后缀表达式一部分 如果是符号,则判断与栈顶元素的优先级 高于栈顶元素优先级直接入栈 低于或等 ...

  9. java中缀表达式转后缀表达式_数据结构Java实现06----中缀表达式转换为后缀表达式...

    本文主要内容: 表达式的三种形式 中缀表达式与后缀表达式转换算法 一.表达式的三种形式: 中缀表达式:运算符放在两个运算对象中间,如:(2+1)*3.我们从小做数学题时,一直使用的就是中缀表达式. 后 ...

  10. 数据结构实验——中缀表达式转为后缀表达式

    一.实验内容: 编写程序,实现中缀表达式化为后缀式输出. 已知中缀表达式中操作数全部用小写英文字母表示,运算符只含有+, -, *, /四种,定界符只有( )以及结束符#. 二.程序源代码: 运行示例 ...

最新文章

  1. 1102 Invert a Binary Tree 需再做
  2. xml布局显示需要预判断,可是还没有show出来,怎么办?
  3. pie hist plot boxplot
  4. SpringBatch tasklet实现和用法(十)
  5. ZooKeeper 集群:集群概念、选举流程、机器数量
  6. ruby推送示例_Ruby直到示例循环
  7. linux安装memcached(不错)
  8. big sur java home_无法在macOS Big Sur上运行Eclipse
  9. linux中的root命令,在linux终端中执行root命令
  10. 最严格的身份证校验(JavaScript版)
  11. JS对象转JSON转数组
  12. flatpak安装的firefox视频播放卡顿的解决方案
  13. 如何通俗理解圣维南原理?
  14. 【Linux】常用命令
  15. 国内半导体企业进军市场拉开序幕
  16. Windows系统的命令窗口
  17. MATLAB常用快捷键:自动补全、自动排版、注释、去掉注释
  18. 三维浏览软件-JT2GO / 3D Model Viewer JT2GO
  19. ultraos win10启动盘_ultraiso制作u盘启动盘教程图文详解
  20. 加壳学习系列(二)-壳代码

热门文章

  1. 测试人员眼中的问题解决策略
  2. WCF技术剖析之六:为什么在基于ASP.NET应用寄宿(Hosting)下配置的BaseAddress无效...
  3. ERROR 1045 (28000): Access denied for user 'username'@'localhost' (using password: YES)
  4. UNIX环境高级编程——线程同步之条件变量以及属性
  5. react-native 框架升级 安卓第三方插件报错 Android resource linking failed
  6. 从天地图下载瓦片构建本地瓦片地图
  7. powershell如何ping
  8. JAVA EE配TOMCAT
  9. file 创建 txt文件
  10. 【ASP.NET Web API教程】3.4 HttpClient消息处理器