最小优先级队列
每次插入元素后对其排序,使其从小到大排序
Code:
#include<iostream>
using namespace std;
template<class T>
class PQueue
{
private:
T *pelements;
int count;
int maxSize;
void adjust();
public:
PQueue(int =100);
~PQueue() { delete [] pelements;}
bool Insert(const T& x);
bool RemoveMin(T& x);
void Print();
bool IsFull() { return count==maxSize?true:false;}
bool IsEmpty() { return count==0?true:false;}
};
template<class T>
PQueue<T>::PQueue(int sz)
{
maxSize=sz;
count=0;
pelements=new T[maxSize];
}
template<class T>
bool PQueue<T>::Insert(const T& x)
{
if(IsFull()) return false;
pelements[count++]=x;
adjust();
return true;
}
template<class T>
void PQueue<T>::adjust()
{
T temp=pelements[count-1];
int i;
for(i=count-2;i>=0;--i)
{
if(temp>=pelements[i])
break;
else
pelements[i+1]=pelements[i];
}
pelements[i+1]=temp;
}
template<class T>
bool PQueue<T>::RemoveMin(T& x)
{
if(IsEmpty()) return false;
x=pelements[0];
int j;
for(j=1;j<count;++j)
pelements[j-1]=pelements[j];
count--;
return true;
}
template<class T>
void PQueue<T>::Print()
{
for(int j=0;j<count;++j)
cout<<pelements[j]<<" ";
}
int main()
{
PQueue<int> A(5);
for(int i=1;i<=5;++i)
A.Insert(i);
int j;
A.RemoveMin(j);
A.Insert(-5);
A.Print();
system("pause");
return 0;
}