📅  最后修改于: 2023-12-03 15:25:37.723000             🧑  作者: Mango
循环队列是一种将队列的队尾和队头相连而形成的环形结构的队列。它的特点是能够充分利用数组空间,有效缓解顺序队列中插入元素时可能会浪费空间的问题。
循环队列的数据结构通常由以下几个元素构成:
front
rear
size
data
class CircularQueue:
def __init__(self, capacity: int):
self.capacity = capacity
self.front = 0
self.rear = -1
self.size = 0
self.data = [None] * capacity
循环队列的基本操作包括入队、出队、获取队头元素和判断队列是否为空。
循环队列的入队操作,需要先判断队列是否已满,如果已满则抛出异常。否则,将数据插入到队列末尾,并更新队列结束位置。
def enqueue(self, val: int) -> bool:
if self.is_full():
return False
self.rear = (self.rear + 1) % self.capacity
self.data[self.rear] = val
self.size += 1
return True
循环队列的出队操作,需要先判断队列是否为空,如果为空则抛出异常。否则,将队头元素出队,并更新队列起始位置。
def dequeue(self) -> int:
if self.is_empty():
return None
val = self.data[self.front]
self.front = (self.front + 1) % self.capacity
self.size -= 1
return val
循环队列的获取队头元素操作,需要先判断队列是否为空,如果为空则抛出异常。否则,返回队头元素。
def get_front(self) -> int:
if self.is_empty():
return None
return self.data[self.front]
循环队列的判断队列是否为空操作,只需判断队列长度是否为0即可。
def is_empty(self) -> bool:
return self.size == 0
循环队列的判断队列是否已满操作,只需判断队列长度是否已达到容量即可。
def is_full(self) -> bool:
return self.size == self.capacity
因此,循环队列的总体时间复杂度为 O(1)。
循环队列广泛应用于多线程编程、操作系统调度等领域,尤其在缓存池、消息队列等需要快速处理大量数据的场景中表现出色。