文章目录

  • 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. [数据结构考前必看]中缀表达式转化成后缀表达式_例题超多+分步骤讲解+带你手算

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

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

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

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

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

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

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

  5. 中缀表达式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+ ...

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

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

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

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

  8. python前缀表达式求值_python数据结构与算法 11 后缀表达式求值

    从本节开始,删除原版的英文,直接发译后的文稿. 后缀表达式求值 栈的最一个应用例子,计算一个后缀表达式的值.这个例子中仍然用栈的数据结构.不过,当扫描表达式的时候,这次是操作数压栈等待,不是转换算法中 ...

  9. php表达式求值,PHP实现基于栈的后缀表达式求值功能

    本文实例讲述了PHP实现基于栈的后缀表达式求值功能.分享给大家供大家参考,具体如下: 后缀表达式概述 后缀表达式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左 ...

  10. 万能计算器——中缀表达式转换成后缀表达式(C++实现)【可以计算小数和负数】

    核心代码与思路: int GetExprValue(vector<string> srcVec) //根据后缀表达式求值 {stack<int> temp;char op = ...

最新文章

  1. 前序中序后序遍历的顺序
  2. python中将已有链接的视频进行下载
  3. 计算机辅助药物设计局限,计算机辅助药物设计高效低耗
  4. LOJ-10096(强连通+bfs)
  5. JAVA常用的数据结构集合框架总结
  6. 信息学奥赛一本通(1057:简单计算器)
  7. 买mac电脑的各个使用阶段:
  8. 当自己颓废的时候怎么激励自己?
  9. 玩转树莓派-2.配置你的树莓派
  10. 6.Shell 编程从入门到精通 --- 文件和文件系统
  11. EMOS嵌入式仿真平台-编程环境v101
  12. r语言结构方程模型可视化_模型一个结构方程模型(SEM)的简单实验
  13. 20165219王彦博第一周学习总结
  14. Win10GodMode上帝模式
  15. 音频降噪的软件有哪些?快来看看这些软件
  16. Spark入门实战系列--5.Hive(上)--Hive介绍及部署
  17. 京东案例开发之居家优品
  18. python爬虫——selenium
  19. 公共英语试题计算机,会计学公共课试题 计算机、英语 政治.doc
  20. 济南国家超级计算机中心是学校吗,国家超级计算济南中心

热门文章

  1. --allow-file-access-from-files 命令的使用
  2. fullCalendar:中文API
  3. 213. Orchard学习 二 3、001.IOrchardHost 与Autofac
  4. rest-framework框架的基本组件
  5. Tensorflow Python3 做神经网络(视频教程)
  6. JS按字节截取字符长度实例
  7. VS2010中查询替换使用
  8. 饥饿的时候我想起的小食
  9. qstring转string
  10. windwo下载完nvm无法执行node