1.优先级队列:
每一次都能取出队列中的具有最高优先权的元素,这种队列就是优先级队列。
2.代码实现
模板类PQueue:
#ifndef PQUEUE_H
#define PQUEUE_H
#include<assert.h>
#include<iostream>
#include<stdlib.h>
using namespace std;
const int DefaultSize=50;
template <class T>
class PQueue
{
public:
/** Default constructor */
PQueue(int sz=DefaultSize):maxSize(sz),num(0)
{
//创建队列空间
pqelements=new T[maxSize];
//断言,动态存储分配是否成功
assert(NULL!=pqelements);
}
/** Default destructor */
~PQueue()
{
delete [] pqelements;
}
bool Insert(const T & x)
{
if(num==maxSize)
return false;
pqelements[num++]=x;
Adjust();
}
bool RemoveMin(T & x)
{
if(0==num)
{
return false;
}
x=pqelements[0];
for(int i=1; i<num; i++)
{
pqelements[i-1]=pqelements[i];
}
num--;
return true;
}
bool GetFront(T &x) const
{
if(0==num)
{
return false;
}
else
{
x=pqelements[0];
return true;
}
}
void MakeEmpty()
{
num=0;
}
bool IsEmpty()const
{
return num==0?true:false;
}
bool IsFull() const
{
return num==maxSize?true:false;
}
int getSize() const
{
return num;
}
protected:
T * pqelements;
int num;
int maxSize;
void Adjust()
{
//将队尾元素按其优先权调整到适当的位置,保持所有元素优先权从小到大有序
T temp=pqelements[num-1];
for(int j=num-2; j>0; j--)
{
if(pqelements[j]<=temp)
break;
else
pqelements[j+1]=pqelements[j];
pqelements[j]=temp;
}
}
};
#endif // PQUEUE_H
main函数:
#include <iostream>
#include<PQueue.h>
using namespace std;
int main()
{
PQueue<int> *pq=new PQueue<int>(5);
for(int i=1; i<6; i++)
pq->Insert(i*5);
int value;
if(pq->GetFront(value))
cout<<"当前最小优先权队列的队首元素是:"<<value<<endl;
for(int i=0;i<5;i++)
{
pq->RemoveMin(value);
cout<<"删除了最小的元素:"<<value<<endl;
}
return 0;
}
3.运行结果:
完整工程代码请点解我的GitHub