Priority Queues

code:

# Python code to implement Priority Queue using Linked List

class Node:
    
    def __init__(self, item, priority):
        
        self.item = item
        self.next = None
        self.priority = priority


class PriorityQueue:
    
    def __init__(self):
        
        self.front = None
        self.rear = None

    def isEmpty(self):
        
        return self.front == None   #Return True if Empty
    

    # Adds the given item to the queue by inserting it in the proper 
    # position based on the given priority. The new node is appended to 
    # the end of the linked list
    def enqueue(self, item, priority):
        
        newNode = Node(item, priority)
        
        
        if not self.rear:
            
            self.front = newNode
            self.rear= newNode
            
            return
        
        if self.front.priority <= newNode.priority:
            
            newNode.next = self.front
            self.front = newNode
            
            return
        
        previous = None
        current = self.front
        while(current and newNode.priority < current.priority):
            previous = current
            current = current.next

        if current:
            previous.next = newNode
            newNode.next = current
        else:
            self.rear.next = newNode
            self.rear = newNode

    # Removes and returns the next item from the queue, which is the 
    # item with the highest priority. If two or more items have the 
    # same priority, those items are removed in FIFO order. An item 
    # cannot be dequeued from an empty queue. 
    def dequeue(self):
        if self.isEmpty():
            print('Queue is empty')
            return
        temp = self.front
        self.front = self.front.next
        if self.front == None:
            self.rear = None
        return temp.item
    

q = PriorityQueue()

q.enqueue('Devin', 1)
q.enqueue('Kobe', 1)
q.enqueue('Lebron', 2)
q.enqueue('Michael', 3)


print(q.dequeue())
print(q.dequeue())
print(q.dequeue())
print(q.dequeue())


# Python code to implement Priority Queue using Linked List

class Node:
    
    def __init__(self, item, priority):
        
        self.item = item
        self.next = None
        self.priority = priority


class PriorityQueue:
    
    def __init__(self):
        
        self.front = None
        self.rear = None

    def isEmpty(self):
        
        return self.front == None   #Return True if Empty
    

    # Adds the given item to the queue by inserting it in the proper 
    # position based on the given priority. The new node is appended to 
    # the end of the linked list
    def enqueue(self, item, priority):
        
        newNode = Node(item, priority)
        
        
        if not self.rear:
            
            self.front = newNode
            self.rear= newNode
            
            return
        
        if self.front.priority <= newNode.priority:
            
            newNode.next = self.front
            self.front = newNode
            
            return
        
        previous = None
        current = self.front
        while(current and newNode.priority < current.priority):
            previous = current
            current = current.next

        if current:
            previous.next = newNode
            newNode.next = current
        else:
            self.rear.next = newNode
            self.rear = newNode

    # Removes and returns the next item from the queue, which is the 
    # item with the highest priority. If two or more items have the 
    # same priority, those items are removed in FIFO order. An item 
    # cannot be dequeued from an empty queue. 
    def dequeue(self):
        if self.isEmpty():
            print('Queue is empty')
            return
        temp = self.front
        self.front = self.front.next
        if self.front == None:
            self.rear = None
        return temp.item
    

q = PriorityQueue()

q.enqueue('Devin', 1)
q.enqueue('Kobe', 1)
q.enqueue('Lebron', 2)
q.enqueue('Michael', 3)


print(q.dequeue())
print(q.dequeue())
print(q.dequeue())
print(q.dequeue())