先说统一的过程:
1.从左到右依次读取算式的一个字符
2.如果读到括号,则跳过,到下一个字符
3.如果读到的字符是数字,则直接输出到一个结果字符串的末尾(这个结果字符串到最后就是要的后缀表达式)
4.如果读到的是运算符,则要将此运算符入栈
   (1) 若栈空,则直接入栈;
   (2) 若栈不空则要判断栈顶运算符的优先级:
       <1>若栈顶运算符的优先级低于要入栈的运算符,直接入栈
       <2>若栈顶运算符的优先级高于要入栈的运算符,要将栈顶位置的高优先级的运算符出栈,出栈的运算符输 出到结果字符 串的末尾.,直到栈顶运算符优先级低于要入栈的运算符为止.(实际上就是要保证栈中的运算符优先级从栈顶到 栈底是依次从高到低的)
5.依次按上述方式读取,直到将次中缀表达式读完.最后的结果就保存在这个结果字符串.
6.最后将栈中还有的运算符出栈,加入到结果字符串中去.就得到了后缀表达式

举例说明1*2+(2-1)

对于算式1*2+(2-1)来说,这是一个中缀表达式(就是平时计算用的式子)
转化为后缀表达式的过程为:
设结果字符串String result="";//开始为空
设存储运算符的栈为stack=空//开始为空,从左到右为栈底和栈顶
第一个字符为1,直接加入到结果字符串result=="1";
第二个字符为*,栈为空,直接入栈.stack=*
第三个字符为2,加入到结果字符串result=="12";
第四个字符为+.栈不空,入栈.栈顶运算符*优先级高于要入栈运算符+,故*先出栈,加入到结果字符串
result=="12*";然后入栈stack=+
第五个字符为(直接跳过
第六个字符为2,加入结果字符串result=="12*2"
第七个字符为-.栈不空,入栈,栈顶运算符+优先级高于要入栈运算符-,故+先出栈,加入到结果字符串
result=="12*2+";然后入栈stack=-
第七个字符为1,加入结果字符串result=="12*2+1"
第八个字符为).跳过,
到此为止中缀表达式读取完毕
将栈里的运算符依次出栈加入结果字符串
result=="12*2+1-"得到了最终的后缀表达式

第二个问题:后缀表达式的计算
1.将后缀表达式从左到右依次读取
2.如果读到数字,直接入栈
3.如果读到运算符,则将栈顶的两个数字出栈,和此运算符做运算
注意: 先出栈的数为减数,后出栈的为被减数(除法类似)
将此计算的结果再压入栈中
4.重复上述步骤,最终的运算结果就存在栈里
举例说明:上面得到的后缀表达式:12*2+1-
设栈为stack
第一个字符1,入栈stack=1
第二个字符2,入栈stack=12
第三个字符*.栈元素出栈做运算1*2得到2,再入栈stack=2
的四个字符2,入栈stack=22
第五个字符+,栈元素出栈做运算2+2得到4,再入栈stack=4
第六个字符1,入栈stack=41
第七个字符-,栈元素出栈做运算4-1得到3,再入栈stack=3
到此为止,后缀表达式读取完毕,栈中就存储最终结果3
你可以算算和原始的中缀表达式1*2+(2-1)结果相同吧~

转载自https://zhidao.baidu.com/question/1893457153388369780.html

后缀表达式(简单示例)相关推荐

  1. 字符串的前缀与后缀和简单示例程序win32版

    定义: 字符串的前缀:符号串左部的任意子串(或者说是字符串的任意首部) 字符串的后缀:符号串右部的任意子串(或者说是字符串的任意尾部) 举例 比如说有一个长度为5字符串 x = "ababc ...

  2. boost::proto模块实现构建算术表达式的简单示例 带有占位符的评估器的测试程序

    boost::proto模块实现构建算术表达式的简单示例带有占位符的评估器的测试程序 实现功能 C++实现代码 实现功能 boost::proto模块实现构建算术表达式的简单示例带有占位符的评估器的测 ...

  3. 中缀表达式转换成前缀表达式和后缀表达式的极其简单方法

    35,15,+,80,70,-,*,20,/ //后缀表达方式 (((35+15)*(80-70))/20)=25 //中缀表达方式 /,*,+,35,15,-,80,70, 20 //前缀表达方式 ...

  4. 用栈实现计算后缀表达式(0-9数值运算示例)

    一.原理 可以先建立一个栈S .从左到右读表达式,如果读到操作数就将它压入栈S中,如果读到n元运算符(即需要参数个数为n的运算符)则取出由栈顶向下的n项按操作符运算,再将运算的结果代替原栈顶的n项,压 ...

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

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

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

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

  7. 前缀表达式后缀表达式_你知道波兰表达式和逆波兰表达式吗

    什么是波兰表达式 我们日常的运算表达式通常是如下形式,这种成为中缀表达式,也就是运算符在运算数的中间.这种表达式人类很容易识别,并根据其进行计算,但计算机识别这种表达式非常困难. a + b * (c ...

  8. 【数据结构与算法篇】什么是后缀表达式?

    什么是后缀.前缀.以及中缀表达式呢?他与我们平时在数学中见到的表达式有什么区别?第一次看这个名词,我还是有点蒙,难理解,所以做以下笔记,以便日后复习,也希望可以帮助读者,以相互促进. 文章目录 前言: ...

  9. 前缀表达式,中缀表达式和后缀表达式的定义与联系(超详细)

    目录 前缀.中缀.后缀表达式 前缀表达式 前缀表达式的计算机求值 中缀表达式 后缀表达式 后缀表达式的计算机求值 中缀表达式转化为前缀和后缀表达式 小结 前缀.中缀.后缀表达式 前缀.中缀.后缀表达式 ...

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

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

最新文章

  1. 教你实现双十一商品标签自动归类(附数据模板)
  2. 5G NR — 频率、频段、载波、载频、载波带宽
  3. Spring Web MVC是什么
  4. 如何创建URL Mashup并插入到SAP Cloud for Customer标准页面里
  5. 计算机科学与技术考英语一还是英语二,​在职研究生考试是考英语一还是英语二?区别是什么?...
  6. java 编译 注释_Java编译、注释、常量简介
  7. 域服务器如何修改域名,新网域名如何修改DNS设置方法
  8. ftp ---- 配置文件(默认配置文件解读)
  9. [Python3] 023 面向对象 第三弹
  10. input输入框提示
  11. 软件工程的经典书籍有哪些?
  12. Simulink电力系统仿真-三相短路
  13. tcp 抓包出现spurious retransmission
  14. 服务器证书有问题苹果手机,iPhone应用程序中的“服务器证书不可信”错误
  15. Riverbed大咖纵论2018科技领域九大变化
  16. 推荐若干个求职简历模板Doc文档下载
  17. Cg Programming/Unity/Specular Highlights镜面高光
  18. MATLAB之最优路径的查找
  19. Java中com.jcraft.jsch.JSch讲解
  20. 软件测试/自动化测试/测试开发/性能测试经典好书推荐

热门文章

  1. Python量化交易
  2. linux native是啥分区,Linux native是什么意思
  3. Python 列表,for循环,元组的使用【修改、添加、删除、排序、切片】w
  4. 随机变量概率分布函数汇总-离散型分布+连续型分布
  5. 揭秘网上到处晒淘宝客月收入过万的真相
  6. 茶几上 清明上河图 诗句
  7. 网利友联CEO王卫平受邀坐客飞官七直播间
  8. windows server 2003 远程拨号服务器
  9. 模型机CPU设计——ALU函数发生器(6)
  10. 遥感应用中影像最佳波段组合分析详细过程