Priority Queue
Priority Queue
@property
def priority(self):
return self.__priority
@priority.setter
def priority(self, priority):
self.__priority = priority
@property
def data(self):
return self.__data
@data.setter
def data(self, data):
self.__data = data
@property
def next(self):
return self.__next
@next.setter
def next(self, value):
self.__next = value
class PriorityQueue:
def __init__(self):
self.__head = None
else:
current_node = self.__head
while current_node.next and current_node.next.priority <= priority:
current_node = current_node.next
node.next = current_node.next
current_node.next = node
def dequeue(self):
if self.__head is None:
print("Queue is empty.")
return None
removed_node = self.__head
self.__head = self.__head.next
return removed_node.priority, removed_node.data
def dequeue_rear(self):
if self.__head is None:
print("Queue is empty.")
return None
if self.__head.next is None:
removed_node = self.__head
self.__head = self.__head.next
return removed_node.priority, removed_node.data
current_node = self.__head
prev_node = None # To keep track of the node before the last one
while current_node.next:
prev_node = current_node
current_node = current_node.next
if self.__head.priority == priority:
removed_node = self.__head
self.__head = self.__head.next
return removed_node.priority, removed_node.data
current_node = self.__head
prev_node = None # To keep track of the node before the target one
if current_node is None:
print(f"Element with priority {priority} not found.")
return None
while current_node:
if current_node.priority == old_priority:
current_node.priority = new_priority
self._reorder_queue()
return
prev_node = current_node
current_node = current_node.next
sorted_queue = None
current_node = self.__head
while current_node:
next_node = current_node.next
current_node.next = None
else:
temp = sorted_queue
current_node = next_node
self.__head = sorted_queue
while current_node:
if current_node.priority == priority:
return current_node.priority, current_node.data
current_node = current_node.next
def front(self):
if self.__head is None:
print("Queue is empty.")
return None
def rear(self):
if self.__head is None:
print("Queue is empty.")
return None
current_node = self.__head
while current_node.next:
current_node = current_node.next
return current_node.priority, current_node.data
def is_empty(self):
return self.__head is None
def size(self):
current_node = self.__head
count = 0
while current_node:
count += 1
current_node = current_node.next
return count
def display(self):
current_node = self.__head
while current_node:
print(f"Priority: {current_node.priority}, Data: {current_node.data}")
current_node = current_node.next
def is_priority(self):
if self.__head is None:
return True # An empty queue is trivially ordered
current_node = self.__head
current_node = current_node.next
return True
queue.display()
queue.display()