📜  数据结构|队列|问题3(1)

📅  最后修改于: 2023-12-03 14:54:56.940000             🧑  作者: Mango

数据结构 | 队列 | 问题3

队列是一种常见的数据结构,它遵循先进先出(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

以上是一个简单但完整的循环队列的实现。通过使用该数据结构,程序员们可以高效地解决涉及队列操作的问题。请注意,在实际应用中,我们还需要处理其他一些边界情况,例如扩容、缩容等。