题目描述:

给定一个中缀表达式,请将其转化为后缀表达式

输入格式:

只有一行数据,中缀表达式的字符串,含有正整数,操作符号:+,-,*,/,(,)。

输出格式:

后缀表达式,每个操作数和操作符后面请输入一个“,”作为分割

限制:

空间限制:128MByte
时间限制:1秒

样例:

输入:2*(5-2)+3
输出:2,5,2,-,*,3,+

表达式解法可以参考:表达式求值详解(C++)

设置一个,开始时,栈为空,然后从左到右扫描后缀表达式;

若遇运算中缀转后缀转换过程需要用到栈,具体过程如下:扫描字符串

(1)如果遇到操作数,因为顺序不变,我们就直接将其输出 。

(2)如果遇到操作符,当栈为空直接进栈,不为空,判断栈顶元素操作符优先级是否比当前操作符小,小的话直接把当前操作符进栈,不小的话栈顶元素出栈输出,直到栈顶元素操作符优先级比当前操作符小

(3)遇到左括号时我们也将其放入栈中。

(4)如果遇到一个右括号,则将栈元素弹出,将弹出的操作符输出直到遇到左括号为止。

左括号也要弹出

代码如下:

#include<iostream>
#include<queue>
#include<map>
#include<stack>
#include<cstring>
using namespace std;
char bds[1000];
bool a = true;
int main(){map<char,int> yxj;stack<char> s;yxj['*'] = 2;yxj['/'] = 2;yxj['+'] = 1;yxj['-'] = 1;yxj['('] = 0;cin>>bds;int i=0,len = strlen(bds);while(i<len) {if(bds[i]>='0'&&bds[i]<='9'){int sum=0;while(bds[i]>='0'&&bds[i]<='9'){sum=sum*10+bds[i]-'0';i++;}if(a){a = false;cout<<sum;}else cout<<','<<sum;}else if(bds[i] == '('){s.push(bds[i]);i++;}else if(bds[i] == ')') {while(s.top()!='('){cout<<","<<s.top();s.pop();}s.pop();i++;}else{while(s.size() && yxj[s.top()]>=yxj[bds[i]]){cout<<","<<s.top();s.pop();}s.push(bds[i]);i++;}}while (s.size()){cout<<","<<s.top();s.pop();}return 0;
}

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

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

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

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

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

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

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

  4. 将中缀表达式转化为后缀表达式

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

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

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

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

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

  7. 使用栈实现中缀表达式转换成后缀表达式并计算结果(逆波兰计算器)

    一.中缀表达式转换成后缀表达式 具体步骤如下: 1.初始化栈stack(暂时存放运算符)以及集合list(存放后缀表达式) 2.从左向右扫描中缀表达式 3.当前元素为数字时,直接添加到list中 4. ...

  8. 表达式转换成后缀表达式进行计算

    这是编译原理课上的一个实验,要将输入的表达式转换成后缀表达式,然后进行计算.当时写的程序有错误,改了两天,没有了错误,但还是有些表达式计算不出正确的结果,实在不想改了,等什么时候心情好了,再看看吧. ...

  9. 中缀表达式转换成后缀表达式

    中缀表达式就是我们正常工作中写的表达式,如 a+(b-c)*d ,编译系统将中缀表达式改写 abc-d*+,这种运算符在操作数后面称为后缀表达式(也称逆波兰表达式). 如何实现转换的呢?这里做一下自己 ...

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

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

最新文章

  1. Spark Streaming中的操作函数分析
  2. dnslog在mysql在linux_DNSlog实现Mysql注入
  3. HOG:从理论到OpenCV实践
  4. VRRP与VLAN实验(HuaWei)
  5. HD_1232畅通工程
  6. Fifth scrum meeting - 2015/10/30
  7. Git 的安装和创建版本库 。
  8. ASP.Net学习笔记013--ViewState初探2
  9. 聊聊Elasticsearch RestClient的RequestLogger
  10. 修改GDAL库支持IRSP6数据
  11. 大数据实战之环境搭建(三)
  12. 计算机系统操作工中级工试卷,计算机系统操作工中级理论试题及答案.doc
  13. 北京市丰台区卫星地图下载
  14. 基于Vue2和jsmind.js实现思维导图
  15. 工具 | CAN总线数据采集工具PCAN的使用教程
  16. java 九宫格数独_玩转数独之九宫数独进阶技巧
  17. 知道创宇云安全双十一「3-6折」大促攻略
  18. 用Python画一个“中国福”,送给想要祝福的人吧
  19. IGRP和EIGRP的无缝结合
  20. CPU当中的分支预测

热门文章

  1. 靠播放业务吃不饱?音乐流媒体纷纷“加电商”卖周边
  2. yii2分页的基本使用及其配置详解 1
  3. 使用Cargo入门rust语言
  4. linux 系统运维小工具
  5. ASP.NET 2.0 Page的执行顺序
  6. 专家观点:Docker 架构优缺点大剖析
  7. Java中的ReentrantLock和synchronized两种锁机制的对比
  8. 此男因为什么被送进医院?
  9. 怎样查看域名DNS服务器的相一些关信息
  10. 拦截mysql执行计划数据_MySQL执行计划详解