中缀表达式变后缀表达式

@(算法学习)

将中缀变为相应的后缀,需要根据的优先级来进行栈的变化。
具体操作是:我们用一个栈即可,存储的是符号栈,数字直接输出,因为符号输出顺序以及时机需要调整,因此用栈做中转。
在扫描符号时,我们称符号的优先级是栈外优先级,这个时候在决定谁可以进栈。
等到扫到非数字符号,则可以有机会进栈,每个非数字符号有优先级定义。进到栈的元素呢,优先级要被重新分配。

进栈时要与栈顶元素比较,跨在门槛的瞬间,栈外元素用的是栈外的优先级,栈内元素是栈内元素的优先级。只有栈外的大,才能进来。否则,比栈顶小或者相等,都要让栈顶的出去,直到有比栈外的小的栈顶为止,然后才能进去。

总的优先级分配很简单,1~6.
栈外的左括号,一定要进得去,所以有最大优先级6,进去以后,将是最晚出来的,因此,进去以后马上变为最小的1。

右半括号在栈外,与栈顶比较时,它需要找到栈内的另一半左括号,因此它的优先级与栈内的左括号相等,为1,是最小的。进去后变为最大优先级,实际上右括号是进不去的。

加减乘除的优先级在栈外比栈内高1。
加减比乘除对应小1。
无论栈内栈外乘除一定比加减高。

这样的话,栈顶是加减时,乘除一定进来。
栈顶是乘除时,加减进来一定是把乘除先挤出去。

此外,加进来,栈顶是减时,栈顶也要出去,相等也是出栈的条件。
同样,乘除也是。
我们称作同类相残。

一般以icp(in coming priority)表示栈外优先级

isp(in stack priority)表示栈内优先int icp (char ch) 的定义如下:
int icp(char ch)
{switch (ch){case '#':return 0;case '(':return 6;case '+':case '-':return 2;case '*':case '/':case '%':return 4;case ')':return 1;}
}
int isp (char ch) 的定义如下:
int isp(char ch)
{switch (ch){case '#':return 0;case '(':return 1;case '+':case '-':return 3;case '*':case '/':case '%':return 5;case ')':return 6;}
}

待补充例子。

举个例子:求中缀表达式a/b+(c*d-e*f)/g转换为后缀表达式过程中,当扫描到f时,栈中的元素依次是:+(−∗+(-*

  • 扫描到a,输出
  • 扫描到/,进栈,栈序列:/
  • 扫描到b,输出
  • 扫描到+,+进不来,需要让’/’出去,栈序列:+
  • 扫描到(,进栈,栈序列为:+(
  • 扫描到c,输出
  • 扫描到,进栈,栈序列:+(
  • 扫描到-,需要弹出*,栈序列变为+(-
  • 扫描到e,输出
  • 扫描到*,进栈,栈序列:+(-*
  • 扫描到f,输出

中缀表达式变后缀分析相关推荐

  1. 九、中缀表达式转为后缀表达式

    使用栈将中缀表达式转为后缀表达式并计算 一.中缀表达式转换为后缀表达式 由于后缀表达式适合计算式进行计算,但是人对于较长的中缀表达式,很难将中缀表达式直接转换为后缀表达式,于是我们使用栈来实现中缀表达 ...

  2. 前缀、中缀和后缀表达式详解,中缀表达式到后缀表达式的转换规则,以及后缀表达式的计算规则,附计算代码

    1. 中缀.前缀和后缀表达式 1.1 中缀表达式 首先,中缀表达式的这个"缀"指运算符在两个操作数的位置.中缀表达式其实就是我们常用的算术表达式,比如 2 + 9 - (32 * ...

  3. nyoj-257-郁闷的C小加(一 )中缀式变后缀式

    题目链接:here~~~~~~~ 今天看了此题,感觉栈和队列很好用,进一步深入了解 一个算术表达式,含有数字(为简化处理,数字只有一位),运算符:+.-.*,以及括号,求表达式的值. 给出的表达式是一 ...

  4. NYOJ 467 中缀式变后缀式

    中缀式变后缀式 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更"习惯于"后缀式,关于算术表达 ...

  5. 逆波兰表达式中缀表达式转换为后缀表达式

    中缀表达式转换为后缀表达式 思路分析 代码实现 package com.atguigu.stack;import javax.swing.plaf.nimbus.State; import java. ...

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

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

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

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

  8. 栈的应用--中缀表达式转后缀表达式

    全部数据结构.算法及应用课内模板请点击:https://blog.csdn.net/weixin_44077863/article/details/101691360 事实上,中缀表达式转后缀(或前缀 ...

  9. 《数据结构》:中缀表达式转后缀表达式 后缀表达式的计算

    目录 一.基本概念 二.中缀表达式转后缀表达式 例       中缀表达式  2*(3+5)+7/1-4  转换为后缀表达式 三.后缀表达式的计算 例       后缀表达式  2 3 5 + * 7 ...

最新文章

  1. Python:模拟登录、点击和执行 JavaScript 语句案例
  2. 计算机国考一级系统ms,国考一级考试介绍.ppt
  3. 初看Windows Media Center
  4. C++程序设计(第二版)谭浩强----程序题课后习题答案第二章
  5. 对Linux Kernel 4.15的支持的VirtualBox 5.2.8发布
  6. 【数字信号处理】周期序列 ( 正弦序列特性 | 单个模拟周期采集 m 个数字样本 | Q 个模拟周期采集 P 个数字样本 | 非周期序列的情况 | 数字信号周期 )
  7. boost::gil::rgb8_image_t::recreate用法的测试程序
  8. Android style 继承
  9. sqlserver安装显示句柄无效_Sqlserver 2016 R Service环境安装的各种错误(坑)解决办法...
  10. asp用于取代什么技术_苹果Mini LED晶粒四季度量产,用于新iPad Pro,三安光电或成赢家...
  11. 机器学习中的Numpy库基础——向量、矩阵和数组
  12. JAVA程序设计第十版第七章_java程序设计第七章答案
  13. 1.SRE:Google运维解密 --- 介绍
  14. (转)如何学习盈透api的开发?
  15. 三菱gxworks3安装失败_三菱gx works3下载 Gx Works3(三菱PLC编程软件) v1.031h 中文安装版(附安装教程+序列号) 下载-脚本之家...
  16. win10下安装STEP7
  17. 台式计算机前面插耳机没声音,Win10台式机机箱前置耳机插孔没声音如何修复
  18. 小滴课堂MySQL相关面试题总结
  19. SPSS课程学习思路及流程
  20. 图纸管理协同办公软件推荐

热门文章

  1. java服务器项目,java项目服务器部署
  2. selenium ruby和java_针对Ruby的Selenium WebDriver安装指南
  3. js 连mysql 延后_详解MySQL 主从同步延迟
  4. java 动态报表 sql,报表SQL
  5. java有没有友元函数_c++中友元函数理解与使用
  6. 多个select count 合并_Milvus查询合并机制
  7. html input type=quot;filequot;,input[type='file']默认样式
  8. android测试测试什么,1,web测试,Android测试,Ios测试的共同点与
  9. Android运行时修改Manifest,Android如何动态修改Manifest文件
  10. python 技能清单_Python清单