A Queue is a collection of objects that are inserted and removed using First in First out Principle(FIFO). Insertion is done at the back(Rear) of the Queue and elements are accessed and deleted from first(Front) location in the queue.
Queue Operations:
1. enqueue() : Adds element to the back of Queue.
2. dequeue() : Removes and returns the first element from the queue.
3. first() : Returns the first element of the queue without removing it.
4. size() : returns the number of elements in the Queue.
5. isEmpty() : Return True if Queue is Empty else return False.
6. printqueue() : Print all elements of the Queue.
Below is the implementation of the above-mentioned Queue operations using Doubly LinkedList in Python:
Python3
class Node:
def __init__( self , data):
self .data = data
self . next = None
self .prev = None
class Queue:
def __init__( self ):
self .head = None
self .last = None
def enqueue( self , data):
if self .last is None :
self .head = Node(data)
self .last = self .head
else :
self .last. next = Node(data)
self .last. next .prev = self .last
self .last = self .last. next
def dequeue( self ):
if self .head is None :
return None
else :
temp = self .head.data
self .head = self .head. next
self .head.prev = None
return temp
def first( self ):
return self .head.data
def size( self ):
temp = self .head
count = 0
while temp is not None :
count = count + 1
temp = temp. next
return count
def isEmpty( self ):
if self .head is None :
return True
else :
return False
def printqueue( self ):
print ("queue elements are:")
temp = self .head
while temp is not None :
print (temp.data,end = " - >")
temp = temp. next
if __name__ = = '__main__' :
queue = Queue()
print ("Queue operations using doubly linked list ")
queue.enqueue( 4 )
queue.enqueue( 5 )
queue.enqueue( 6 )
queue.enqueue( 7 )
queue.printqueue()
print ("\nfirst element is ",queue.first())
print ("Size of the queue is ",queue.size())
queue.dequeue()
queue.dequeue()
print ("After applying dequeue() two times")
queue.printqueue()
print ("\nqueue is empty:",queue.isEmpty())
|
Output:Queue operations using doubly linked list
queue elements are:
4->5->6->7->
first element is 4
Size of the queue is 4
After applying dequeue() two times
queue elements are:
6->7->
queue is empty: False
Time Complexity for operations:
- enqueue(): O(1)
- dequeue():O(1)
- first(): O(1)
- size(): O(N)
- isEmpty(): O(1)
- printStack():O(N)
Auxiliary Space required for operations:
- enqueue(): O(1)
- dequeue():O(1)
- first(): O(1)
- size(): O(1)
- isEmpty(): O(1)
- printStack():O(1)