删除大顶堆的根结点
将堆的最后一位补至堆顶,然后对堆进行调整
将根结点的两个子结点中最大的与最后一位比较,将较大的放至根节点,若放的不是最后一位,那么以刚才的子结点为根结点,重复之前的操作。
typedef int ElementType;
struct Heap
{
ElementType *data;
int size,capacity;
};
void DeleteMax(Heap *h)
{
int parent,child;
if(h->size==0)
return;
ElementType temp;
h->size--;
tmp=h->size;
for(parent=1;parent*2<=h->size;parent=child)
{
child=parent*2;
if(child!=h->size&&h->data[child]<h->data[child+1])
child++; //寻找最大的子结点
if(temp>h->data[child])
break;
h->data[parent]=h->data[child];
}
h->data[parent]=temp;
}