您的位置:首页 > 理论基础 > 数据结构算法

数据结构与算法:python语言描述之堆栈

2018-03-25 15:27 176 查看

1、形象表述

堆栈常用来存储数据,它遵循后入先出(last-in rst-out (LIFO))的规则。
下面这张图形象的描述了进栈、出栈的过程:



(a):把数值19压进栈,(b):把数值5压进栈
(c):把值19和5压进栈后产生的堆栈
(d):出栈,从栈顶弹出

2、python实现

对栈我们定义了一些操作函数:

Stack():创建一个新的空栈
isEmpty():判断是否空栈,返回布尔数值
length():返回栈的长度
push(item):元素进栈
pop():在堆栈非空的情况下,栈顶元素出栈
peek():返回栈顶元素,如果堆栈为空,返回错误。
在定义peek()函数时,我们用了断言assert,它的用法:
assert 表达式1,表达式2
如果表达式为真,程序继续执行,不发生中断;
如果表达式1为假,中断程序,并报错,输出表达式2。
堆栈的程序很简单,你不用害怕,你一看就明白了。
具体程序:应用python列表来实现堆栈
class Stack:
#创建一个空栈
def __init__(self):
self._theItems = list()
#判断栈是空的;如果栈是空的返回True,其他的返回False
def isEmpty(self):
return len(self) == 0
#栈的长度
def __len__(self):
return len(self._theItems)
#进栈
def push(self,item):
self._theItems.append(item)
#出栈
def pop(self):
#如果栈是空的,用断言assert使程序中断
assert not self.isEmpty(),'Cannot pop from an empty stack'
return self._theItems.pop()
#在不删除栈顶元素的情况下,返回栈顶元素
def peek(self):
assert not self.isEmpty(),'Cannot pop from an empty stack'
return self._theItems[-1]

3、堆栈的应用

这是一个用后缀表达式计算数值的例子,可以先忽略。operators = { # 运算符操作表
'+': lambda op1, op2: op1 + op2,
'-': lambda op1, op2: op1 - op2,
'*': lambda op1, op2: op1 * op2,
'/': lambda op1, op2: op1 / op2,
}
def evalPostfix(list1):
tokens = list1.split()
stack = []
for token in tokens:
if token.isdigit():
stack.append(int(token))
elif token in operators.keys():
f = operators[token]
op2 = stack.pop()
op1 = stack.pop()
stack.append(f(op1, op2))
return stack.pop()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息