I am new to Python and wanted to make sure my code answers the question for my assignment due.
My Task:
A priority queue is a queue in which each item is assigned a priority and items with a higher priority are removed before those with a lower priority, irrespective of when they were added. Integer values are used for the priorities with a smaller integer value having a higher priority. In an unbounded priority queue, there are no limits on the range of integer values that can be used for the priorities.
• PriorityQueue()
: Creates a new empty unbounded priority queue.
• isEmpty()
: Returns a boolean value indicating whether the queue is empty.
• length()
: Returns the number of items currently in the queue.
• enqueue(item, priority)
: Adds the given item to the queue by inserting it in the proper position based on the given
priority.
• dequeue()
: 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.
• peek()
: Returns a copy of the next item in the queue, without removing the item. The next item is the same value that would be returned by the dequeue operation. An item cannot be dequeued from an empty queue.
My Code:
class Node( object ) :
def __init__( self, cargo = None, next = None ) :
self.cargo = cargo
self.next = next
# Creates a new empty unbounded priority queue
class PriorityQueue :
#
def __init__( self ) :
self.length = 0
self.head = None
self.last = None
# Returns a boolean value indicating whether the queue is empty
def isEmpty( self ) :
return (self.length == 0)
# Returns the number of items currently in the queue
def __len__( self ) :
return len(self.length)
# Adds the given item to the queue by inserting it in the proper position
# based on the given priority. The new node is appeneded to the end of the
# linked list
def enqueue( self, item, priority) :
newNode = Node(cargo)
newNode.next = None
if self.length == 0:
self.head self.last = newNode
newNode.next = self.head
self.head = newNode
self.last.next = newNode
self.last = newNode
temp = self.head
p = self.head.next
while p != None :
if p.cargo > newNode.cargo:
temp = temp.next
p = p.next
break
newNode.next = temp.next
temp.next = 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. The linked list is searched to find the entry with the
# highest priority.
def dequeue( self ) :
cargo = self.head.cargo
self.head = self.head.next
self.length = self.length - 1
if self.length == 0:
self.last = None
return cargo