Python | Queue using Doubly Linked List
Last Updated :
05 Jan, 2023
Improve
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
Python3
# A complete working Python program to demonstrate all # Queue operations using doubly linked list # Node class class Node: # Function to initialise the node object def __init__( self , data): self .data = data # Assign data self . next = None # Initialize next as null self .prev = None # Initialize prev as null # Queue class contains a Node object class Queue: # Function to initialize head def __init__( self ): self .head = None self .last = None # Function to add an element data in the Queue 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 # Function to remove first element and return the element from the queue 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 # Function to return top element in the queue def first( self ): return self .head.data # Function to return the size of the queue def size( self ): temp = self .head count = 0 while temp is not None : count = count + 1 temp = temp. next return count # Function to check if the queue is empty or not def isEmpty( self ): if self .head is None : return True else : return False # Function to print the stack def printqueue( self ): print ("queue elements are:") temp = self .head while temp is not None : print (temp.data,end = " - >") temp = temp. next # Code execution starts here if __name__ = = '__main__' : # Start with the empty queue queue = Queue() print ("Queue operations using doubly linked list ") # Insert 4 at the end. So queue becomes 4->None queue.enqueue( 4 ) # Insert 5 at the end. So queue becomes 4->5None queue.enqueue( 5 ) # Insert 6 at the end. So queue becomes 4->5->6->None queue.enqueue( 6 ) # Insert 7 at the end. So queue becomes 4->5->6->7->None queue.enqueue( 7 ) # Print the queue queue.printqueue() # Print the first element print ("\nfirst element is ",queue.first()) # Print the queue size print ("Size of the queue is ",queue.size()) # remove the first element queue.dequeue() # remove the first element queue.dequeue() # first two elements are removed # Print the queue print ("After applying dequeue() two times") queue.printqueue() # Print True if queue is empty else False 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)