2019独角兽企业重金招聘Python工程师标准>>>

转来的,仅仅作为以后复习用途。http://blog.csdn.net/zsuguangh/article/details/6280863

例如:中序表达式(23+34*45/(5+6+7))转换成后序表达式23 34 45 * 5 6 + 7 + / +

后序表达式用处

当转换成后序表达式后更方便计算表达式的值,如将后序表达式的元素依次进栈直到遇到运算符,这时候从栈中弹出两个元素,再结合运算符计算出这两个数运算的结果(如34*45=1530),将其结果压栈(此时栈元素为23 1530),然后继续将后序非符号元素压栈,直到遇到运算符。重复之前的操作。。。

InfixExp(中序表达式)转换PostfixExp(后序表达式)算法

1)当输入的是操作数时候,直接输出到后序表达式PostfixExp序列中

2)当输入开括号时候,把它压栈

3)当输入的是闭括号时候,先判断栈是否为空,若为空,则发生错误并进行相关处理。若非空,把栈中元素依次弹出并输出到Postfix中,知道遇到第一个开括号,若没有遇到开括号,也发生错误,进行相关处理

4)当输入是运算符op(+、- 、×、/)时候

a)循环,当(栈非空and栈顶不是开括号and栈顶运算符的优先级不低于输入的运算符的优先级)时,反复操作:将栈顶元素弹出并添加到Postfix中

b)把输入的运算符op压栈

5)当中序表达式InfixExp的符号序列全部读入后,若栈内扔有元素,把他们依次弹出并放到后序表达式PostfixExp序列尾部。若弹出的元素遇到空括号,则说明不匹配,发生错误,并进行相关处理

参考文献许卓群版《数据结构与算法》

贴上网上找到的代码:

/****************************/
/*        www.afdream.com   */
/*         Author:Fdream    */
/*    引用此算法请保留此信息  */
/****************************/#include<iostream.h>const int MAX=40;void main(void){char infix[MAX]={'#'};char oprator[MAX]={'@','#'};int opr=1;char postfix[12]={'#'};int post=0;int i,j,cnt=0,cntl;char c;//输入表达式,以等号结束cin.get(c);while(c!='='){infix[cnt]=c;cnt++;cin.get(c);}cntl=cnt;for(i=0;i<cnt;i++){switch(infix[i]){//左括号就直接入栈case '(':cntl=cntl-2;oprator[opr]=infix[i];opr++;break;//右括号则先退栈,直到遇见第一个左括号case ')':for(j=opr-1;j>0;j--){if(oprator[j]!='('){postfix[post]=oprator[j];oprator[j]='#';post++;}else{oprator[j] = '#';break;}}opr=j;break;case '*':case '/'://如果前一个运算符为*或/,则先退栈,再入栈,否则直接入栈if (oprator[opr] == '*' || oprator[opr] == '/') {postfix[post] = oprator[opr];oprator[opr]='#';post++;}oprator[opr] = infix[i];opr++;break;case '+' :case '-' ://如果上一个运算符不是左括号也不是栈顶,则先退栈再入栈if (oprator[opr-1] != '(' && oprator[opr-1] != '@') {            postfix[post] = oprator[opr];oprator[opr]='#';}oprator[opr] = infix[i];opr++;break;default ://如果是数字则直接进入后缀表达式数组postfix[post] = infix[i];post++;break;}}//如果扫描完成,则退栈for(j=opr-1;j>0;j--){if(oprator[j]!='@'){postfix[post]=oprator[j];oprator[j]='#';}elsebreak;}//输出结果for(i=0;i<cntl;i++)cout << postfix[i];cout << endl;
}

转载于:https://my.oschina.net/dapengking/blog/124278

