数据结构 小顶堆的插入与删除操作
int insertIntoHeap(struct Heap* h, int x){
if(h->size==h->capacity)
return 0;
int i;
i=++h->size;
for(;x<h->data[i/2];i/=2)
{
h->data[i]=h->data[i/2];
if (i/2 == 0) break;
}
h->data[i]=x;
return 1;
}
int deleteMin(struct Heap* h, int* pElement){
if(h->size==0)
return 0;
*pElement=h->data[1];
int temp=h->data[h->size--];
int parent,child;
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;
else
h->data[parent]=h->data[child];
}
h->data[parent]=temp;
return 1;
}