#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define MaxSize 100
typedef struct
{
int key;
}element;
element heap[MaxSize];
void insert_max_heap(element item,int *n);//最大堆的插入操作
element delete_max_heap(int *n);最大堆的删除操作
void main()
{
int n=0;
element b[5]={2,0,9,7,5};
insert_max_heap(b[0],&n);
insert_max_heap(b[1],&n);
insert_max_heap(b[2],&n);
insert_max_heap(b[3],&n);
insert_max_heap(b[4],&n);
for (int i = 0; i < 6; ++i)
{
printf("%d\n", delete_max_heap(&n) ); /* code */
}
}
void insert_max_heap(element item,int *n)//最大堆的插入操作
{/用的是数组
靠引理5-3 (p124)
两两交换
int i;
if( (*n)>=MaxSize )/判断满
{
fprintf(stderr,"the heap is full. \n");
exit(1);
}
i=++(*n);
while((i!=1)&&(item.key>heap[i/2].key))
{
heap[i]=heap[i/2];
i/=2;
}
heap[i]=item;
}
element delete_max_heap(int *n)/最大堆的删除操作
{ //
//
int parent,child;
element item,temp;
if( (*n-1)<=-1 )
{
fprintf(stderr,"the heap is empty. \n");
exit(1);
}
item=heap[1];/这就是返回值
temp=heap[(*n)--];
parent=1;
child=2;
while(child<=*n)
{
if((child<*n)&&(heap[child].key<heap[child+1].key))
child++;
if(temp.key>=heap[child].key)break;
heap[parent]=heap[child];/两两交换的关键语句
parent=child;
child*=2;
}
heap[parent]=temp;/最后不满足条件时赋值
return item;
}
最大堆
最新推荐文章于 2021-03-04 16:22:37 发布