栈应用之 后缀表达式计算 (python 版)

后缀表达式特别适合计算机处理

1.  中缀表达式、前缀表达式、后缀表达式区别

中缀表达式:(3 - 5) * (6 + 17 * 4) / 3 17 * 4 + 6

前缀表达式:/ * - 3 5 + 6 * 17 4 3 * 17 4 + 6

后缀表达式:3 5 - 6 17 4 * + * 3 / 17 4 * 6 +

2. 算法核心

假定 st 是一个栈 (栈的特点:后进先出 LIFO)

比如 【3 / 5】 即 【3 5 / 】;

3 先压入栈,而后 5 出栈;

元素在栈里面的顺序应该是 【5,3】;

5 先出栈,而后 3 出栈。

所以第二个运算对象先出栈,第一个运算对象后出栈。

# 扩充栈的方法 计算栈元素个数

class ESStack(SStack):

"""docstring for ESS"""

def depth(self):

return len(self._elems)

def auf_exp_evaluator(exp):

operatora = '+-*/'

st = ESStack() # 扩充功能的栈,可用depth()检查元素个数

for x in exp:

if x not in operatora:

st.push(flaot(x))

continue # 跳过本次for循环

if st.depth() < 2 :

raise SyntaxError{"Short of operand(s)"}

a = st.pop() # 取出第二个运算对象

b = st.pop() # 取出第一个运算对象

if x == "+" :

c = b + a

elif x == "-":

c = b - a

elif x == "*" :

c = b * a

elif x == "/" : # 这里可能引发异常 ZeroDivisionError

c = b / a

else :

break # 这一步不可能出现,只是为了方便看、理解

st.push(c) # 将本次运算结果压入栈

if st.depth() == 1 # 如果栈里面只有一个元素,表示计算完成

return st.pop()

raise SyntaxError{"Extra operand(s) ."}

《java数据结构与算法》笔记-CH4-8栈结构实现后缀表达式计算结果

