LeetCode 622
循环队列,head== tail的时候作为空;留一个空位作为哨兵,当tail +1==head的时候我们标志为队列满了。
class MyCircularQueue:
def __init__(self, k: int):
"""
Initialize your data structure here. Set the size of the queue to be k.
"""
self.queue = [0]*(k+1)
self.head = 0
self.tail = 0
self.K = k+1
def enQueue(self, value: int) -> bool:
"""
Insert an element into the circular queue. Return true if the operation is successful.
"""
if self.isFull():
return False
self.queue[self.tail] = value
self.tail = self.__mapIndex(self.tail + 1)
return True
def deQueue(self) -> bool:
"""
Delete an element from the circular queue. Return true if the operation is successful.
"""
if self.isEmpty():
return False
self.head = self.__mapIndex(self.head + 1)
return True
def Front(self) -> int:
"""
Get the front item from the queue.
"""
if self.isEmpty():
return -1
return self.queue[self.head]
def Rear(self) -> int:
"""
Get the last item from the queue.
"""
if self.isEmpty():
return -1
return self.queue[self.__mapIndex(self.tail -1)]
def isEmpty(self) -> bool:
"""
Checks whether the circular queue is empty or not.
"""
return self.head == self.tail
def isFull(self) -> bool:
"""
Checks whether the circular queue is full or not.
"""
return self.head == self.__mapIndex(self.tail + 1)
def __mapIndex(self, index: int) -> int:
return (index + self.K) % self.K