1.用数组表示二叉树的编号,取出数值时是最小值
int heap[N],sz=0;
void push(int x){
int i=sz++;
while(i>0){
int p=(i-1)/2;
if(heap[p]<=x) break;
heap[i]=heap[p];
i=p;
}
heap[i]=x;
}
int pop(){
int ret=heap[0];
int x=heap[sz--];
int i=0;while(i*2+1<sz){
int a=i*2+1,b=i*2+2;
if(b<sz&&heap[b]<heap[a]) a=b;
if(heap[a]>=x) break;
heap[i]=heap[a];
i=a;
}
heap[i]=x;
return ret;
}
2.编程语言的标准库 声明一个从大到小取出数值的优先队列:
#include<bits/stdc++.h> //头文件:"queue"
using namespace std;
int main(){
priority_queue<int>pque;
pque.push(3);
pque.push(5);
pque.push(1);
while(!pque.empty()){
printf("%d\n",pque.top());
pque.pop();
}
return 0;
}
声明一个从小到大取出数值的优先队列:
priority_queue<int,vector<int>,greater<int> >que;