1、优先队列将数据按照优先级顺序排列,优先队列在堆的基础上构建。
2、包裹分拣,取包裹时只关心当前队列中优先级最高的包。
3、数据结构
typedef Heap PQueue;
typedef struct _Parcel{
int mumber;
int data;
}Parcel;
#define pqueue_init heap_init
#define pqueue_destroy heap_destroy
#define pqueue_insert heap_insert
#define pqueue_extract heap_extract
#define pqueue_size heap_size
#define pqueue_peak(pqueue) (pqueue->tree == NULL ? NULL : pqueue->tree[0])
4、从队列中取出优先级最高的包裹
int get_parcel(PQueue *queue, Parcel *parcel)
{
Parcel *data;
if(pqueue_size(queue) == 0)
{
return -1;
}
else
{
if(pqueue_extract(queue, (void **)&data) != 0)
return -1;
else
{
memcpy(parcel, data, sizeof(Parcel));
free(data);
}
}
return 0;
}
5、向队列中插入一个包裹,需要为包裹申请空间
int put_parcel(PQueue *queue, const Parcel *parcel)
{
Parcel *data;
if((data = (Parcel *)malloc(sizeof(Parcel))) == NULL)
return -1;
memcpy(data, parcel, sizeof(Parcel));
if(pqueue_insert(queue, data) != 0)
return -1;
return 0;
}