最大堆的删除
- 取出根节点(最大值)元素,同时删除堆的一个结点。
ElementType DeleteMax(MaxHeap H)
{
int Parent,Child;
ElementType MaxItem,temp;
if (isEmpty(H))
{
printf("Empty Heap");
return;
}
MaxItem=H->Elements[1];
temp=H->Elements[H->Size--];
for (Parent=1;Parent*2<=H->Size;Parent=Child)
{
Child=Parent*2;
if ((Parent*2<Size) &&(Elements[Parent*2+1]>Elements[Parents*2]))
{
Child++;
}
if (temp>=H->Elements[Child]) break;
Elements[Parent]=Elements[Child];
}
Elements[Parent]=temp;
return MaxItem;
}