欢迎访问宙启技术站
智能推送

在Python中实现循环队列的方法

发布时间:2023-12-23 18:31:44

循环队列是一种特殊的队列,它的头部和尾部相连,形成一个循环的结构。在循环队列中,当队列满时,新元素可以从队列的头部插入,绕过队列的尾部。类似地,当队列为空时,元素可以从队列的尾部删除,绕过队列的头部。

下面是在Python中实现循环队列的方法及其使用示例。

1. 创建循环队列类:

class CircularQueue:
    def __init__(self, k):
        self.size = k
        self.queue = [None] * self.size
        self.head = self.tail = -1

    def is_empty(self):
        return self.head == -1

    def is_full(self):
        return (self.tail + 1) % self.size == self.head

    def enqueue(self, value):
        if self.is_full():
            return False
        elif self.is_empty():
            self.head = 0
        self.tail = (self.tail + 1) % self.size
        self.queue[self.tail] = value
        return True

    def dequeue(self):
        if self.is_empty():
            return False
        elif self.head == self.tail:
            self.head = self.tail = -1
        else:
            self.head = (self.head + 1) % self.size
        return True

    def front(self):
        if self.is_empty():
            return None
        return self.queue[self.head]

    def rear(self):
        if self.is_empty():
            return None
        return self.queue[self.tail]

以上代码中,我们定义了循环队列类CircularQueue,并包含以下方法:

- __init__(self, k):初始化函数,创建一个大小为k的循环队列。

- is_empty(self):检查队列是否为空。

- is_full(self):检查队列是否已满。

- enqueue(self, value):将元素value插入队列的尾部。

- dequeue(self):删除队列头部的元素。

- front(self):返回队列头部的元素。

- rear(self):返回队列尾部的元素。

2. 使用循环队列:

q = CircularQueue(5)
q.enqueue(1)
q.enqueue(2)
q.enqueue(3)
q.enqueue(4)
q.enqueue(5)
print(q.front())  # 输出: 1
print(q.rear())  # 输出: 5
q.dequeue()
q.enqueue(6)
print(q.front())  # 输出: 2
print(q.rear())  # 输出: 6

在上述示例中,我们创建了一个大小为5的循环队列,然后依次插入了元素1、2、3、4、5。在插入元素5后,队列已满,因此新元素6会从队列头部插入,绕过队列尾部。然后,我们分别输出了队列头部和尾部元素,并进行了一次出队操作,最后再次输出队列头部和尾部元素。

循环队列的实现有效地利用了数组的空间,避免了元素的搬移操作,提高了队列的效率,特别是在需要频繁入队和出队的情况下。然而,在实际使用过程中,需要注意循环队列的容量,避免超过容量导致数据被覆盖或队列不能正常操作的问题。