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);
}