1.优先队列中出入一个新元素(节点)
void Insert(ElementType X,PriorityQueue 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;
}
2.优先队列中取出最小值(根)
ElementType DeleteMin(PriorityQueue H)
{
int i,Child;
ElementType MinElement,LastElement;
if(IsEmpty(H))
{
Error("Priority queue is empty")
return H->Elements[0];
}
MineElement=H->Elements[1];
LastElement=H->Element[HSize--];
for(i=1;i*2<=H->Size;i=Child)
{
Child=i*2;
if(Child!=H->Size && H->Elememnts[Child+1]<H->Elements[Child]){
Child++;
}
if(LastElement>H->Elements[Child]){
H->Elements[i]=H->Element[Child];
}
else{
break;
}
}
H->Elements[i]=LastElement;
return MinElement;
}