队列的动态链式存储通常使用链表来实现,这里提供一个简单的单链表实现的队列的Python代码示例。在这个示例中,我们定义了一个`Node`类来表示链表的节点,以及一个`Queue`类来表示队列。
class Node:
"""链表节点"""
def __init__(self, value=None):
self.value = value
self.next = None
class Queue:
"""使用链表实现的队列"""
def __init__(self):
self.front = None # 队列前端
self.rear = None # 队列后端
def is_empty(self):
"""检查队列是否为空"""
return self.front is None
def enqueue(self, value):
"""入队操作"""
new_node = Node(value)
if self.rear is None:
# 如果队列为空,则新节点既是前端也是后端
self.front = self.rear = new_node
else:
# 否则,将新节点添加到后端,并更新后端指针
self.rear.next = new_node
self.rear = new_node
def dequeue(self):
"""出队操作,如果队列为空,则返回None"""
if self.is_empty():
return None
# 移除前端节点,并更新前端指针
temp = self.front
self.front = self.front.next
# 如果前端指针为空,说明队列变为空,更新后端指针也为空
if self.front is None:
self.rear = None
return temp.value
def peek(self):
"""查看队首元素,如果队列为空,则返回None"""
if self.is_empty():
return None
return self.front.value
# 示例使用
if __name__ == "__main__":
q = Queue()
q.enqueue(1)
q.enqueue(2)
q.enqueue(3)
print(q.dequeue()) # 输出: 1
print(q.peek()) # 输出: 2
print(q.is_empty()) # 输出: False
这段代码展示了如何使用单链表来实现一个基本的队列,包括入队(`enqueue`)、出队(`dequeue`)、查看队首元素(`peek`)以及检查队列是否为空(`is_empty`)的功能。