python前缀表达式求值_python数据结构与算法 11 后缀表达式求值
从本节开始,删除原版的英文,直接发译后的文稿。
后缀表达式求值
栈的最一个应用例子,计算一个后缀表达式的值。这个例子中仍然用栈的数据结构。不过,当扫描表达式的时候,这次是操作数压栈等待,不是转换算法中那样让操作符等待。另一条思路是,无论何时看到输入一个操作符,最近的两个操作数就是操作对象。
为了说清楚一点,考虑表达式4 5 6 * +。从左到右扫描时,首先得到4和5,不过此时,并不知道怎样处理这两个数,直到看到后面的操作符。所以要把这两个数先压栈,得到操作符以后再出栈。
这个例子中,下一个符号仍然是操作数,所以照旧压栈,并检查下一个。现在看到操作符*,这意味着最近两个操作数要用来做乘法。出栈两次,得到两个操作数并相乘(在本例中是结果是30)
这个计算结果要压回到栈内,并作为下一个操作符的对象。当最后一个操作符工作结束,栈内应该只有一个数值,出栈并作为计算结果返回。图10显示了这个求值过程中,栈内容的变化。
图11显示了一个稍微复杂的表达式求值过程。7 8 + 3 2 + /。这个例子中有两点要注意。第一,栈的大小,随着子表达式的计算过程而膨胀,收缩,再膨胀。第二,除法操作符要小心处理,因为后缀表达式的操作数顺序不变,但当两个操作数出栈时,顺序反了。因为除法不支持交换律,所以15/5与5/15不同,必须保证顺序没有交错。
算法假定后缀表达式是一系列被空格分隔的字符,操作符是* /+ -,操作数假定是一位整数。最终结果也是整数。
1
建立一个空栈,operandStack
2
字符串使用split转为列表
3
从左到右检索列表
如果是操作数,字符转为整数,压栈
如果是操作符,出栈两次。第一次出栈的是第二个操作数,第二次出栈的是第一个操作数。计算结果,并压回栈。
4
检索结束,出栈结果就是返回值。
完整的函数代码如下,其中的doMath是算法辅助函数,定义为两个操作数和一个操作符的计算。
from pythonds.basic.stack import Stack
def postfixEval(postfixExpr):
operandStack = Stack()
tokenList =postfixExpr.split()
for token in tokenList:
if token in"0123456789":
operandStack.push(int(token))
else:
operand2 =operandStack.pop()
operand1 =operandStack.pop()
result =doMath(token,operand1,operand2)
operandStack.push(result)
return operandStack.pop()
def doMath(op, op1, op2):
if op == "*":
return op1 * op2
elif op == "/":
return op1 / op2
elif op == "+":
return op1 + op2
else:
return op1 - op2
print(postfixEval(‘7 8 + 3 2 + /‘))
原文:http://blog.csdn.net/python2014/article/details/21342223
python前缀表达式求值_python数据结构与算法 11 后缀表达式求值相关推荐
- 有趣的数据结构算法10——后缀表达式(PRN)介绍及利用栈计算后缀表达式的结果
有趣的数据结构算法10--后缀表达式(PRN)介绍及利用栈计算后缀表达式的结果 解题思路 实现代码 GITHUB下载连接 在前一天已经利用栈完成2进制到8进制的转换.但是栈的应用方面还有很多,本次我将 ...
- Python实现相空间重构求关联维数——GP算法、自相关法求时间延迟tau、最近邻算法求嵌入维数m
Python实现相空间重构求关联维数--GP算法.自相关法求时间延迟tau.最近邻算法求嵌入维数m GP算法: 若有一维时间序列为{x1,x2,-,xn},对其进行相空间重构得到高维相空间的一系列向量 ...
- 中缀表达式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+ ...
- python 表达式求值数据结构_python 数据结构与算法
python 数据结构与算法 1 python常见数据结构性能 1.1 List 1.1.1 安索引取值和赋值 1.1.2 列表append和__add__() 1.1.3 使用timeit模块测试执 ...
- php表达式求值,PHP实现基于栈的后缀表达式求值功能
本文实例讲述了PHP实现基于栈的后缀表达式求值功能.分享给大家供大家参考,具体如下: 后缀表达式概述 后缀表达式,指的是不包含括号,运算符放在两个运算对象的后面,所有的计算按运算符出现的顺序,严格从左 ...
- python函数结构图_Python数据结构与算法之图结构(Graph)实例分析
本文实例讲述了Python数据结构与算法之图结构(Graph).分享给大家供大家参考,具体如下: 图结构(Graph)--算法学中最强大的框架之一.树结构只是图的一种特殊情况. 如果我们可将自己的工作 ...
- python程序结构有哪几种_Python数据结构与算法(几种排序)小结
Python数据结构与算法(几种排序) 数据结构与算法(Python) 冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺 ...
- python数据结构算法优势_Python数据结构与算法(一)----- 算法效率
一.引入 先来看一道题: 如果a+b+c=1000, 且a2+b2=c^2(a,b,c为自然数),如何求出所有a,b,c可能的组合? (1) 枚举法 import time start_time = ...
- python棋盘最短路径_Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例...
本文实例讲述了Python数据结构与算法之图的最短路径(Dijkstra算法).分享给大家供大家参考,具体如下: # coding:utf-8 # Dijkstra算法--通过边实现松弛 # 指定一个 ...
最新文章
- 为了智能驾驶,李彦宏要改造城市道路
- ORACLE 12C PDB部分功能测试
- Git 远程分支的pull与push
- finished with exit code -1073740791 (0xC0000409)
- 大部分人都会忽略的Python易错点总结
- Android零基础入门第24节:自定义View简单使用
- pywin32 获取窗口句柄_Excel VBA | 这个窗口居然关不掉
- 管壁式换热器cad图纸_民勤图纸管板加工加工
- squid安装和配置(centos6.5)
- OAuth: How and Why?
- 湖州市技师学院的计算机,湖州技师学院
- 多个图像直方图合并matlab,MATLAB图像处理之直方图匹配(图像合理增强)
- 《图书管理系统》需求分析
- 1317: PIPI的生日礼物
- 乌卡时代下,企业供应链管理体系的应对策略
- 高性能网站建设进阶指南:Web开发者性能优化最佳实践 pdf扫描版
- springboot+hutool批量生成二维码压缩导出
- 音频播放器—打开音频设备(扬声器)
- 添加Adobe PDF 打印机
- 扫描器可发现远程服务器,服务器扫描发现漏洞-可通过HTTP获取远端WWW服务信息...
热门文章
- .net通过一般处理程序模拟用户控件数据保持、Ispostback 【第二版将html与ashx文件分开】...
- 设计模式之四:适配器模式(Adapter Pattern)
- 需求分析师的工作重点
- iPhone手机获取uuid 安装测试app
- uniapp商城_【程序源代码】商城小程序
- python3怎么创建一个链表_怎么创建一个自己的微信公众号
- c语言设备管理系统实训答辩,C语言设计(力学实验设备管理系统)1答辩.doc
- rabbitmq python amqp user_python 与rabbitmq
- envi 文件 生成mat_JVM 内存分析工具 MAT 的深度讲解与实践——入门篇
- 发送结构化的网络消息