/** * 中缀表达式转换成后缀表达式: 从输入(中缀表达式)中读取的字符,规则: 操作数: 写至输出 左括号: 推其入栈 右括号: 栈非空时重复以下步骤--> * 若项不为(,则写至输出: 若 ...

中缀表达式转换为后缀表达式(python实现)

中缀表示式转换为后缀表达式 需要一个存放操作符的栈op_stack,输出结果的列表output 步骤: 从左到右遍历表达式: 1. 若是数字,直接加入到output 2. 若是操作符,比较该操作符和o ...

数据结构:基于list实现二元表达式(python版)

#!/usr/bin/env python # -*- coding:utf-8 -*- def make_sum(a, b): return ['+', a, b] def make_prod(a, ...

中缀表达式转后缀表达式(Python实现)

中缀表达式转后缀表达式 中缀表达式转后缀表达式的规则: 1.遇到操作数,直接输出: 2.栈为空时,遇到运算符,入栈: 3.遇到左括号,将其入栈: 4.遇到右括号,执行出栈操作,并将出栈的元素输出,直到 ...

LeetCode&lowbar;p150&lowbar;逆波兰表达式计算&sol;后缀表达式计算

有效的运算符包括 +, -, *, / .每个运算对象可以是整数,也可以是另一个逆波兰表达式. 说明: 整数除法只保留整数部分. 给定逆波兰表达式总是有效的.换句话说,表达式总会得出有效数值且不存在除 ...

北京地铁月度消费总金额计算&lpar;Python版&rpar;

最近业余时间在学习Python,这是那天坐地铁时突发奇想,想看看我这一个月的地铁费共多少钱,所以简单的构思了下思路,就直接开写了,没想到用Python来实现还挺简单的. 设计思路: 每次乘车正常消费7 ...

栈应用之中缀表达式计算 MFC实现&lpar;计算器核心&rpar;

大家好,我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang 支持小数.阶乘.乘方.加减乘除.括号优先级运算,美化输出结果(显示结果末尾没有多余的0) void ...

javascript使用栈结构将中缀表达式转换为后缀表达式并计算值

1.概念 你可能听说过表达式,a+b,a+b*c这些,但是前缀表达式,前缀记法,中缀表达式,波兰式,后缀表达式,后缀记法,逆波兰式这些都是也是表达式. a+b,a+b*c这些看上去比较正常的是中缀表达 ...

c语言,中缀表达式转后缀表达式并计算

//c语言中缀表达式计算 #include #include #include #include & ...

随机推荐

javascript中的 &quot&semi;&equals;&equals;&quot&semi;

对象之间比较比较的是引用地址 对象和其他比较,转成字符串 字符串和数字比较,字符串转成数字 布尔值和任何比较,转成数字 undefined == null NaN 和谁都不相等 javascript权 ...

常用工具类,文件和内存的大小获取,shell脚本的执行

/* * Copyright (C) 2012 The Android Open Source Project * * Licensed under the Apache License, Versi ...

分享一个用安卓手机就能引导pc安装linux系统办法

1.首先安卓手机下载软件DriveDroid.apk http://pan.baidu.com/s/1qW4pbT6 2.下载linux镜像文件放手机存储卡存储,放到Download/images/以 ...

srping标签和hibernate查询

Spring的注解形式:@Repository.@Service.@Controller,它们分别对应存储层Bean,业务层Bean,和展示层Bean. view层:    结合control层,显示 ...

Delphi 数据导出到Excel

好多办公软件特别是财务软件,都需要配备把数据导出到Excel,下面就来介绍两种数据导出方法 1.ADODB导出查询结果(此方法需要安装Excel) 2.二维表数据导出(根据Excel文件结构生成二进制 ...

SQLite 读取数据时,随机顺序

SELECT * FROM [数据表] ORDER BY random() 通过 random() 这个函数来排序

JavaScript 小实例 - 表单输入内容检测,对页面的增删改

JavaScript 小实例 - 表单输入内容检测,对页面的增删改 效果体验地址:https://xpwi.github.io/js/JavaScript01/jsForm.html 功能: 1.向页 ...

array详解

array和vector大致是相同的,区别在于array的大小是固定的.不能增加和缩小.另外array的swap()函数和vector的swap()函数在算法复杂度上是有区别的,array.swap( ...

The Cheap KD 8 is rumored to arrive online

Nike and also the Oklahoma City Thunder star revealed the Cheap KD 8, which they are calling probabl ...

python栈应用_栈应用之 后缀表达式计算 (python 版)相关推荐

  1. python max函数_使用'key'和lambda表达式的python max函数

    小编典典 lambda是一个匿名函数,它等效于: def func(p): return p.totalScore 现在max变成: max(players, key=func) 但是由于def语句是 ...

  2. UESTC--ICODING栈 后缀表达式计算

    UESTC--ICODING栈 后缀表达式计算 题目: 相关定义如下: 代码: 文章供学习交流参考 题目: 请使用已定义好的栈完成后缀表达式计算: (1)如果是操作数,直接入栈 (2)如果是操作符op ...

  3. 中缀表达式计算、后缀表达式计算、中缀转后缀

    代码来源 : bilibili网站 :https://www.bilibili.com/video/av91996256?from=search&seid=174497233083020298 ...

  4. python 字符串拼接_面试官让用 3 种 python 方法实现字符串拼接 ?对不起我有8种……...

    点击上方 蓝字关注我们 点击上方"印象python",选择"星标"公众号重磅干货,第一时间送达!之前发过很多关于 Python 学习的文章,收到大家不少的好评, ...

  5. python ide 最好_我在iPad上最好的Python IDE

    python ide 最好 Having finished my first year at university, and being left with very little to do thi ...

  6. python selenium脚本_怎样开始写第一个基于python的selenium脚本

    1.下载并安装python(http://www.python.org/geti/). 2.安装selenium(http://pypi.python.org/pypi/selenium)下载并解压缩 ...

  7. python语言 行业_如何入门编程开发行业 选择Python语言怎么样

    如何入门编程开发行业?选择Python语言怎么样?Python是一种面向对象的解释型计算机程序设计语言,它是纯粹的自由软件,语法简洁清晰,它具有丰富和强大的库.它常被称为胶水语言,能够把用其他语言制作 ...

  8. python笔记视频_终于拿到!清华大佬Python视频+书+笔记汇总

    终于拿到!清华大佬Python视频+书+笔记汇总 清华学姐推荐的Python视频400集,拿走不谢!

  9. python编程首选_为什么说学编程首选是python

    为什么学编程 你可能不会成为一名专业的程序员, 不过学编程的确是有很多的原因的 1. 最重要的是你想学!不论是因为业余爱好还是作为职业,编程都是十分有意思的, 都会让你收获很多 2. 如果你是对计算机 ...

最新文章

  1. 【每天一个Linux命令】12. Linux中which命令的用法
  2. Java LinkedList void add(int index,Object o)方法,带示例
  3. linux下硬盘测速工具hdparm
  4. 张小龙的区区一件衣服竟然能引起这么大骚动
  5. 工业标准接口OPC Server
  6. 川土微 | CA-IS3105W 全集成 DC-DC 转换器
  7. 双光耦开关电源电路图_双路输出回扫式开关电源电路图
  8. 微信公众号推送模板消息给用户
  9. Sql代码美化工具:Sql Pretty Printer for SSMS V3.6.1
  10. 新版抖音二维码生成工具源码+实测可用
  11. 数据采集笔记(八爪鱼)-task1
  12. Endnote 插入文献导致word崩溃!!解决方法
  13. 如何在C++中删除文件
  14. Android开机速度优化 Android 开机时间优化
  15. 自动化控制重要国际学术会议
  16. 容器 I/O 性能诊断:到底哪个应用是带宽杀手?
  17. 计算机浏览器应用程序,电脑打开IE浏览器显示找不到应用程序如何解决
  18. C语言练习题:厘米换算英尺英寸
  19. repeater的使用方法详解
  20. windows 导oracle用户,windows下Oracle导入导出用户数据

热门文章

  1. 集合詳細學習 包括Vector ArrayList List等等的比較與實例
  2. 报错,atmSecondMenu.vue?bcc9:231 Uncaught (in promise) TypeError: Cannot read property ‘length‘ of null
  3. 【BZOJ1179】atm,tarjan缩点+最长路径
  4. springmvc 传对象报400_springmvc 通过对象来接收参数,为什么默认会返回该对象?
  5. 2017.4.20 hanoi双塔问题 思考记录
  6. 2017.3.29 越狱 思考记录
  7. 学计算机比学农好吗,学农教育效果如何?学生:“做农活比打游戏有意义”
  8. Intel 64/x86_64/IA-32/x86处理器 - 通用指令(7) - 标志寄存器/标志控制指令 段寄存器指令
  9. tomcat启动后访问404_伪Tomcat
  10. java 使用logback进行日志输出