用堆封装优先级队列

1、优先级队列

优先队列是一种数据结构,能够保证每次出队的是队列中优先级最高的元素(可以自己定义比较器),使用堆的堆顶元素维护这个优先级最高的元素,因为堆具有堆序性,堆顶元素要么是最小的,要么是最大的。

2、具体代码实现
代码中用到的堆
PriorityQueue.h

#pragma once 

#include "Heap.h"

typedef struct PriorityQueue
{
    Heap _hp;
}PriorityQueue;

//初始化队列
void PriorityQueueInit(PriorityQueue *q, Compare com);

//入队
void QueuePush(PriorityQueue *q, DataType data);

//出队
void QueuePop(PriorityQueue *q);

//查看堆顶元素
DataType QueueTop(PriorityQueue *q);

//查看队长
int QueueSize(PriorityQueue *q);

//判断队列是否为空
int QueueEmpty(PriorityQueue *q);

//测试
void TestQueue();
PriorityQueue.c
#include "PriorityQueue.h"

//初始化队列
void PriorityQueueInit(PriorityQueue *q, Compare com)
{
    HeapInit(&q->_hp, com);
}

//入队
void QueuePush(PriorityQueue *q, DataType data)
{
    InsertHeap(&q->_hp, data);
}

//出队
void QueuePop(PriorityQueue *q)
{
    DeleteHeap(&q->_hp);
}

//查看堆顶元素
DataType QueueTop(PriorityQueue *q)
{
    return TopHeap(&q->_hp);
}

//查看队长
int QueueSize(PriorityQueue *q)
{
    return SizeHeap(&q->_hp);
}

//判断队列是否为空
int QueueEmpty(PriorityQueue *q)
{
    return EmptyHeap(&q->_hp);
}


void TestQueue()
{
    PriorityQueue q;

    PriorityQueueInit(&q, Greater);
    QueuePush(&q, 5);
    QueuePush(&q, 9);
    QueuePush(&q, 3);
    QueuePush(&q, 7);
    QueuePush(&q, 8);
    QueuePush(&q, 1);

    DataType top = QueueTop(&q);
    int size = QueueSize(&q);
    int ret = QueueEmpty(&q);

    QueuePop(&q);
    QueuePop(&q);

    top = QueueTop(&q);
    size = QueueSize(&q);
    ret = QueueEmpty(&q);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值