By the end of this module, you should:
- be able to describe the interface of a priority queue ADT
- be able to discern good vs. bad implementations of priority queues
- understand the implementation and use of heaps
- be able to perform the fundamental heap operations
- be able to create a heap from a set of ordered values
- know how to implement a binary heap using an array