class MyCircularQueue: def __init__(self, k): """ Initialize your data structure here. Set the size of the queue to be k. :type k: int """ self.size = k+1 self.data = [0]*self.size self.head = self.rear = 0 def enQueue(self, value): """ Insert an element into the circular queue. Return true if the operation is successful. :type value: int :rtype: bool """ if self.isFull(): return False self.data[self.rear] = value self.rear = (self.rear+1)%self.size return True def deQueue(self): """ Delete an element from the circular queue. Return true if the operation is successful. :rtype: bool """ if self.isEmpty(): return False self.head = (self.head+1)%self.size return True def Front(self): """ Get the front item from the queue. :rtype: int """ if self.isEmpty(): return -1 return self.data[self.head] def Rear(self): """ Get the last item from the queue. :rtype: int """ if self.isEmpty(): return -1 return self.data[(self.rear-1)%self.size] def isEmpty(self): """ Checks whether the circular queue is empty or not. :rtype: bool """ return self.head ==self.rear def isFull(self): """ Checks whether the circular queue is full or not. :rtype: bool """ return (self.head - self.rear)%self.size ==1 # Your MyCircularQueue object will be instantiated and called as such: # obj = MyCircularQueue(k) # param_1 = obj.enQueue(value) # param_2 = obj.deQueue() # param_3 = obj.Front() # param_4 = obj.Rear() # param_5 = obj.isEmpty() # param_6 = obj.isFull()