棧是先進後出
隊列先進先出
棧示意圖(順便治治頸椎):
隊列示意圖:
棧實現代碼:
class Stack(object):
def __init__(self):
self.stack = []
def push(self, v):
self.stack.append(v)
def pop(self):
if self.stack:
# 推出棧
return self.stack.pop()
else:
raise LookupError("stack is empty")
def is_empty(self):
return bool(self.stack)
def top(self):
return self.stack[-1]
隊列實現代碼:
class Head(object):
def __init__(self):
self.right = None
self.left = None
class Node(object):
def __init__(self, value):
self.value = value
self.next = None
class Queue(object):
def __init__(self):
self.head = Head()
def queue(self, value):
new_node = Node(value)
head = self.head
if head.right:
tmp = head.right
head.right = new_node
tmp.next = new_node
else:
head.left = head.right = new_node
def dequeue(self):
if self.is_empty():
raise LookupError('Queue is empty')
head = self.head
tmp = head.left
if head.left == head.right:
head.left = head.right = None
else:
head.left = tmp.next
return tmp.value
def is_empty(self):
return not bool(self.head.left)
def top(self):
if self.is_empty():
raise LookupError('Queue is empty')
return self.head.left.value