Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file not shown.
70 changes: 57 additions & 13 deletions data_structures/queue/queue.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,27 +6,71 @@ class Queue:
Queue follows First-In-First-Out methodology, i.e., the data item stored first will be accessed first.

"""
class __Node: # new addition part
""" used for double linked list logic of queue"""
""" should not available outside the class"""
def __init__(self,element,next = None,prev = None):
self.ele = element
self.next = next

def __init__(self):
self.entries = []
self.length = 0
self.front = 0
def __init__(self): # modified part

self.head = None # points to last pushed element (enqueue part)
self.length = 0 # number of elements in it
self.Tail = None # points to first pushed element (dequeue part)

def is_empty(self): # new addition part
"""check is queue object is empty or not
return boolean
"""
return self.length<=0

def put(self, item): # modified part
"""add item to queue

def put(self, item):
self.entries.append(item)
self.length += 1
Args:
item (any): item to be pushed
"""
temp = self.__Node(item) # create new node

if self.is_empty():
# initialize the doubly linked list
self.head = temp
self.Tail = temp

self.length += 1
return
# already initialized so just add the item

def get(self):
if self.length <= 0:
return
self.head.next = temp # point to next element
self.head = self.head.next # move pointer to next element which is last pushed element

self.length += 1
return

def get(self): # modified part
""" pop the tail element and move the pointer one step ahead
"""
if self.is_empty():
return

self.length -= 1
de_queued = self.entries[self.front]
self.entries = self.entries[1:]
return de_queued

temp = self.Tail
nex = self.Tail.next
self.Tail.next = None
self.Tail = nex

return temp.ele



def rotate(self, rotation):
for i in range(rotation):
self.put(self.get())

def size(self):
return self.length

def __len__(self): # new addition part
return self.length