自己用结构体封装了一个堆。
支持插入,删除,判断是否为空,取出堆顶元素的操作
struct Heap {
int A[20005];//线性表容器
int len;//长度
bool empty() {//判断是否为空
return len==0;
}
void Down(int p) {//Down操作
int key=A[p];
while(p*2<=len) {
int son=2*p;
if(son+1<=len&&A[son+1]<A[son])son++;
if(A[son]>=key)break;
A[p]=A[son];
p=son;
}
A[p]=key;
}
int top() {//取出堆顶元素
return A[1];
}
void push(int p) {//向堆中压入元素
A[++len]=p;
int l=len;
while(l>=2){
if(A[l]>=A[l/2])break;
if(A[l]<A[l/2])swap(A[l],A[l/2]),l/=2;
}
}
void pop() {//从堆顶弹出元素
A[1]=A[len];
len--;
Down(1);
}
}