四则表达式求值—中缀表达式先转变成后缀表达式再求值python实现
文章目录
- 1.中缀表达式转变成后缀表达式
- 2.后缀表达式计算
1.中缀表达式转变成后缀表达式
参考python【栈】中缀表达式转后缀表达式
思路:
代码实现:
# 中缀表达式转为后缀表达式
def infixToPostfix(infixexpr):prec = {} # 定义一个字典,保存优先级prec["*"] = 3prec["/"] = 3prec["+"] = 2prec["-"] = 2prec["("] = 1opStack = Stack() # 栈是用来存括号和运算符的postfixList = [] # 保存要输出的后缀表达式tokenList = infixexpr.split() # 把中缀表达式转换成列表for token in tokenList:if token in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" or token in "0123456789":postfixList.append(token)elif token == '(': # 如果是左括号,就压入栈opStack.push(token)elif token == ')': # 遇到右括号,循环判断栈顶元素是否为(,如果不是(,就都加到后缀列表中topToken = opStack.pop()while topToken != '(':postfixList.append(topToken)topToken = opStack.pop()print(opStack.isEmpty()) # True False Falseelse: # 如果是运算符,当栈不为空并且栈顶元素的等级比token的等级高时,栈顶元素加入到后缀列表中while (not opStack.isEmpty()) and (prec[opStack.peek()] >= prec[token]):postfixList.append(opStack.pop())opStack.push(token) # 把token压入栈while not opStack.isEmpty(): # 当opStack中不为空时,依次弹出栈中的元素,加到后缀列表后面postfixList.append(opStack.pop())return ''.join(postfixList)print(infixToPostfix("A * B + C * D"))
print(infixToPostfix("( A + B ) * C - ( D - E ) * ( F + G )"))
2.后缀表达式计算
思路:
后缀表达式中,如果碰到数字就进栈。如果碰到符号[’+’,’-’,’*’,’/’],就弹出两个数字,做符号运算,再进栈
#四则运算表达式
class Solution:def evalRPN(self, tokens):""":type tokens: List[str]:rtype: int"""stack = []for s in tokens:if s in ['+','-','*','/']:b = stack.pop()a = stack.pop()if s == '+':stack.append(a+b)elif s == '-':stack.append(a-b)elif s == '*':stack.append(a*b)else:stack.append(int(a/b))else:stack.append(int(s))ans = int(stack.pop())return ans
如果对您有帮助,麻烦点赞关注,这真的对我很重要!!!如果需要互关,请评论或者私信!
四则表达式求值—中缀表达式先转变成后缀表达式再求值python实现相关推荐
- [数据结构考前必看]中缀表达式转化成后缀表达式_例题超多+分步骤讲解+带你手算
中缀.后缀表达式定义 中缀表达式又称波兰式,有利于人们阅读与表达. 后缀表达式又称逆波兰式,有利于机器进行运算. 例题1: 中缀表达式:(a+b+c*d) /e 首先让我们来看一下运算符对应的优先级, ...
- 中缀表达式转换成后缀表达式
中缀表达式就是我们正常工作中写的表达式,如 a+(b-c)*d ,编译系统将中缀表达式改写 abc-d*+,这种运算符在操作数后面称为后缀表达式(也称逆波兰表达式). 如何实现转换的呢?这里做一下自己 ...
- c语言表达式的后缀,中缀表达式转换成后缀表达式C语言程序(一)
逆波兰表达式(Reverse Polish Notation)又叫后缀表达式.它是一种非常的表达式,可以将复杂的表达式转换成可以依靠简单的操作得到结果的表达.下面这段C语言即是用于实现将中缀表达式转换 ...
- NYOJ 257 中缀表达式表示成后缀表达式
话说这道题代码那个丑陋啊,,写出来我自己都不想再看第二遍啊...看了看聪神的代码,还消耗我3个NYOJ币啊,,更扯得是,聪神的代码我看不懂啊,,,,卧槽...这道题不再多说了,数据结构上有详细的介绍, ...
- 中缀表达式X=A+B*(C-(D+F))/E转后缀表达式之后是什么?
中缀表达式X=A+B*(C-(D+F))/E转后缀表达式之后是什么? ABCDF+-*E/+ ABDF+C-*E/+ ABDF+C*-E/+ ABDF+C*-E+/ 正确答案:A A+B*(C-(D+ ...
- 使用栈实现中缀表达式转换成后缀表达式并计算结果(逆波兰计算器)
一.中缀表达式转换成后缀表达式 具体步骤如下: 1.初始化栈stack(暂时存放运算符)以及集合list(存放后缀表达式) 2.从左向右扫描中缀表达式 3.当前元素为数字时,直接添加到list中 4. ...
- 表达式转换成后缀表达式进行计算
这是编译原理课上的一个实验,要将输入的表达式转换成后缀表达式,然后进行计算.当时写的程序有错误,改了两天,没有了错误,但还是有些表达式计算不出正确的结果,实在不想改了,等什么时候心情好了,再看看吧. ...
- python前缀表达式求值_python数据结构与算法 11 后缀表达式求值
从本节开始,删除原版的英文,直接发译后的文稿. 后缀表达式求值 栈的最一个应用例子,计算一个后缀表达式的值.这个例子中仍然用栈的数据结构.不过,当扫描表达式的时候,这次是操作数压栈等待,不是转换算法中 ...
- php表达式求值,PHP实现基于栈的后缀表达式求值功能
本文实例讲述了PHP实现基于栈的后缀表达式求值功能.分享给大家供大家参考,具体如下: 后缀表达式概述 后缀表达式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左 ...
- 万能计算器——中缀表达式转换成后缀表达式(C++实现)【可以计算小数和负数】
核心代码与思路: int GetExprValue(vector<string> srcVec) //根据后缀表达式求值 {stack<int> temp;char op = ...
最新文章
- 前序中序后序遍历的顺序
- python中将已有链接的视频进行下载
- 计算机辅助药物设计局限,计算机辅助药物设计高效低耗
- LOJ-10096(强连通+bfs)
- JAVA常用的数据结构集合框架总结
- 信息学奥赛一本通(1057:简单计算器)
- 买mac电脑的各个使用阶段:
- 当自己颓废的时候怎么激励自己?
- 玩转树莓派-2.配置你的树莓派
- 6.Shell 编程从入门到精通 --- 文件和文件系统
- EMOS嵌入式仿真平台-编程环境v101
- r语言结构方程模型可视化_模型一个结构方程模型(SEM)的简单实验
- 20165219王彦博第一周学习总结
- Win10GodMode上帝模式
- 音频降噪的软件有哪些?快来看看这些软件
- Spark入门实战系列--5.Hive(上)--Hive介绍及部署
- 京东案例开发之居家优品
- python爬虫——selenium
- 公共英语试题计算机,会计学公共课试题 计算机、英语 政治.doc
- 济南国家超级计算机中心是学校吗,国家超级计算济南中心