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; }
最大堆(升序大顶堆, 降序小顶堆)
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int maxn = 1e7 + 5; int n, m, k, sum, a[maxn]; string s; queue<int> q; void up(int p){ while(p > 1 && a[p] > a[p / 2]){ swap(a[p], a[p / 2]); p = p / 2; } } void down(int p){ while(p * 2 <= n){ int u = p * 2; if(u + 1 <= n && a[u + 1] > a[u]){ u++; } if(a[u] > a[p]){ swap(a[u], a[p]); p = u; } else break; } } void makeheap(){ for(int i = n / 2; i >= 1; i--){ down(i); } } void push(int x){ a[++n] = x; up(n); } int top(){ return a[1]; } void pop(){ swap(a[1], a[n--]); down(1); } int main(){ //ios_base::sync_with_stdio(0); //cin.tie(); cout.tie(); n = 10; for(int i = 1; i <= n; i++) a[i] = i; makeheap(); for(int i = 1; i <= 10; i++){ push(i + 10); } while(n > 0){ cout<<top()<<endl; pop(); } return 0; }
c++
原文链接: https://www.cnblogs.com/acwarming/p/12327122.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/330284
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!