数据结构与算法: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()
相关文章推荐
- 数据结构与算法:python语言描述之队列
- 数据结构与算法Python语言描述1--时间复杂度
- 数据结构与算法:python语言描述学习笔记Part3_2
- 数据结构与算法:python语言描述学习笔记Part3_1
- 读书笔记:数据结构与算法-Python语言描述【第2章:抽象数据类型和Python类】
- 用python学习数据结构与算法-堆栈
- 数据结构:Binary and other trees(数据结构,算法及应用(C++叙事描述语言)文章8章)
- 《数据结构与算法C#语言描述》笔记10_散列和Hashtable类
- 数据结构与算法:python语言描述学习笔记Part2
- Python语言描述机器学习之Logistic回归算法
- 摩尔斯电报码 解码算法 (Python 语言描述)
- Python语言描述KNN算法与Kd树
- 数据结构与算法:python语言描述学习笔记Part4_kmp算法及改进
- python算法和数据结构笔记--汉诺塔问题超详细递归过程图解(堆栈数据结构)
- 数据结构和算法 - C#语言描述
- 『Python CoolBook:Collections』数据结构和算法_collections.deque队列&yield应用
- Python数据结构与算法1前言
- python数据结构与算法——图的基本实现及迭代器
- Python实现各类数据结构和算法---计数排序
- python 下的数据结构与算法---6:6大排序算法