#include <assert.h> #include <stdlib.h> #include <iostream> const int DEFAULT_PQ_SIZE = 50; template<typename T> class PQueue { public: PQueue(int sz = DEFAULT_PQ_SIZE); ~PQueue() { delete[] elems; } bool insert(const T& x); bool remove_min(T& x); bool get_front(T& x) const; void make_empty() { count = 0; } bool is_empty() const { count == 0; } bool is_full() const { count == maxsize; } int get_size() const { return count; } protected: T *elems; int count; int maxsize; void adjust(); }; template<typename T> PQueue<T>::PQueue(int sz): maxsize(sz), count(0) { elems = new T[maxsize]; } template<typename T> bool PQueue<T>::insert(const T& x) { if (is_full()) return false; elems[count++] = x; adjust(); } template<typename T> void PQueue<T>::adjust() { T temp = elems[count - 1]; int j ; for (j = count - 2; j >= 0; j--) { if (elems[j] <= temp) break; else elems[j + 1] = elems[j]; } elems[j + 1] = temp; } template<typename T> bool PQueue<T>::remove_min(T& x) { if (is_empty()) return false; x = elems[0]; for (int i = 1; i < count; i++) elems[i - 1] = elems[i]; count--; return true; } template<typename T> bool PQueue<T>::get_front(T& x) const { if (is_empty()) return false; else { x = elems[0]; return true; } }