“中序表达式”转“后续表达式”相关推荐

  1. Algorithms_二叉树的前序遍历、中序遍历、后续遍历(深度优先)

    文章目录 前序.中序.后序的含义 实例 Code (递归) 前序遍历 中序遍历 后序遍历 测试 Code (非递归) 前序.中序.后序的含义 前序遍历: 先输出父节点,再遍历左子树,最后遍历右子树 中 ...

  2. 二叉树的中序遍历,后续遍历(原理解释)

    上一篇文章已经介绍了遍历的作用,这里再次重复一下: 它是树结构插入,删除,修改,查找和排序运算的前提,是二叉树一切运算的基础和核心. 遍历二叉树--从根结点触发,按照某种次序依次访问二叉树中所有结点, ...

  3. 树的先序遍历,中序遍历,后续遍历(递归和非递归实现)

    前序遍历是先访问根节点再访问左子树最后访问右子树(中,左,右):中序遍历是先访问左子树再访问根节点最后访问右子树(左,中,右):后序遍历是先访问左子树再访问右子树最后访问根节点(左,右,中).---- ...

  4. 二叉树之前序遍历、中序遍历、后续遍历

    刷leetcode的时候,看到三道题:145. 二叉树的后序遍历.94. 二叉树的中序遍历.144. 二叉树的前序遍历.正好趁着这三道题,回顾一下二叉树的遍历算法. 二叉树的前序遍历:先遍历根,再遍历 ...

  5. 数据结构-二叉树[递归实现](构造,析构,先序遍历,中序遍历,后续遍历,层次遍历)

    数据结构-二叉树[递归实现] 一.二叉树概念 1.定义 二叉树(Binary Tree)是n(n不小于0)个节点组成的有限集合,且满足以下条件之一 (1)n=0时,为空二叉树(无节点) (2)n> ...

  6. 关于完全二叉树先序遍历,中序遍历,后续遍历

    [本文都先遍历左子树] 先序遍历 先序遍历是先双亲,再左子树到底,后兄弟,遇到什么就输出什么,在二叉树里面,从根节点开始输出一直输出到左子树的左叶子结点[*next==ptrnull],再做递归返回到 ...

  7. “中序表达式”转换为“前序表达式”、“后序表达式”

    上周末参照书本写了个"计算器"的程序,其中最令我费解的就是"前序表达式"."后续表达式",好像记得老师在上课的时候讲过,估计当时也没听懂,看 ...

  8. 二叉树前序,中序求后续;中序,后续求前序

    一, 1,知道前序,中序,求后续 前序:ABCDEFGHI 中序:BCAEDGHFI 由图可知后序为:CBIHGFEDA 2.知道中序,后续求前序 中序:BDCEAFHG 后序:DECBHGFA 由后 ...

  9. 数据结构-中序遍历二叉树(基于C++)

    二叉树是一种常见的数据结构,它由节点和边组成,每个节点最多有两个子节点,分别称为左子节点和右子节点.二叉树的遍历是指按照一定的顺序访问二叉树中的所有节点,常见的遍历方式有前序遍历.中序遍历和后序遍历. ...

最新文章

  1. 使用python简单连接并操作数据库
  2. react 示例_2020年的React Cheatsheet(+真实示例)
  3. RPM包制作及yum仓库搭建
  4. const修饰成员函数总结
  5. git pull命令报错
  6. 基于ffmpeg的kxmovie的使用
  7. memcpy-avx-unaligned/strcpy_sse2_unaligned崩溃记录
  8. 搭建一个自己的文件上传服务器。
  9. 数值计算之 共轭梯度法(1)线性共轭梯度法
  10. win7局域网共享设置_局域网硬盘一键共享软件下载-一键共享局域网修复查看设置工具包免费版...
  11. 桩身弹性压缩计算公式_桩身弹性压缩量计算
  12. ps景观平面图转鸟瞰图_用ps做鸟瞰图的方法步骤
  13. HDU 4415 Assassin’s Creed 苦逼的贪心
  14. 抖音,5.5亿!未来十年的流量入口,视频百科全书的梦,会成为现实吗?
  15. 华为p10 android保活,华为P10这八大细节,请看完之后决定要不要买!
  16. 远程工具TeamViewer 移动端和PC端连接
  17. 【小波滤波】基于小波变换的噪声信号滤波处理matlab仿真
  18. 那些令人印象深刻的书籍献词~ 一些有趣的书的献词
  19. Unity WebView 插件⭐️(十三)特定模块 iOS网页视图—iOSWebViewWebView
  20. 中兴光猫F460 V3.0破解,断了电信的远程管理,禁止电信光猫外网登录超级管理员,有效去除被黑的烦恼...

热门文章

  1. matlab regress()
  2. 【 C 】指向数组的指针(数组指针)(行指针)
  3. 三对角线性方程组的追赶法
  4. HDU-1025 Constructing Roads In JGShining's Kingdom
  5. Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览
  6. 冒号课堂§4.3:汇总范式
  7. java等待欢迎界面_android welcome欢迎界面3秒后自动跳转
  8. Notepad++编写的Verilog文件导入Vivado,中文注释乱码问题
  9. 算法导论中求解时间复杂度的三种方法
  10. java web 心跳机制实现,基于javax的websocket服务端实现,含心跳机制