15、优先队列应用-包裹分拣

来源:互联网 发布:压缩视频的软件 编辑:程序博客网 时间:2024/04/29 07:37

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;}
原创粉丝点击