📜  Python|使用双向链表进行队列

📅  最后修改于: 2022-05-13 01:54:59.926000             🧑  作者: Mango

Python|使用双向链表进行队列

队列是使用先进先出原则 (FIFO) 插入和删除的对象的集合。插入在队列的后面(后)完成,元素从队列中的第一个(前)位置访问和删除。

队列操作:

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.

下面是在Python中使用双链表实现上述队列操作:

# 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())
输出:
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