优先队列简单实现
笔记(2018-11-25)
#include <iostream>
#include <cstdlib>
#include <ctime>
#define mx 1000
using namespace std;
int elem[mx],len=0;
void preDown(int hole){
int child;
int tmp=elem[hole];
for(;2*hole<=len;hole=child){
child=2*hole;
if(child!=len&&elem[child]>elem[child+1])++child;
if(tmp>elem[child])elem[hole]=elem[child];
else break;
}
elem[hole]=tmp;
}
void buildHeap(){
for(int k=len/2;k>0;--k) preDown(k);
}
void enque(const int &x){
int hole=++len;
for(;hole>1&&x<elem[hole/2];hole/=2)elem[hole]=elem[hole/2];
elem[hole]=x;
}
int dequex(){
int minx=elem[1];
elem[1]=elem[len--];
preDown(1);
return minx;
}
int main(){
int num;
srand(time(NULL));
for(int i=0;i<10;++i){
num=rand()%10;
enque(num);
}
for(int i=0;i<10;++i){
cout<<dequex()<<" ";
}
return 0;
}