📜  python中的旋转循环队列(1)

📅  最后修改于: 2023-12-03 15:34:26.770000             🧑  作者: Mango

Python中的旋转循环队列

在Python中,可以使用列表来实现队列数据结构。但是,列表实现的队列是一种静态队列,也就是说队列长度是固定的,而不能动态伸缩。这时候就需要使用循环队列来解决这个问题。

循环队列的特点

循环队列和普通队列最大的不同就在于它可以像环一样 "循环" 起来,将队尾和队头连在一起。当队列满时,把队列头指向下一个空位置,这样就可以继续往队列中添加元素。同时,当队列为空时,队列头和队列尾指向同一个位置。这就是循环队列的特点。

实现循环队列

在Python中实现循环队列的方法非常简单。我们可以使用一个列表以及两个指针 front 和 rear 来实现。front 表示队列头,rear 表示队列尾。

在初始化时,front 和 rear 指向同一个位置,即队列开头。当我们往队列中添加元素时,我们先将元素添加到 rear 指向的位置,然后将 rear 后移一个位置。当队列已满时,我们将 rear 指向下一个空位置,以实现循环添加。同理,当我们从队列中取出元素时,我们先获取 front 指向的元素,然后将 front 后移一个位置。当队列为空时,我们将 front 和 rear 指向同一个位置。

下面是一个使用 Python 实现的循环队列的示例代码:

class CircularQueue:
    def __init__(self, k: int):
        self.k = k
        self.q = [0] * k
        self.front = 0
        self.rear = 0
        self.len = 0

    def enQueue(self, value: int) -> bool:
        if self.isFull():
            return False
        self.q[self.rear] = value
        self.rear = (self.rear + 1) % self.k
        self.len += 1
        return True

    def deQueue(self) -> bool:
        if self.isEmpty():
            return False
        self.front = (self.front + 1) % self.k
        self.len -= 1
        return True

    def Front(self) -> int:
        if self.isEmpty():
            return -1
        return self.q[self.front]

    def Rear(self) -> int:
        if self.isEmpty():
            return -1
        return self.q[(self.rear - 1 + self.k) % self.k]

    def isEmpty(self) -> bool:
        return self.len == 0

    def isFull(self) -> bool:
        return self.len == self.k

以上代码实现了一个循环队列,我们可以通过调用 enQueue() 方法向队列中添加元素,调用 deQueue() 方法从队列中取出元素,调用 Front() 和 Rear() 方法分别查看队列头和队列尾的值,调用 isEmpty() 方法判断队列是否为空,调用 isFull() 方法判断队列是否满。

总结

循环队列是一种常用的数据结构,它可以充分利用空间,实现队列的动态伸缩。在 Python 中,实现循环队列非常简单,只需要使用一个列表和两个指针即可。希望本文可以帮助读者更好地理解循环队列及其应用。