C++【模板】堆
阿新 • • 發佈:2018-11-01
#include<iostream> using namespace std; void swap(int &a,int &b) { int temp; temp=a,a=b,b=temp; } struct heap{ int num[1000000]; //儲存資料 int sum,now,nxt,nxt1; //總數 bool empty() { return sum==0?1:0; } void push(int a) { num[++sum]=a; now=sum; while(now) { nxt=now>>1; if(num[now]<num[nxt]) { swap(num[now],num[nxt]); } else break; now=nxt; } } void pop() { num[1]=num[sum--]; //根節點刪除,將尾部的調到第一個位置,然後依次向下更新 now=1; while((now<<1)<=sum) { nxt=now<<1; nxt1=nxt+1; if(nxt1<=sum&&num[nxt1]<num[nxt])nxt++; if(num[now]>num[nxt])swap(num[now],num[nxt]); else break; now =nxt; } } void print() { for(int i=1;i<=sum;i++) { cout<<num[i]<<endl; } } };