1、栈
1.1、栈的基本介绍
栈(Stack)是一个项的有序集合。添加项和移除项都发生在同一“端”。这一端通常被称为 顶,另一端的顶部被称为 底。
栈的 底 是有标志性的,因为存储在栈中更靠近 底 的项就是栈中储存时间最长的项。最新添加的项在移除项时也会第一个被移除。这种排序原则有时也称为LIFO法,也就是 后进先出 。
栈很重要,因为它们可以用于反转项的顺序。如下图所示:
1.2、栈的Python实现
本文采用Python语言中的列表(list)这种基础数据结构实现栈。首先定义一个 Stack 类,类中包含 进栈、出栈、栈是否为空、栈的大小 等基本方法,具体代码如下:
class Stack():
def __init__(self):
self.stack = []
# 进栈
def push(self, item):
self.stack.append(item)
# 出栈
def pop(self):
if self.is_empty() == True:
return None
else:
return self.stack.pop()
# 栈是否为空
def is_empty(self):
return self.stack == []
# 栈的大小
def size(self):
return len(self.stack)
2、队列
2.1、队列的基本介绍
队列(Queue)是一系列有顺序的元素的集合,新元素的加入在队列的一端,这一端叫做 队尾 (rear),已有元素的移除发生在队列的另一端,叫做 队首 (front)。当一个元素被加入到队列之后,它就从队尾开始向队首前进,直到它成为下一个即将被移出队列的元素。
最新被加入的元素必须处于队尾,在队列停留最长时间的元素处于队首。这种原则有时候叫做 先进先出 (FIFO, first-in first-out),进出队列的过程如下图所示:
2.2、队列的Python实现
本文采用Python语言中的列表(list)这种基础数据结构实现队列。首先定义一个 Queue 类,类中包含 进队、出队、队列是否为空、队列的大小 等基本方法,具体代码如下:
class Queue():
def __init__(self):
self.queue = []
# 进队
def push(self, item):
self.queue.append(item)
# 出队
def pop(self):
if self.is_empty() == True:
return None
else:
return self.queue.pop(0)
# 队列是否为空
def is_empty(self):
return self.queue == []
# 队列的长度
def size(self):
return len(self.queue)
备注:Python中的 collections 模块中实现了队列这种数据结构,可以直接调用。
参考:https://www.icourse163.org/course/PKU-1206307812