队列的动态链式存储实现代码分享


队列的动态链式存储通常使用链表来实现,这里提供一个简单的单链表实现的队列的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`)的功能。