我们把平时所用的标准四则运算表达式,即“9+(3-1)*3+10/2"叫做中缀表达式。因为所有的运算符号都在两数字的中间,现在我们的问题就是中缀到后缀的转化。

中缀表达式“9+(3-1)*3+10/2”转化为后缀表达式“9 3 1-3*+ 10 2/+”

  • 规则:从左到右遍历中缀表达式的每个数字和符号,若是数字就输出,即成为后缀表达式的一部分;若是符号,则判断其与栈顶符号的优先级,是右括号或优先级低于找顶符号(乘除优先加减)则栈顶元素依次出找并输出,并将当前符号进栈,一直到最终输出后缀表达式为止。

下面我们来具体看看这个过程。

1. 初始化一空栈,用来对符号进出栈使用。

2. 第一个字符是数字9,输出9,后面是符号“+”,进栈。

3. 第三个字符是“(”,依然是符号,因其只是左括号,还未配对,故进栈。

4. 第四个字符是数字3,输出,总表达式为9 3,接着是“-”进栈。

5. 接下来是数字1,输出,总表达式为9 3 1,后面是符号“)”,此时,我们需要去匹配此前的“(”,所以栈顶依次出栈,并输出,直到“(”出栈为止。此时左括号上方只有“-”,因此输出“-”,总的输出表达式为9 3 1 -

6. 接着是数字3,输出,总的表达式为9 3 1 - 3 。紧接着是符号“*”,因为此时的栈顶符号为“+”号,优先级低于“*”,因此不输出,进栈。

7. 之后是符号“+”,此时当前栈顶元素比这个“+”的优先级高,因此栈中元素出栈并输出(没有比“+”号更低的优先级,所以全部出栈),总输出表达式为 9 3 1 - 3 * +.然后将当前这个符号“+”进栈。也就是说,前6张图的栈底的“+”是指中缀表达式中开头的9后面那个“+”,而下图中的栈底(也是栈顶)的“+”是指“9+(3-1)*3+”中的最后一个“+”。

8. 紧接着数字10,输出,总表达式变为9 3 1-3 * + 10。

9. 最后一个数字2,输出,总的表达式为 9 3 1-3*+ 10 2

10. 因已经到最后,所以将栈中符号全部出栈并输出。最终输出的后缀表达式结果为 9 3 1-3*+ 10 2/+

  • 从刚才的推导中你会发现,要想让计算机具有处理我们通常的标准(中缀)表达式的能力,最重要的就是两步:
  1. 将中缀表达式转化为后缀表达式(栈用来进出运算的符号)。
  2. 将后缀表达式进行运算得出结果(栈用来进出运算的数字)。

整个过程,都充分利用了找的后进先出特性来处理,理解好它其实也就理解好了栈这个数据结构。

转载于:https://www.cnblogs.com/GDUT-xiang/p/5115480.html

将中缀表达式转化为后缀表达式相关推荐

  1. 2015中缀表达式转化为后缀表达式(C++,附思路,注释多)

    这篇文章默认你已经知道转换的原理了,所以就不介绍如何转换了~如果不知道的话可以看这两篇文章,写得很好,可以看懂~ 详解如何将中缀表达式转化为后缀表达式_Dacyuan的学习笔记-CSDN博客_中缀算式 ...

  2. 中缀表达式转化为后缀表达式

    一.从应对考试角度来(在最快的时间内得出最准确的答案) 首先我们应该知道,要想将中缀转化为后缀,需要借助堆栈实现.(不准备画图了,画图有点浪费时间)我会用最简单明了的语言使读者弄懂.[举个例子吧:比如 ...

  3. [数据结构考前必看]中缀表达式转化成后缀表达式_例题超多+分步骤讲解+带你手算

    中缀.后缀表达式定义 中缀表达式又称波兰式,有利于人们阅读与表达. 后缀表达式又称逆波兰式,有利于机器进行运算. 例题1: 中缀表达式:(a+b+c*d) /e 首先让我们来看一下运算符对应的优先级, ...

  4. 利用栈将中缀表达式转化成后缀表达式

    目的:将中缀表达式(即标准形式的表达式)转换为后缀式. 例子:a+b*c+(d*e+f)*g转换成abc*+de*f+g*+ 转换原则 1. 遇到操作数, 直接输出 2. 操作符的优先级为 () 最大 ...

  5. 把中缀表达式转化为后缀表达式

    http://www.cppblog.com/yearner/archive/2006/10/31/14425.html 算法的用途: 我的目的很简单,做一个24点牌的Flash小游戏,接受用户输入的 ...

  6. java后缀表达式_表达式计算 java 后缀表达式

    题目: 问题描述 输入一个只包含加减乖除和括号的合法表达式,求表达式的值.其中除表示整除. 输入格式 输入一行,包含一个表达式. 输出格式 输出这个表达式的值. 样例输入 1-2+3*(4-5) 样例 ...

  7. 前缀表达式计算、中缀表达式计算、后缀表达式计算

    首先要知道什么是前缀表达式,什么是中缀表达式,什么是后缀表达式 所谓的中缀表达式就是类似于这种的运算 1+((2+3)×4)-5 所谓的前缀表达式就是符号在两个操作数的前面 - + 1 × + 2 3 ...

  8. c语言表达式的后缀,中缀表达式转换成后缀表达式C语言程序(一)

    逆波兰表达式(Reverse Polish Notation)又叫后缀表达式.它是一种非常的表达式,可以将复杂的表达式转换成可以依靠简单的操作得到结果的表达.下面这段C语言即是用于实现将中缀表达式转换 ...

  9. NYOJ 257 中缀表达式表示成后缀表达式

    话说这道题代码那个丑陋啊,,写出来我自己都不想再看第二遍啊...看了看聪神的代码,还消耗我3个NYOJ币啊,,更扯得是,聪神的代码我看不懂啊,,,,卧槽...这道题不再多说了,数据结构上有详细的介绍, ...

最新文章

  1. 诺基亚5800WIFI设置教程
  2. C语言:gcc编译过程及make命令、makefile语法规则
  3. Android获取本机号码及运营商
  4. 你要了解的11款面向Linux系统的一流备份实用工具
  5. 【第九届蓝桥杯大赛决赛真题】JAVA大学C组题解
  6. vs2010 c# 配置项问题
  7. Scheme学习系列二:调用C代码
  8. 我的一些关于商业计划书的经验
  9. Linux的tar解压命令
  10. python判断整数浮点数_Python初识2 整数与浮点数
  11. 直流有刷电机驱动板原理和测试方法
  12. 我不怕未知的困难,我只怕身边没有你
  13. 橙光游戏c语言代码,橙光游戏一
  14. CSS3多列布局 columns 弹性布局 flex
  15. 正则表达式匹配居民身份证
  16. 综测仪 之 IQxel使用方法介绍
  17. 【Numpy】np.savetxt保存时数据不使用科学计数法形式
  18. 华为hcie中QOS 流量整形 双速率的概念-ielab
  19. Python实战项目:高血压检测项目调查问卷接口的测试
  20. c语言工程师培训机构,广州C语言语言高级培训中心

热门文章

  1. Professional WCF 4读书笔记(2)——消息交换模式
  2. 最小生成树模板总结--PrimKruskal
  3. python函数(三)
  4. 银盛通信与深圳邮政达成合作,全城线下代办点突破1000家
  5. Java知多少(87)选择框和单选按钮(转)
  6. L301 L210 L101 L201 L110 R390 R270 R1430 1400清零软件 中文正版
  7. Red Hat Enterprise Linux 5---system-config-*管理工具
  8. 动态代理机制之查看一个类或接口中有哪些方法
  9. vn.py 2.0.2 发布,全功能交易程序开发框架
  10. jq 创建与添加节点