Sign up ×
Code Review Stack Exchange is a question and answer site for peer programmer code reviews. It's 100% free, no registration required.

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
share|improve this question
    
It's unrealistic to do a thorough code review if your code is due tomorrow. We're glad you found the site, and I'm sure you'll get some good answers, but for now I would suggest to test for correctness so that you don't turn in some incorrect code for your assignment. – Phrancis Apr 15 at 1:10
    
@sᴉɔuɐɹɥԀ Sorry I meant to put Thursday, my computer autotyped. – Lindsey Apr 15 at 1:14
    
OK. I made a few edits to make your question a bit better formatted. Hope you get some great answers! – Phrancis Apr 15 at 1:21

1 Answer 1

A Priority Queue is synonymous with a heap so I'm assuming that the implication in this assignment was to implement a maximally efficient data structure.

The optimal implementation is spelled out in Wikipedia: http://en.m.wikipedia.org/wiki/Heap_(data_structure)

If it were me, I would use a tree instead of a list. There is no Node class. A Heap object has two nullable Heap children, and every operation is recursive in nature. Length, for example, would just return each child's length or 1 if no children existed. The other operations would take advantage of the tree's structure in order to return results in logarithmic time.

share|improve this answer
    
Python has a built-in heap implementation (see the heapq module) so it would make sense to use that and not write your own. Also, Python doesn't have "nullable" types as such — perhaps you are thinking of C#? – Gareth Rees Apr 15 at 11:53
    
Yes, you are correct on both fronts. I meant "nullable" in the sense that the reference will either be a Heap or None – Scott Lobdell Apr 15 at 16:00
    
my assignment specifically says to use linked lists!!!! – Lindsey Apr 15 at 18:27

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.