在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会从队列头部插入,绕过队列尾部。然后,我们分别输出了队列头部和尾部元素,并进行了一次出队操作,最后再次输出队列头部和尾部元素。
循环队列的实现有效地利用了数组的空间,避免了元素的搬移操作,提高了队列的效率,特别是在需要频繁入队和出队的情况下。然而,在实际使用过程中,需要注意循环队列的容量,避免超过容量导致数据被覆盖或队列不能正常操作的问题。
