📅  最后修改于: 2023-12-03 15:28:48.600000             🧑  作者: Mango
这道题是门|门 IT 2008 中的一道编程题,需要求解循环队列的题目。
有一个长度为 $N$ 的循环队列,初始时队列为空。现在需要支持两种操作:
要求入队操作保证队列不会溢出,即在 $N$ 个元素都入队,再进行入队操作时,队列应该已满,不能再入队。出队操作保证队列不会为空,即在队列为空时进行出队操作应该报错。
请你设计一个数据结构,实现上述两种操作。
循环队列一般使用数组实现,队头和队尾指针分别指向队首和队尾元素,入队时队尾指针向后移动,出队时队头指针向后移动。
但是循环队列有两种情况需要特别注意:
以下是 Python 代码实现,使用了一个列表来模拟循环队列。
class MyCircularQueue:
def __init__(self, k: int):
self.queue = [0] * k
self.head = 0
self.tail = 0
self.size = k
def enQueue(self, value: int) -> bool:
if self.isFull():
return False
self.queue[self.tail] = value
self.tail = (self.tail + 1) % self.size
return True
def deQueue(self) -> bool:
if self.isEmpty():
return False
self.head = (self.head + 1) % self.size
return True
def Front(self) -> int:
if self.isEmpty():
return -1
return self.queue[self.head]
def Rear(self) -> int:
if self.isEmpty():
return -1
return self.queue[(self.tail - 1 + self.size) % self.size]
def isEmpty(self) -> bool:
return self.head == self.tail
def isFull(self) -> bool:
return (self.tail + 1) % self.size == self.head
以上代码中,enQueue()
方法用于入队操作,deQueue()
方法用于出队操作,Front()
方法用于获取队首元素,Rear()
方法用于获取队尾元素,isEmpty()
方法用于检查队列是否为空,isFull()
方法用于检查队列是否已满。
循环队列是一个很常见的数据结构,在实际工程中也会用到。理解循环队列的性质及实现方式对于编程能力的提升有一定帮助。