优先队列的声明
typedef ElementType int;
struct HeapStruct{
int Capacity;
int size;
ElementType *Elements;
};
typedef struct HeapStruct *PriorityQueue;
PriorityQueue Initialize(int MaxElements)
{
PriorityQueue H;
if(MaxElements < MinPQSize)
Error("Priority queue size is too small");
H = malloc(sizeof(struct HeapStruct));
if(H == NULL)
FatalError("Out of Space!!!");
H->Element = malloc((MaxElements + 1) * sizeof(ElementType));
if(H->Element == NULL)
FatalError("Out of Space!!!");
H->Capacity = MaxElements;
H->Size = 0;
H->Element[0] = Mindata;
return H;
}
插入:上滤
void Insert(ElementType X, ProrityQueue H)
{
int i;
if(IsFull(H))
{
Error("Priority queue is full");
return;
}
for(i = ++H->Size; H->Elements[i / 2] > X; i /= 2)
H->Elements[i] = H->Elements[i / 2];
H->Elements[i] = X;
}
删除最小元:下滤
ElementType DeleteMin(ProrityQueue H)
{
int i, Child;
ElementType MinElement, LastElement;
if(IsEmpty(H))
{
Error("Priority queue is empty");
return H->Elements[0];
}
MinElement = H->Elements[1];
LastElement = H->Elements[H->Size--];
for(i = 1; i * 2 <= H->Size; i = Child)
{
Child = i * 2;
if(Child != H->Size && H->Elements[Child + 1] < H->Elements[Child])
Child++;
if(LastElement > H->Elements[Child])
H->Elements[i] = H->Elements[Child];
else
break;
}
H->Elements[i] = LastElement;
return MinElement;
}