中缀表达式是最常用的算术表达式,运算符在运算数中间,运算需要考虑运算符优先级.
后缀表达式是计算机容易运算的表达式,运算符在运算数后面,从左到右进行运算,无需考虑优先级,运算呈线性结构.

先举个简单的转换例子
2+9/3-5 (前缀)-> 2 9 3 / + 5 - (后缀)
先进行乘除再进行加减
运算规律,运算数位置不变,改变的是运算符位置
可以推栈实现,用堆栈储存等待中的运算符.
将当前运算符与最后一个等待的运算符比较.

具体转换方式:
1.从左到右进行遍历
2.运算数,直接输出.
3.左括号,直接压入堆栈,(括号是最高优先级,无需比较)(入栈后优先级降到最低,确保其他符号正常入栈)
4.右括号,(意味着括号已结束)不断弹出栈顶运算符并输出直到遇到左括号(弹出但不输出)
5.运算符,将该运算符与栈顶运算符进行比较,
如果优先级高于栈顶运算符则压入堆栈(该部分运算还不能进行),
如果优先级低于等于栈顶运算符则将栈顶运算符弹出并输出,然后比较新的栈顶运算符.
(低于弹出意味着前面部分可以运算,先输出的一定是高优先级运算符,等于弹出是因为同等优先级,从左到右运算)
直到优先级大于栈顶运算符或者栈空,再将该运算符入栈.
6.如果对象处理完毕,则按顺序弹出并输出栈中所有运算符.

再来解释一下开始的简单例子

再来解释一下开始的简单例子

括号的运算

选取慕课里何钦铭老师的案例

后缀表达式运算步骤:
(以堆栈储存)
从左到右,遇到运算符就弹出相应的运算数,运算后再把结果入栈.最终结果就是栈顶数的值.
(由于该运算为线性结构,具体运算时是不需要储存输出后的运算符,一般是输出一个运算符就进行一次运算,不像图中要储存输出状态.)
注意点:
有时候’-’(负号)是单目运算符,则要修改运算数.
遇到其他运算符(如幂运算)也类似.

数据结构:表达式之中缀转后缀相关推荐

  1. 数据结构与算法——中缀转后缀表达式以及计算

    中缀表达式转后缀表达式 思路分析: 初始化两个栈:运算符栈s1 和储存中间结果的栈s2 从左至右扫描中缀表达式 遇到操作数,将其压入s2 遇到运算符时,比较其与s1 栈顶运算符的优先级 如果s1 为空 ...

  2. 后缀转中缀表达式_中缀转后缀表达式代码实现(下)及计算器完整版

    南故笙烟:中缀表达式转为后缀表达式​zhuanlan.zhihu.com 思路分析 1.初始化两个栈:运算符栈s1和储存中间结果的栈s2 2.从左至右扫描中缀表达式 3.遇到操作数时,将其压入s2 4 ...

  3. c++:中缀表达式和后缀表达式,中缀转后缀(简析)

    一:什么是中缀表达式 中缀表达式是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间 举例: 1+2*3=7 其实就是我们平时的运算 二:什么是后缀表达式 又称逆波兰表达式,指的是 ...

  4. 前缀、中缀、后缀表达式及中缀转后缀表达式

    前缀表达式: 不含括号的算术表达式,而且是将运算符写在前面,操作数写在后面的表达式. 求法: 首先从右往左扫描表达式,从右边第一个字符判断,如果当前字符是数字,则一直到字符串的末尾再记录下来:如果是运 ...

  5. 表达式转换 (中缀转后缀表达式)

    算术表达式有前缀表示法.中缀表示法和后缀表示法等形式.日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间.请设计程序将中缀表达式转换为后缀表达式. 输入格式: 输入在一行中给出不含空 ...

  6. 7-20 表达式转换(中缀转后缀)

    7-20 表达式转换 分数 25 作者 DS课程组 单位 浙江大学 算术表达式有前缀表示法.中缀表示法和后缀表示法等形式.日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间.请设计程 ...

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

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

  8. C语言实现中缀转后缀并计算表达式结果

    文章目录 一.问题描述 二.AC代码 三.注意点 四.实现思路/代码解析 一.问题描述 [问题描述] 从标准输入中读入一个整数算术运算表达式,如5 - 1 * 2 * 3 + 12 / 2 / 2   ...

  9. 【C语言中缀转后缀】

    中缀表达式 我们把平常所用的标准四则运算的表达式叫做中缀表达式,所有的运算符号都在俩数字中间 后缀表达式 后缀表达式是栈的运用,利用数组模拟栈的先进后出的特点,对后缀表达式进行计算 后缀表达式:后缀表 ...

最新文章

  1. dedecms调用当前栏目ID与当前栏目顶级ID的方法
  2. c语言三元组稀疏矩阵的转置实验报告,稀疏矩阵三元组实现矩阵转置算法实验报告.doc...
  3. 解决eclipse修改后台代码ctrl+s总是【自动重启服务器】问题
  4. python mysql模块 pip_MySQLpython模块不能与Pip一起在windows中安装
  5. JDK1.6官方下载
  6. easyui datagrid
  7. oracle 如果存在不创建表,oracle – 如果表不存在则创建表,并在创建后输入一行...
  8. UICollectionView 具体解说学习
  9. Linux常用命令(第二版) --Shell应用技巧
  10. 算法列表-java实现
  11. 陈新宇:CKafka在人脸识别PAAS中的应用
  12. 冯偌依曼计算机的基本原理是,软件《计算机组成原理》试卷 A
  13. UIWindow statusBar消失
  14. 【计算机二级】公共基础知识总结
  15. 层次分析法和bp神经网络,基于bp的神经网络算法
  16. 职业学校计算机课评课,信息技术课评课范文
  17. IE浏览器F12无法使用
  18. Python反序列化免杀上线CS:两次编码绕过
  19. python 抽奖器_如何基于python实现年会抽奖工具
  20. [DeeplearningAI笔记]序列模型3.3-3.5集束搜索

热门文章

  1. Echarts柱状图顶部加数量显示
  2. lucene 异常 Lock obtain timed out 解决方法
  3. Java 异常Exception
  4. 【转】RMAN 高级恢复
  5. DataList的e.Item.ItemType == ListItemType.Item判断问题
  6. TensorFlow 中文文档 介绍
  7. circshift 函数详解
  8. MATLAB移植C的小结
  9. groovy java_Java 、Groovy、 Scala 的未来会怎样?
  10. 论文阅读:Network In Network