参考《大话数据结构》一书4.9节,Python下基于栈和逆波兰算法实现四则运算。

  1. 栈的实现使用顺序结构,即基于列表实现,参考本人博客Python实现顺序结构栈Sequence Stack
  2. 中缀转换后缀采用逆波兰算法,参考本人博客Python利用栈将中缀表达式转换为后缀表达式(四则运算)。

计算代码如下所示(transform函数见上述 2.Python利用栈将中缀表达式转换为后缀表达式(四则运算)):

def arithmetic(expression):signs = '+-*/'symbol = SeqStack(size=20)expression = expression.split(' ')  # 将后缀表达式分隔为数字和符号for ch in expression:if ch not in signs:symbol.push(ch)else:b = symbol.pop()  # 首先弹出的是符号右侧的数a = symbol.pop()c = eval(a + ch + b)  # eval用于计算字符串中的表达式symbol.push(str(c))return symbol.pop()def main():infix = '1+((2+3)*4)-5'infix = '42+21*2-(5-3)*4/2'suffix = transform(infix)print(suffix)print(arithmetic(suffix))if __name__ == '__main__':main()

Python下基于栈和逆波兰算法实现四则运算相关推荐

  1. C语言栈实现逆波兰算法

    逆波兰式也叫后缀表达式(将运算符写在操作数之后) 如:我们平时写a+b,这是中缀表达式,写成后缀表达式就是:ab+ 先说明一下里面用到的基础 1.atof() 把字符串指针转化为浮点数 2.getch ...

  2. java实现逆波兰算法,基于逆波兰算法实现计算器(Java控制台版)

    前言 计算器是日常生活中很常见的工具之一,但并不意味着计算器的软件实现原理就很简单.不少初学的小伙伴在尝试开发计算器的功能时,受到算术表达式中运算符优先级和多层嵌套等问题的困扰.本文采用逆波兰算法来实 ...

  3. 逆波兰算法(后缀表达式)

    逆波兰式 即我们平时所说的后缀表达式(将运算符写在操作数之后) 实现逆波兰式的算法,难度并不大,但为什么要将看似简单的中序表达式转换为复杂的逆波兰式?原因就在于这个简单是相对人类的思维结构来说的,对计 ...

  4. java实现逆波兰算法,【算法】逆波兰算法实现原理

    逆波兰算法介绍 假定给定一个只 包含 加.减.乘.除,和括号的算术表达式,你怎么编写程序计算出其结果. 问题是:在表达式中,括号,以及括号的多层嵌套 的使用,运算符的优先级不同等因素,使得一个算术表达 ...

  5. java中缀表达式转后缀表达式(逆波兰算法)

    四则运算是栈的重要应用之一 中缀表达式转后缀表达式(逆波兰算法)过程 从左到右遍历中缀表达式 数字直接输出为后缀表达式一部分 如果是符号,则判断与栈顶元素的优先级 高于栈顶元素优先级直接入栈 低于或等 ...

  6. 关于逆波兰算法进行公式单位的推导

    关于逆波兰算法的链接如下逆波兰算法 原理:将一个长表达式转化为2个数字之间的运算. 需求:利用逆波兰算法,推导出一个字母长表达式的单位 import java.util.ArrayList; impo ...

  7. 数据结构:栈实现逆波兰计算器

    栈实现逆波兰计算器 前言 上篇博文中已经介绍了栈实现中缀表达式计算器,中缀表达式形如 "1+((2+3)*4)-5" 对人比较容易计算,但对于计算机却是一件比较困难的事,而后缀表达 ...

  8. 栈应用-逆波兰表达式(CPP实现简单易懂图解)

    栈应用-逆波兰表达式(后缀表达式) 逆波兰表达式定义: 在由运算符(operator)和操作数(operand)组成的表达式中不使用括号(parenthesis-free)即可表示带优先级的运算关系 ...

  9. 数据结构 - 栈 (逆波兰计算器)(栈的三种表达式)(前缀、中缀和后缀表达式,后缀也叫逆波兰表达式)(中缀表达式转后缀表达式实现步骤及完整代码)

    栈的三种表达式:前缀.中缀和后缀表达式,后缀也叫逆波兰表达式 前缀(波兰表达式) 中缀(对人来讲很好理解,对于计算机来讲就方便了,一般会把中缀表达式转换成后缀表达式) 后缀(逆波兰表达式) 计算过程 ...

最新文章

  1. 桌面时钟代码_iOS 14 制作自己的桌面 Widget
  2. Windows Phone 7项目实战之记事本(二)
  3. python有道自动翻译_利用python写一个有道翻译的脚本
  4. 前端学习(2571):为什么使用vuex
  5. python 计算小于某个数_python 列表寻找满足某个条件的开始索引和结束索引、区间范围...
  6. python学习笔记(二十七)多线程与多进程
  7. WPF 弹框 并自动关闭
  8. QA:golang redis协议同时写入报错
  9. php下载安装教程,PHP下载安装教程
  10. 怎么让联想计算机升级,如何刷bios,教您联想电脑如何刷bios
  11. 学习Hibernate框架笔记-第1天
  12. 怎么看电脑的hdmi是输出还是输入_笔记本hdmi接口是输入还是输出
  13. Python脚本教程、问题与解决方案的文章汇总索引目录
  14. Java HotSpot(TM) 64-Bit Server VM warning: CodeCache is full. Compiler has been disabled
  15. Python pgm解析和格式转换
  16. 2030年,程序员工资还能达到现在的水平吗?
  17. js动态生成echarts图表,并生成图片保存到本地,自定义图片名。
  18. HDOJ--1000A + B Problem
  19. 使用qqbot,群发好友消息以及打广告
  20. 南京VI设计,企业VI设计,视觉VI识别系统塑造出独特的企业形象

热门文章

  1. 移动开发已进入 App 工厂时代!
  2. 7大细节预示你面试成功
  3. 清纯温馨的“伴你高飞”
  4. MySQL行列转置方法
  5. Linux的时间修改并永久生效
  6. java计算机毕业设计血库系统源码+系统+lw+数据库+调试运行
  7. python语言程序设计基础程序练习题-制作英文学习词典
  8. 算法 PK 猫咪 | 章鱼保罗后继竟然是只猫? 1
  9. 关系数据库SQL之高级数据查询:去重复、组合查询、连接查询、虚拟表
  10. 信号与系统 Matlab 时域抽样与频域抽样