【待完善】基于二叉堆的优先队列代码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wingrez/article/details/84536565
#define MAXN 10 //最大元素个数 
int N;//当前二叉堆中的元素个数 
int pq[MAXN+1];//二叉堆数组 

bool less(int i,int j){
	return pq[i]<pq[j];
}

void exch(int i,int j){
	int t=pq[i];pq[i]=pq[j];pq[j]=t;
}

void swim(int k){
	while(k>1 && less(k/2,k)){
		exch(k/2,k);
		k=k/2;
	}
}

void sink(int k){
	while(2*k<=N){
		int j=2*k;
		if(j<N && less(j,j+1))j=j+1;
		if(!less(k,j)) break;
		exch(k,j);
		k=j;
	}
}

void insert(int v){
	pq[++N]=v;
	swim(N);
} 

int delMax(){
	int max=pq[1];
	exch(1,N);
	N--;
	sink(1);
	return max;
}

猜你喜欢

转载自blog.csdn.net/wingrez/article/details/84536565