class MyCircularQueue: def __init__(self, k: int): """ Initialize your data structure here. Set the size of the queue to be k. """ self.head = -1 self.tail = -1 self.size = k self.queue = [None] * self.size 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 if self.isEmpty(): self.head = 0 self.tail = (self.tail + 1) % self.size self.queue[self.tail] = value 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 if self.head == self.tail: self.head = -1 self.tail = -1 return True self.queue[self.head] = None self.head = (self.head + 1) % self.size 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.tail] def isEmpty(self) -> bool: """ Checks whether the circular queue is empty or not. """ return self.head == -1 def isFull(self) -> bool: """ Checks whether the circular queue is full or not. """ return (self.tail + 1) % self.size == self.head