data_structures.queue.priority_queue_using_list

Pure Python implementations of a Fixed Priority Queue and an Element Priority Queue using Python lists.

Exceptions

OverFlowError

Common base class for all non-exit exceptions.

UnderFlowError

Common base class for all non-exit exceptions.

Classes

ElementPriorityQueue

Element Priority Queue is the same as Fixed Priority Queue except that the value of

FixedPriorityQueue

Tasks can be added to a Priority Queue at any time and in any order but when Tasks

Functions

element_priority_queue()

fixed_priority_queue()

Module Contents

exception data_structures.queue.priority_queue_using_list.OverFlowError

Bases: Exception

Common base class for all non-exit exceptions.

exception data_structures.queue.priority_queue_using_list.UnderFlowError

Bases: Exception

Common base class for all non-exit exceptions.

class data_structures.queue.priority_queue_using_list.ElementPriorityQueue

Element Priority Queue is the same as Fixed Priority Queue except that the value of the element itself is the priority. The rules for priorities are the same the as Fixed Priority Queue.

>>> epq = ElementPriorityQueue()
>>> epq.enqueue(10)
>>> epq.enqueue(70)
>>> epq.enqueue(4)
>>> epq.enqueue(1)
>>> epq.enqueue(5)
>>> epq.enqueue(7)
>>> epq.enqueue(4)
>>> epq.enqueue(64)
>>> epq.enqueue(128)
>>> print(epq)
[10, 70, 4, 1, 5, 7, 4, 64, 128]
>>> epq.dequeue()
1
>>> epq.dequeue()
4
>>> epq.dequeue()
4
>>> epq.dequeue()
5
>>> epq.dequeue()
7
>>> epq.dequeue()
10
>>> print(epq)
[70, 64, 128]
>>> epq.dequeue()
64
>>> epq.dequeue()
70
>>> epq.dequeue()
128
>>> epq.dequeue()
Traceback (most recent call last):
    ...
data_structures.queue.priority_queue_using_list.UnderFlowError: The queue is empty
>>> print(epq)
[]
__str__() str

Prints all the elements within the Element Priority Queue

dequeue() int

Return the highest priority element in FIFO order. If the queue is empty then an under flow exception is raised.

enqueue(data: int) None

This function enters the element into the queue If the queue is full an Exception is raised saying Over Flow!

queue = []
class data_structures.queue.priority_queue_using_list.FixedPriorityQueue

Tasks can be added to a Priority Queue at any time and in any order but when Tasks are removed then the Task with the highest priority is removed in FIFO order. In code we will use three levels of priority with priority zero Tasks being the most urgent (high priority) and priority 2 tasks being the least urgent.

Examples >>> fpq = FixedPriorityQueue() >>> fpq.enqueue(0, 10) >>> fpq.enqueue(1, 70) >>> fpq.enqueue(0, 100) >>> fpq.enqueue(2, 1) >>> fpq.enqueue(2, 5) >>> fpq.enqueue(1, 7) >>> fpq.enqueue(2, 4) >>> fpq.enqueue(1, 64) >>> fpq.enqueue(0, 128) >>> print(fpq) Priority 0: [10, 100, 128] Priority 1: [70, 7, 64] Priority 2: [1, 5, 4] >>> fpq.dequeue() 10 >>> fpq.dequeue() 100 >>> fpq.dequeue() 128 >>> fpq.dequeue() 70 >>> fpq.dequeue() 7 >>> print(fpq) Priority 0: [] Priority 1: [64] Priority 2: [1, 5, 4] >>> fpq.dequeue() 64 >>> fpq.dequeue() 1 >>> fpq.dequeue() 5 >>> fpq.dequeue() 4 >>> fpq.dequeue() Traceback (most recent call last):

data_structures.queue.priority_queue_using_list.UnderFlowError: All queues are empty >>> print(fpq) Priority 0: [] Priority 1: [] Priority 2: []

__str__() str
dequeue() int

Return the highest priority element in FIFO order. If the queue is empty then an under flow exception is raised.

enqueue(priority: int, data: int) None

Add an element to a queue based on its priority. If the priority is invalid ValueError is raised. If the queue is full an OverFlowError is raised.

queues = [[], [], []]
data_structures.queue.priority_queue_using_list.element_priority_queue()
data_structures.queue.priority_queue_using_list.fixed_priority_queue()