最大堆
Posted warmingtxdy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最大堆相关的知识,希望对你有一定的参考价值。
typedef struct HeapStruct *MaxHeap; struct HeapStruct{ int *Elements;/* 存储堆元素的数组 */ int Size;/* 堆的当前元素个数 */ int Capacity;/* 堆的最大容量 */ }; MaxHeap Create(int MaxSize){ /* 创建容量为MaxSize的空的最大堆 */ MaxHeap H = malloc(sizeof(struct HeapStruct)); H->Elements = malloc((MaxSize+1) * sizeof(int)); H->Size = 0; H->Capacity = MaxSize; H->Elements[0] = MaxData; /* 定义“哨兵”为大于堆中所有可能元素的值,便于以后更快操作 */ return H; } void Insert(MaxHeap H,int item){ int i; if(Isfull(H)){ cout<<"堆满了"<<endl; return; } i = ++H->Size; for(; H->Elements[i/2] < item; i/=2){ H->Elements[i] = H->Elements[i/2]; } H->Elements[i] = item; } int DeleteMax(MaxHeap H){ int Parent,Child; int MaxItem,temp; if(Isempty(H)){ cout<<"最大堆空"<<endl; return; } MaxItem = H->Elements[1]; temp = H->Elements[H->Size--]; for(Parent = 1; Parent*2 <= H->Size; Parent = Child){ Child = Parent * 2; if((Child != H->Size)&& (H->Elements[Child] < H->Elements[Child+1])) Child++; if(temp >= H->Elements[Child])break; else H->Elements[Parent] = H->Elements[child]; } H->Elements[Parent] = temp; return MaxItem; }
最大堆
以上是关于最大堆的主要内容,如果未能解决你的问题,请参考以下文章