#include <stdio.h>
#include "SeqStack.h"
//对扩展开放,对修改封闭
//修改一下运算符
int Is_OperatorEx(char op) {switch (op){case '(':case ')':case '+':case '-':       case '*':case '/':return 1;default:return 0;}
}int PriorityEx(char op) {switch (op){case '(':return 1;case '+':case '-':return 2;case '*':case '/':return 3;default:return 0;}
}int main21(void) {char inorder[50] = "1+2-3#"; //"1+((2+3)*4)-5#";//声明中缀(中序)表达式的字符串char postorder[50];int op = 0;//运算符int in_position;//中序表达式的角标int po_position;//后续表达式的角标int i;in_position = 0;po_position = 0;for (i = 0;i < 50;i++)postorder[i] = 0;SeqStack sOper;init(&sOper);while (inorder[in_position]!='#'){//todo利用栈进行优先级,去括号的过程 if (Is_OperatorEx(inorder[in_position])) {if (isEmpty(&sOper) || inorder[in_position] == '(') {pushStack(&sOper, inorder[in_position]);}else {if (inorder[in_position] == ')') {//匹配左括号while (sOper.stack[sOper.top] != '(') {op = popStack(&sOper);postorder[po_position++] = op;}if (sOper.stack[sOper.top] == '('){popStack(&sOper);}}//ctrl+]else{while (PriorityEx(inorder[in_position]) <= PriorityEx(sOper.stack[sOper.top]) && !isEmpty(&sOper)) {op = popStack(&sOper);postorder[po_position++] = op;}pushStack(&sOper, inorder[in_position]);}}}else {postorder[po_position++] = inorder[in_position];}in_position++;}while (!isEmpty(&sOper)) {op = popStack(&sOper);postorder[po_position++] = op;}for (int i = 0;i < 50;i++) {if (postorder[i] == 0)break;printf("%c", postorder[i]);}getchar();return 0;
}

带括号的中缀表达式转后缀表达式相关推荐

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

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

  2. java中缀表达式转后缀表达式(逆波兰算法)

    四则运算是栈的重要应用之一 中缀表达式转后缀表达式(逆波兰算法)过程 从左到右遍历中缀表达式 数字直接输出为后缀表达式一部分 如果是符号,则判断与栈顶元素的优先级 高于栈顶元素优先级直接入栈 低于或等 ...

  3. java中缀表达式转后缀表达式_数据结构Java实现06----中缀表达式转换为后缀表达式...

    本文主要内容: 表达式的三种形式 中缀表达式与后缀表达式转换算法 一.表达式的三种形式: 中缀表达式:运算符放在两个运算对象中间,如:(2+1)*3.我们从小做数学题时,一直使用的就是中缀表达式. 后 ...

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

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

  5. 数据结构——栈——中缀表达式和后缀表达式

    什么是中缀表达式,什么是后缀表达式 我们一般看见的多项式计算都是中缀表达式构成的:1+2*3+4/3 类似这种,为什么说是中缀呢?因为它的计算符号都是在两个数中间的. 那么自然而然的明白了后缀表达式是 ...

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

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

  7. 【Weiss】【第03章】练习3.20:中缀表达式转后缀表达式

    [练习3.20] a.编写一个程序将中缀表达式转换为后缀表达式,该中缀表达式含括号及四则运算. b.把幂操作符添加到你的指令系统中去. c.编写一个程序将后缀表达式转化为中缀表达式. Answer: ...

  8. 学习日志-中缀表达式转后缀表达式并计算结果

    将中缀表达式转换为后缀表达式: (1)当读到数字直接送至输出队列中: (2)当读到运算符t时: a.将栈中所有优先级高于或等于t的运算符弹出,送到输出队列中: 这句话不好理解,可以说成这样,从栈顶开始 ...

  9. 数据结构中缀表达式转后缀表达式与后缀表达式的求值实训报告_动图+源码,演示 Java 中常用数据结构执行过程及原理...

    程序员的成长之路互联网/程序员/成长/职场 关注 阅读本文大概需要 3.7 分钟. 作者:大道方圆cnblogs.com/xdecode/p/9321848.html 最近在整理数据结构方面的知识, ...

  10. 信息竞赛进阶指南--中缀表达式转后缀表达式并求值(模板)

    // 后缀表达式转中缀表达式,同时求值,O(n)// 数值栈 vector<int> nums; // 运算符栈 vector<char> ops;// 优先级 int gra ...

最新文章

  1. Linux 编译内核
  2. java懒加载设计模式_java设计模式——单例模式
  3. 小谈Online-game服务器端设计(1、2)
  4. R语言第八讲 评估模型之交叉验证法分析案例
  5. 找第一个只出现一次的字符_leetcode哈希表之第一个只出现一次的字符
  6. Redis学习(6)-常用命令
  7. mysql参数优化51cto_mysql的优化参数
  8. hibernate.hbm.xml必须必须配置主键
  9. mouse_event() 控制鼠标操作
  10. 解决 adb no permissions (user mi is not in the plugdev group);
  11. 防火墙的三种工作模式介绍(路由模式、透明模式(网桥)、混合模式)
  12. Python自动化测试如何自动生成测试用例?
  13. 在GT4 Client端EndpointReferenceType的标准序列化方法
  14. P3975 [TJOI2015]弦论
  15. maxcompute-入门-环境安装
  16. 软文营销常用的方式有哪些?如何写出优秀的软文
  17. kafka 创建topic,查看topic
  18. shell编写的天气预报桌面小程序
  19. 【Python】基于 Flask 框架,模拟微信朋友圈的服务端
  20. 完全图(二分,图论)

热门文章

  1. linux系统下管理网口ip设置密码,Linux系统管理-(12)-网络配置IP命令
  2. 从两个bug来看Javascript的装载
  3. 前端性能优化 —— 项目瘦身
  4. 图解HTTPS建立过程
  5. JEECG支付宝服务窗开发培训视频
  6. JavaEE Tutorials (15) - 对Java持久化API应用使用二级缓存
  7. 解决目录和tgz文件等不显示相应颜色
  8. 虚函数表指针,虚函数表
  9. 爱奇艺视频千万级生产 Kubernetes 集群优化实践!
  10. 某程序员大牛放弃130万年薪,离开北京回老家事业单位!网友:太可惜!何不再忍两年?...