中缀表达式转化成后缀表达式
题目描述:
给定一个中缀表达式,请将其转化为后缀表达式
输入格式:
只有一行数据,中缀表达式的字符串,含有正整数,操作符号:+,-,*,/,(,)。
输出格式:
后缀表达式,每个操作数和操作符后面请输入一个“,”作为分割
限制:
空间限制: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: 中缀表达式:(a+b+c*d) /e 首先让我们来看一下运算符对应的优先级, ...
- 利用栈将中缀表达式转化成后缀表达式
目的:将中缀表达式(即标准形式的表达式)转换为后缀式. 例子:a+b*c+(d*e+f)*g转换成abc*+de*f+g*+ 转换原则 1. 遇到操作数, 直接输出 2. 操作符的优先级为 () 最大 ...
- c语言表达式的后缀,中缀表达式转换成后缀表达式C语言程序(一)
逆波兰表达式(Reverse Polish Notation)又叫后缀表达式.它是一种非常的表达式,可以将复杂的表达式转换成可以依靠简单的操作得到结果的表达.下面这段C语言即是用于实现将中缀表达式转换 ...
- 将中缀表达式转化为后缀表达式
我们把平时所用的标准四则运算表达式,即"9+(3-1)*3+10/2"叫做中缀表达式.因为所有的运算符号都在两数字的中间,现在我们的问题就是中缀到后缀的转化. 中缀表达式" ...
- NYOJ 257 中缀表达式表示成后缀表达式
话说这道题代码那个丑陋啊,,写出来我自己都不想再看第二遍啊...看了看聪神的代码,还消耗我3个NYOJ币啊,,更扯得是,聪神的代码我看不懂啊,,,,卧槽...这道题不再多说了,数据结构上有详细的介绍, ...
- 2015中缀表达式转化为后缀表达式(C++,附思路,注释多)
这篇文章默认你已经知道转换的原理了,所以就不介绍如何转换了~如果不知道的话可以看这两篇文章,写得很好,可以看懂~ 详解如何将中缀表达式转化为后缀表达式_Dacyuan的学习笔记-CSDN博客_中缀算式 ...
- 使用栈实现中缀表达式转换成后缀表达式并计算结果(逆波兰计算器)
一.中缀表达式转换成后缀表达式 具体步骤如下: 1.初始化栈stack(暂时存放运算符)以及集合list(存放后缀表达式) 2.从左向右扫描中缀表达式 3.当前元素为数字时,直接添加到list中 4. ...
- 表达式转换成后缀表达式进行计算
这是编译原理课上的一个实验,要将输入的表达式转换成后缀表达式,然后进行计算.当时写的程序有错误,改了两天,没有了错误,但还是有些表达式计算不出正确的结果,实在不想改了,等什么时候心情好了,再看看吧. ...
- 中缀表达式转换成后缀表达式
中缀表达式就是我们正常工作中写的表达式,如 a+(b-c)*d ,编译系统将中缀表达式改写 abc-d*+,这种运算符在操作数后面称为后缀表达式(也称逆波兰表达式). 如何实现转换的呢?这里做一下自己 ...
- 中缀表达式转化为后缀表达式
一.从应对考试角度来(在最快的时间内得出最准确的答案) 首先我们应该知道,要想将中缀转化为后缀,需要借助堆栈实现.(不准备画图了,画图有点浪费时间)我会用最简单明了的语言使读者弄懂.[举个例子吧:比如 ...
最新文章
- Spark Streaming中的操作函数分析
- dnslog在mysql在linux_DNSlog实现Mysql注入
- HOG:从理论到OpenCV实践
- VRRP与VLAN实验(HuaWei)
- HD_1232畅通工程
- Fifth scrum meeting - 2015/10/30
- Git 的安装和创建版本库 。
- ASP.Net学习笔记013--ViewState初探2
- 聊聊Elasticsearch RestClient的RequestLogger
- 修改GDAL库支持IRSP6数据
- 大数据实战之环境搭建(三)
- 计算机系统操作工中级工试卷,计算机系统操作工中级理论试题及答案.doc
- 北京市丰台区卫星地图下载
- 基于Vue2和jsmind.js实现思维导图
- 工具 | CAN总线数据采集工具PCAN的使用教程
- java 九宫格数独_玩转数独之九宫数独进阶技巧
- 知道创宇云安全双十一「3-6折」大促攻略
- 用Python画一个“中国福”,送给想要祝福的人吧
- IGRP和EIGRP的无缝结合
- CPU当中的分支预测