Write three implementations of a Priority Queue. For this ADT, removal operations always return the object in the queue of highest priority, and if multiple objects have the same priority, the one in the queue the longest shall be returned.

Programming Assignment (PA) #2
Priority Queue

For this assignment, you will write three implementations of a Priority Queue. For this ADT, removal operations always return the object in the queue of highest priority, and if multiple objects have the same priority, the one in the queue the longest shall be returned.
That is, no object of a given priority is ever removed as long as the queue contains one or more object of a higher priority. Within a given priority FIFO order must be preserved. This property is called stable sorting in a sorting algorithm, where two objects with equal keys will need to appear in the same sorted order as they appear in the unsorted order.

Your implementations will be:

1. Ordered Array

2. Linked List

3. Binary Heap

All implementations must have identical behavior, and must implement the Priority Queue
interface (provided). The implementations must have two constructors, a default constructor with no arguments that uses the DEFAULT_MAX_CAPACITY constant from Priority Queue.h, and a constructor that takes a single integer parameter that represents the
maximum capacity of the priority queue.