C++:后缀表达式】的更多相关文章

题目描述 将中缀表达式(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+-…
题目描述 所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级). 如:3*(5–2)+7对应的后缀表达式为:3.5.2.-*7.+@.’@’为表达式的结束符号.‘.’为操作数的结束符号. 输入输出格式 输入格式: 输入:后缀表达式 输出格式: 输出:表达式的值 输入输出样例 输入样例#1: 3.5.2.-*7.+@ 输出样例#1: 16 说明 字符串长度,1000内. 代码 #includ…
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语言基础的同学就可以编出这个程序啦.而后面两个问题都要用到一个数据结构——栈.实际上数据…