看了网上的中缀变后缀的python算法,感觉都没北大陈斌老师讲的好,最近又在解决密码学的问题,现在遇到算式里含有自变量没办法解决,害,python学的太菜也不知道咋解决。但觉得有必要和大家分享用栈来解决中缀转后缀的算法,就贴一下了哈,我也没做啥工作,就是注释会更详细点,昨天看了好久才明白呢。

from stack import Stackdef infixToPostfix(infixexpr):prec={}prec["*"]=3prec["/"]=3prec["+"]=2prec["-"]=2prec["("]=1opStack=Stack()#存操作符的栈postfixList=[]tokenList=infixexpr.split()#存达式的列表listfor token in tokenList:if token in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" or token in "0123456789":postfixList.append(token)elif token=='(':opStack.push(token)#左括号压入栈elif token==')':topToken=opStack.pop()#toptoken第一次出现  token=右括号,topToken存栈里删除的第一个元素 操作符那种while topToken !='(':######toptoken不是左括号,是操作符postfixList.append(topToken)#操作符加入表达式列表postfixlisttopToken=opStack.pop()#加入后再删除else:while (not opStack.isEmpty()) and (prec[opStack.peek()]>=prec[token]):#要是存操作符和括号的栈不空而且栈顶操作符优先级大于循环到的操作符优先级postfixList.append(opStack.pop())#后缀表达式先加入栈顶操作符opStack.push(token)#上述条件都不符合,操作符直接压入栈顶这是为了开始啦while not opStack.isEmpty():#存操作符和括号的栈不空postfixList.append(opStack.pop())#进入操作符并清空栈,这是最后的结尾啦return " ".join(postfixList)print(infixToPostfix("A * B + C * D"))
print("1")

大家python里一定记得缩进,昨天就一个while写错了导致看了好久检查出来。

使用栈结构实现中缀转后缀算法(python)相关推荐

  1. 栈应用:中缀转后缀,中缀转前缀

    中缀转后缀转换过程需要用到栈,具体过程如下: 从左到右扫描字符串 1)如果遇到操作数,我们就直接将其输出(输出我们用队列保存). 2)如果遇到操作符,当栈为空直接进栈,不为空,判断栈顶元素操作符优先级 ...

  2. C++栈的应用——中缀转后缀

    中缀表达式就是我们平时运算表达式,其特点是运算符总是处于两个运算对象之间.但是该表达式计算机处理起来较为麻烦,会将其转写成后缀表达式(具体如何通过后缀表达式求解见:C++栈的应用--后缀表达式求解), ...

  3. 用栈实现中缀转后缀(c++)

    用栈实现表达式中缀转后缀 栈的特点是先进后出,可以用来将中缀表达式转换成后缀表达式,在本程序中对表达式进行了限制,数字0-9,运算符只有±*/(),缩小了问题规模. 转换思路:将表达式输入,全部数据以 ...

  4. 中缀转后缀表达式并计算

    注:本博客是基于<数据结构>这门课,主要是为了自己考研,准备专业课 图解转自:中缀转后缀算法 中缀转后缀算法 中缀表达式转后缀表达式遵循以下原则: 遇到操作数,直接输出 当栈为空时,若遇到 ...

  5. C语言实现中缀转后缀并计算表达式结果

    文章目录 一.问题描述 二.AC代码 三.注意点 四.实现思路/代码解析 一.问题描述 [问题描述] 从标准输入中读入一个整数算术运算表达式,如5 - 1 * 2 * 3 + 12 / 2 / 2   ...

  6. C++ 中缀转后缀并求值

    ## 1.中缀转后缀算法思想 遍历字符串:一.若为数字1~9,进入后缀队列:二.若为左括号'(',进入符号栈:三.若为右括号')',将栈顶元素压入后缀队列,直到栈顶为'(':四.若为'+','-',当 ...

  7. 中缀转后缀表达式、逆波兰表达式、leetcode224、227

    中缀转后缀表达式python leetcode224.227 class Solution:def calculate(self, s): # 中缀转后缀def evalRPN(tokens):sta ...

  8. Java数据结构和算法(六)——前缀、中缀、后缀表达式

    前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆序,匹配关键字符等等,那它还有别的什么功能吗 ...

  9. 栈应用(中缀表达式转后缀表达式并计算后缀表达式的值)

    [0]README 0.1) 本文旨在总结 中缀表达式转后缀表达式并计算后缀表达式的值 的步骤,并给出源代码实现: 0.2) 本文中涉及到的源代码均为原创,是对中缀转后缀和计算后缀的简单实现,(旨在理 ...

最新文章

  1. Jmeter之Bean shell使用(一)
  2. python工程师百度百科-国家认证的Python工程师有什么能力要求?
  3. CSS3 transform
  4. CSS背景颜色转换(自动生成IE8以下的filter,兼容IE9)
  5. uboot,eboot和bootloader的联系
  6. 第五十四期:MongoDB与MySQL:如何选择
  7. 半监督学习【机器学习】
  8. php腾讯云+视频上传失败,腾讯云视频上传和播放尝试总结
  9. mysql uroot p 报错,MySQL链接错误集。
  10. Oracle学习笔记:手工注册oracle的oledb驱动
  11. 用python写个小游戏难吗_小伙用Python制做一个小游戏,结果6秒就结束,怎么难玩?...
  12. java中布尔类型的常量有哪两种,【填空题】Java中布尔型的常量有两种,它们是___和___。...
  13. 焊接工时简便计算工具_焊接工时计算表
  14. 电工电子技术基础----multisim7使用及实验过程
  15. python金融数据缺失处理_机器学习之Python数据缺失处理
  16. 【面经】TP-LINK 图像算法工程师(提前批)
  17. MOGRT动态图标模板 爱情元素手绘爱心特效pr视频模板
  18. 图形算法:圆形生成算法
  19. w10启动无法修复此计算机,Win10启动修复无法修复你的电脑解决方法
  20. BIOS知识枝桠—— Library

热门文章

  1. linux中find命令列举,Linux中常见find命令的使用
  2. 实景三维系列4 | 为什么需要单体化
  3. Spring Boot Security
  4. Rider首个发布候选版加入了性能提升特性
  5. JQuery添加扩展方法(理解$.extend(),与$.fn.extend()方法区别)
  6. CSS3新的鼠标样式介绍
  7. 影响软件开发的两个关键性的问题
  8. Matlab中Ksdensity()函数的用途 (2011-04-02 16:55:17)
  9. Opencv-Python部署SIFT函数问题的处理
  10. Win系统复制粘贴失效解决办法