#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;
}
}
PQueue
最新推荐文章于 2024-11-20 14:04:21 发布