优先队列是使用二叉堆来实现
其中很重要的两个操作,一个是插入,另一个是删除最优先值(这里认为是最小值)
其中插入操作可以这样实现:
把X放入二叉堆的最后端,然后再通过“上滤”操作把X放到相应位置
删除操作可以这样实现:
把最顶端的元素(即)最小值删除,然后把堆中最后一个元素先放到最顶端,然后通过“下滤”操作来使其到达正确位置
代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef int ElementType;
#define MinData -1
typedef struct HeapStruct *PriorityQueue;
struct HeapStruct {
ElementType *Elements;
int Capacity;
int Size;
};
PriorityQueue Initialize( int MaxElements ); /* details omitted */
void PercolateUp( int p, PriorityQueue H );
void PercolateDown( int p, PriorityQueue H );
void Insert( ElementType X, PriorityQueue H )
{
int p = ++H->Size;
H->Elements[p] = X;
PercolateUp( p, H );
}
ElementType DeleteMin( PriorityQueue H )
{
ElementType MinElement;
MinElement = H->E