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

栈应用之 后缀表达式计算 (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 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值