最大堆

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;
}

最大堆

以上是关于最大堆的主要内容,如果未能解决你的问题,请参考以下文章

Java实现堆(最大堆,最小堆)

最大堆的ADT实现

C# 最有用的(自定义)代码片段是啥? [关闭]

C++ STL的multiset问题(最大堆)

我在 Python 中使用啥来实现最大堆?

前端开发中最常用的JS代码片段