码迷,mamicode.com
首页 > 其他好文 > 详细

最大堆

时间:2020-02-18 17:56:58      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:def   大于   parent   return   child   str   else   int   cout   

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

最大堆

最大堆

标签:def   大于   parent   return   child   str   else   int   cout   

原文地址:https://www.cnblogs.com/warmingtxdy/p/12327122.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!