P1449 后缀表达式】的更多相关文章

目录 题目 思路 \(Code\) 题目 P1449 后缀表达式 思路 栈.题目说的不是很清楚,没说包含什么操作.除法用整数除法就行. 先string读入字符串,然后从前往后看如果是个数字就入栈,如果是运算符就从栈里弹出两个数计算再入栈. \(Code\) #include<iostream> #include<cstring> #include<cstdio> #include<string> #include<stack> #include&…
P1449 后缀表达式 分析: 简单的模拟题. 熟练容器stack的话很容易解决. stack,栈,有先进后出的特性. 比如你有一个箱子,你每放进第一个数时,就往箱底放,放第二个数时就在第一个数的上面放,而这两个数取出时,先取出第二个数,才能取出第一个数. 详细请看代码 #include<iostream> #include<cstdio> #include<stack> // 头文件 using namespace std; char c; stack<int&…
题目链接:P1449 后缀表达式 题目描述: 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级). 如:3(5–2)+7对应的后缀表达式为:3.5.2.-7.+@.'@'为表达式的结束符号.'.'为操作数的结束符号. 输入格式:输入:后缀表达式 输出格式:输出:表达式的值 输入输出样例: 输入 #1 3.5.2.-*7.+@ 输出 #1 16 分析: 栈的一大用处是表达式的计算.本题要求…
稍微看了看刘汝佳的白皮书,“实用主义”的STL实在是香到我了,而且在实验室大佬的推荐下我开始了stl的学习. 每篇附带一个题目方便理解,那行,直接开始. 毕竟是实用主义,所以就按照给的题目的例子来理解需要用到的函数,算法题目里用的多的函数也会拿出来晒一晒,其他就无所谓啦. 栈(stack) push.pop.size.empty push 入栈一个元素 pop 出栈一个元素,pop无返回值 top 取栈顶元素 size 查看元素个数 empty() 当队列为空时,返回true (来一张直观的图)…
[题目链接] https://www.luogu.org/problem/P1449 [题目描述] 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级). 如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@.’@’为表达式的结束符号.‘.’为操作数的结束符号. 输入格式 输入:后缀表达式 输出格式 输出:表达式的值 输入输出样例 输入 #1 3.5.2.-*7.+@ 输出…
题目链接:https://www.luogu.org/problem/P1449 这道题目我们只需要开一个栈,每次读取到一个数的话就将这个数 push 进栈. 因为提供给我们的时候已经是一个后续序列了,所以能保证每次遇到一个符号的时候栈中至少有2个元素. 我们先从栈中取出一个元素,设为 \(a\) :再从栈中取出一个元素,设为 \(b\) .那么,对于符号来说: 如果它是 + ,那么将 \(b+a\) 的结果 push 进栈: 如果它是 - ,那么将 \(b-a\) 的结果 push 进栈: 如…
题目描述 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级). 如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@.’@’为表达式的结束符号.‘.’为操作数的结束符号. 输入输出格式 输入格式: 输入:后缀表达式 输出格式: 输出:表达式的值 输入输出样例 输入样例#1: 3.5.2.-*7.+@ 输出样例#1: 16 说明 字符串长度,1000内. 代码 #includ…
题目描述 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级). 如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@.’@’为表达式的结束符号.‘.’为操作数的结束符号. 输入输出格式 输入格式: 输入:后缀表达式 输出格式: 输出:表达式的值 输入输出样例 输入样例#1: 3.5.2.-*7.+@ 输出样例#1: 16 说明 字符串长度,1000内. 栈. 还是我太年轻.…
题目描述 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级). 如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@.’@’为表达式的结束符号.‘.’为操作数的结束符号. 输入输出格式 输入格式: 输入:后缀表达式 输出格式: 输出:表达式的值 输入输出样例 输入样例#1: 复制 3.5.2.-*7.+@ 输出样例#1: 复制 16 说明 字符串长度,1000内. //打基…
题目描述 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级). 如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@.’@’为表达式的结束符号.‘.’为操作数的结束符号. 输入输出格式 输入格式: 输入:后缀表达式 输出格式: 输出:表达式的值 输入输出样例 输入样例#1: 3.5.2.-*7.+@ 输出样例#1: 16 说明 字符串长度,1000内. 思路: 如题目所述,…
题目描述 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级). 如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@.'@'为表达式的结束符号.'.'为操作数的结束符号. 输入输出格式 输入格式: 输入:后缀表达式 输出格式: 输出:表达式的值 输入输出样例 输入样例#1: 3.5.2.-*7.+@ 输出样例#1: 16 说明 字符串长度,1000内. 只要用STL sta…
题目描述 将中缀表达式(infix expression)转换为后缀表达式(postfix expression).假设中缀表达式中的操作数均以单个英文字母表示,且其中只包含左括号'(',右括号‘)’和双目算术操作符+,-,*,/. 输入格式 第一行是测试样例个数n.以下n行,每行是表示中缀表达式的一个字符串(其中只包含操作数和操作符和左右括号,不包含任何其他字符),长度不超过100个字符. 输出格式 为每一个测试样例单独一行输出对应后缀表达式字符串(其中只包含操作数和操作符,不包含任何其他字符…
#!/usr/bin/env python # -*- coding: utf-8 -*- # learn <<Problem Solving with Algorithms and Data Structures>> # Release 3.0 # chengang882 @ 2016-12-20 # 它可以将常见的中缀表达式转换成后缀表达式,并计算这个表达示的值 # Completed implementation of a stack ADT #数据结构 class Stac…
1.利用栈(Stack)来存储操作数和操作符: 2.包含中缀表达式转后缀表达式的函数,这个是难点,也是关键点: 2.1.将输入字符串转为数组: 2.2.对转换来的字符进行遍历:创建一个数组,用来给存储转换为后缀表达式的字符:创建一个栈,用来存储操作符: 2.3.通过正则来过滤,为数字的则放在数组中,其他的则放在栈中: 2.4.接下来是最麻烦的操作符判断,我做的这个比较简单,如果再复杂些,我这个可能还要进行扩展或优化: 2.5.对操作符的判断按照其优先级来,首先是括号,有'(',直接压人,等到有'…
中缀表达式:就是我通常用的算术或逻辑公式: 后缀表达式:不包含括号,运算符放在两个运算对象后面,所有的计算按运算符出现的顺序,严格从左向右进行,不用考虑运算符优先级: 如,(2+1)*3 转换后,2 1 + 3 * 1.人工实现转换 如中缀表达式:a+b*c-(d+e) (1).按照运算符优先级对所有运算单位加括号,式子变成:((a+(b*c))-(d+e)) (2).把运算符号移动到对应括号后面,变成:((a(bc)*)+(de)+)- (3).把括号去掉就变成后缀表达式了:abc*+de+-…
1.堆栈-Stack 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除操作. 堆栈中允许进行插入和删除操作的一端称为栈顶,另一端称为栈底.堆栈的插入和删除操作通常称为进栈或入栈,堆栈的删除操作通常称为出栈或退栈. Java中已经出了Stack的具体实现类 堆栈的数据集合可以表示为a0,a1,-,an-1,每个数据元素的数据类型可以是任意的类类型. 操作集合 (1)入栈…
本文主要内容: 表达式的三种形式 中缀表达式与后缀表达式转换算法 一.表达式的三种形式: 中缀表达式:运算符放在两个运算对象中间,如:(2+1)*3.我们从小做数学题时,一直使用的就是中缀表达式. 后缀表达式:不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左向右进行(不再考虑运算符的优先规则),如:2 1 + 3 *.又比如3+(6-4/2)*5=23的后缀表达式为:3642/-5*+# (#符号为结束符) 前缀表达式:同后缀表达式一样,不包含括号,运算符放在两个…
1.概念 你可能听说过表达式,a+b,a+b*c这些,但是前缀表达式,前缀记法,中缀表达式,波兰式,后缀表达式,后缀记法,逆波兰式这些都是也是表达式. a+b,a+b*c这些看上去比较正常的是中缀表达式,就是运算符放在两个操作数之间.前缀表达式是将运算符放在相关操作数之前,后缀表达式是将运算符放在操作数之后. 至于前面说的那些概念: 前缀表达式就是波兰式就是前缀记法 后缀表达式就是逆波兰式就是后缀记法 举例如下: (3+4)*5-6就是中缀表达式 -*+3456就是前缀表达式 34+5*6-就是…
/** * 中缀表达式转换成后缀表达式: 从输入(中缀表达式)中读取的字符,规则: 操作数: 写至输出 左括号: 推其入栈 右括号: 栈非空时重复以下步骤--> * 若项不为(,则写至输出: 若项为(,则推出循环 operator(opThis): 若栈为空,推opThis: 否则,重复--> * 弹出一项,若项为(,推其入栈: 若项为operator,且 若opTop<opThis,推入opTop,或 若opTop>=opThis,输出opTop, * 若opTop<opT…
这里要学的程序主要用来实现一个功能——输入表达式输出结果,也就是一个计算器.效果如下: 这个程序主要有两个步骤:1.把中缀表达式转换为后缀表达式:2.计算后缀表达式的结果. 首先先明白几个问题: 1.为什么要转换为后缀表达式?因为后缀表达式容易实现计算机计算结果.(可以百度一下后缀表达式,又称逆波兰式) 2.怎么把中缀表达式转换为后缀表达式? 3.怎么用后缀表达式输出结果? 相信如果弄明白了上面几个问题,有C语言基础的同学就可以编出这个程序啦.而后面两个问题都要用到一个数据结构——栈.实际上数据…