参考:python实现stack(栈)和队列(queue) - hjhmpl123的博客 - CSDN博客
栈和队列是两种基本的数据结构,同为容器类型。两者根本的区别在于:
stack:后进先出(迷宫所有路径)
栈示意图
queue:先进先出
队列示意图
注意,stack和queue是没有查询具体某一个位置的元素的操作的。但是他们的排列是按顺序的
对于stack我们可以使用python内置的list实现,因为list是属于线性数组,在末尾插入和删除一个元素所使用的时间都是O(1),这非常符合stack的要求。当然,我们也可以使用链表来实现。
class Stack(object):
def __init__(object):
self.stack = []
def push(self, value):
self.stack.append(value)
def pop(self):
if self.stack:
self.stack.pop()
else:
raise LookupError('stack is empty!')
def is_empty(self):
return bool(self.stack)
def top(self):
#取出目前stack中最新的元素
return self.stack[-1]
将列表当做堆栈使用
列表方法使得列表可以很方便的作为一个堆栈来使用,堆栈作为特定的数据结构,最先进入的元素最后一个被释放(后进先出)。用 append() 方法可以把一个元素添加到堆栈顶。用不指定索引的 pop() 方法可以把一个元素从堆栈顶释放出来。例如:
>>> stack = [3, 4, 5]
>>> stack.append(6)
>>> stack.append(7)
>>> stack
[3, 4, 5, 6, 7]
>>> stack.pop()
7
>>> stack
[3, 4, 5, 6]
>>> stack.pop()
6
>>> stack.pop()
5
>>> stack
[3, 4]
将列表当作队列使用
也可以把列表当做队列用,只是在队列里第一加入的元素,第一个取出来;但是拿列表用作这样的目的效率不高。在列表的最后添加或者弹出元素速度快,然而在列表里插入或者从头部弹出速度却不快(因为所有其他的元素都得一个一个地移动)。
>>> from collections import deque
>>> queue = deque(["Eric", "John", "Michael"])
>>> queue.append("Terry") # Terry arrives
>>> queue.append("Graham") # Graham arrives
>>> queue.popleft() # The first to arrive now leaves
'Eric'
>>> queue.popleft() # The second to arrive now leaves
'John'
>>> queue # Remaining queue in order of arrival
deque(['Michael', 'Terry', 'Graham'])
转载于:https://www.cnblogs.com/alex-bn-lee/p/10714754.html