## Problem Description

Design an implementation of the circular queue. The circular queue is a linear data structure in which the operations are performed based on FIFO (First In First Out) principle and the last position is connected back to the first position to make a circle. It is also called “Ring Buffer”.

This implementation should support following operations:

• MyCircularQueue(k): Constructor, set the size of the queue to be k.
• Front: Get the front item from the queue. If the queue is empty, return -1.
• Rear: Get the last item from the queue. If the queue is empty, return -1.
• enQueue(value): Insert an element into the circular queue. Return true if the operation is successful.
• deQueue(): Delete an element from the circular queue. Return true if the operation is successful.
• isEmpty(): Checks whether the circular queue is empty or not.
• isFull(): Checks whether the circular queue is full or not.

Find below my python implementation that beats 94.37% of submission done using python3.

## Code

class MyCircularQueue:

def __init__(self, k: int):
"""
Initialize your data structure here. Set the size of the queue to be k.
"""
self.q = []         # our queue
self.k = k          # max_len

def enQueue(self, value: int) -> bool:
"""
Insert an element into the circular queue. Return true if the operation is successful.
"""
if len(self.q)>=self.k:
return False
else :
self.q.append(value)
return True

def deQueue(self) -> bool:
"""
Delete an element from the circular queue. Return true if the operation is successful.
"""
if len(self.q)==0:
return False
else :
# self.q.pop()
del self.q[0]
return True

def Front(self) -> int:
"""
Get the front item from the queue.
"""
if len(self.q)==0:
return -1
else :
return self.q[0]

def Rear(self) -> int:
"""
Get the last item from the queue.
"""
if self.isEmpty():
return -1
else :
return self.q[-1]

def isEmpty(self) -> bool:
"""
Checks whether the circular queue is empty or not.
"""
if len(self.q)==0:
return True
else:
return False

def isFull(self) -> bool:
"""
Checks whether the circular queue is full or not.
"""
if len(self.q) == self.k:
return True
else:
return False

# 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()