📅  最后修改于: 2023-12-03 14:54:56.940000             🧑  作者: Mango
队列是一种常见的数据结构,它遵循先进先出(FIFO)的原则。队列通常用于解决需要按顺序处理数据的问题,例如任务调度、打印机队列等。
问题3是一个常见的队列问题,它要求实现一个循环队列并完成以下操作:
enqueue(item)
: 将元素添加到队列的尾部。dequeue()
: 移除队列头部的元素并返回该元素。isEmpty()
: 判断队列是否为空。isFull()
: 判断队列是否已满。以下是一个基于数组实现的循环队列的示例代码:
class CircularQueue:
def __init__(self, k: int):
self.k = k
self.queue = [None] * k
self.head = 0
self.tail = 0
def enqueue(self, item: int) -> bool:
if self.isFull():
return False
self.queue[self.tail] = item
self.tail = (self.tail + 1) % self.k
return True
def dequeue(self) -> bool:
if self.isEmpty():
return False
self.queue[self.head] = None
self.head = (self.head + 1) % self.k
return True
def isEmpty(self) -> bool:
return self.head == self.tail and self.queue[self.head] is None
def isFull(self) -> bool:
return self.head == self.tail and self.queue[self.head] is not None
在上面的代码中,我们使用一个固定大小的数组来实现循环队列。head
表示队列头部的索引,tail
表示队列尾部的索引。入队操作将元素添加到 tail
的位置,并更新 tail
。出队操作将头部元素设为 None
,并更新 head
。判断队列是否为空的条件是头部和尾部索引相等且该位置为空。判断队列是否已满的条件是头部和尾部索引相等且该位置不为空。
使用示例:
queue = CircularQueue(3)
queue.enqueue(1) # 返回 True
queue.enqueue(2) # 返回 True
queue.enqueue(3) # 返回 True
queue.enqueue(4) # 返回 False,队列已满
queue.dequeue() # 返回 True
queue.enqueue(4) # 返回 True
queue.dequeue() # 返回 True
以上是一个简单但完整的循环队列的实现。通过使用该数据结构,程序员们可以高效地解决涉及队列操作的问题。请注意,在实际应用中,我们还需要处理其他一些边界情况,例如扩容、缩容等。