"""
Author : Robin Singh
Programs List:
1.Queue
2.Circular Queue
3.Double Ended Queue
"""
import inspect
[docs]class Queue(object):
def __init__(self, length=5):
"""
:param length: pass queue length while making object otherwise default value will be 5
"""
self.items = []
self.size = 0
self.front = 0
self.rear = 0
self.limit = length
[docs] def isEmpty(self):
"""
checks the queue if its empty or not
"""
if self.items == []:
return True
else:
return False
[docs] def enqueue(self, data):
"""
inserts an element into the queue
"""
if self.size >= self.limit:
return -1
else:
self.items.append(data)
if self.front == None:
self.front = self.rear = 0
else:
self.rear = self.size
self.size = self.size+1
[docs] def dequeue(self):
"""
removes an element from the queue
"""
if self.isEmpty():
return -1
else:
self.size = self.size-1
if self.size == 0:
self.front = self.rear = 0
else:
self.rear = self.size - 1
return self.items.pop(0)
[docs] def Size(self):
"""
returns size of the queue
"""
return self.size
[docs] def display(self):
"""
displays full queue
"""
if self.items == []:
return -1
else:
print(self.items)
[docs] @staticmethod
def get_code():
"""
:return: source code
"""
return inspect.getsource(Queue)
[docs] @staticmethod
def time_complexity():
"""
:return: time complexity
"""
return " Time Complexity of enqueue: O(1) "\
" Time Complexity of dequeue: O(n)"\
" Optimizations : We can implement both enqueu and dequeue operations in O(1) time. To achive this, we can either use linked list implementaion of queue or circular implementation of queue"
[docs]class CircularQueue(object):
"""
:param length: pass queue length while making object otherwise default value will be 5
"""
def __init__(self, length=5):
"""
"""
self.items = []
self.rear = 0
self.front = 0
self.length = length
[docs] def isEmpty(self):
"""
Checks whether queue is empty or not
"""
if self.items == []:
return True
else:
return False
[docs] def isQueuefull(self):
"""
checks whether queue is full or not
"""
if len(self.items) == self.length:
return True
else:
return False
[docs] def enqueue(self, data):
"""
inserts an element into the queue
"""
if (self.isQueuefull()):
# Queue is full then return print
return print("queue is full")
elif self.isEmpty():
self.front = self.rear = 0
self.items.append(data)
else:
self.rear += 1
self.items.append(data)
[docs] def dequeue(self):
"""
removes an element from the queue
"""
if self.isEmpty():
return -1
else:
self.front += 1
return self.items.pop(0)
[docs] def display(self):
"""
displays full queue
"""
if self.items == []:
return True
else:
print(self.items)
[docs] @staticmethod
def get_code():
"""
:return: source code
"""
return inspect.getsource(CircularQueue)
[docs] @staticmethod
def time_complexity():
"""
:return: time complexity
"""
return " Time Complexity of enqueue: O(1)"\
" Time Complexity of dequeue: O(1)"
[docs]class Deque(object):
"""
:param length: pass queue length while making object otherwise default value will be 5
"""
def __init__(self, length=5):
"""
:param length: pass queue length while making object otherwise default value will be 5
"""
self.items = []
self.length = length
[docs] def isFull(self):
"""
checks whether queue is full or not
"""
if len(self.items) == self.length:
return True
else:
return False
[docs] def isEmpty(self):
"""
Checks whether queue is empty or not
"""
if self.items == []:
return True
else:
return False
[docs] def enqueue_start(self, element):
"""
inserts an element at the start of the queue
"""
if (self.isFull()):
return print("queue is full")
else:
self.items.insert(0, element)
[docs] def enqueue_end(self, ele):
"""
inserts an element at the end of the queue
"""
if (self.isFull()):
return print("queue is full")
else:
self.items.append(ele)
[docs] def dequeue_start(self):
"""
deletes an element from the start of the queue
"""
if (self.isEmpty()):
return print("empty queue..!")
else:
return self.items.pop(0)
[docs] def dequeue_end(self):
"""
deletes an element from the end of the queue
"""
if (self.isEmpty()):
return print("empty queue")
else:
return self.items.pop()
[docs] def display(self):
"""
displays full queue
"""
if self.items == []:
return True
else:
print(self.items)
[docs] @staticmethod
def get_code():
"""
:return: source code
"""
return inspect.getsource(Deque)
[docs] @staticmethod
def time_complexity():
"""
:return: time complexity
"""
return " Time Complexity of all the above operations is constant : O(1)"