Priority Queue ADT
A priority queue holds a bag of (priority, data) pairs.
Priority values are totally ordered.
[(2, Sue), (5, Joe), (9, Amy), (9, Sam), (9, Amy)]
IsEmpty( ) fIsEmpty: Q ? {true, false}
Insert(priority, data) fInsert: Q ? P ? D ? Q
DeleteMin( ) fDeleteMin: Q ? Q ? P ? D
Q = space of priority queues
P = space of priority values