一、数组实现基于堆的优先队列
/*
数组实现基于堆的优先队列
*/
public class MaxPQ<Key extends Comparable<Key>> {
private Key[] pq;
private int N=0;
public MaxPQ(int MaxN){
pq= (Key[]) new Comparable[MaxN+1];
}
public boolean isEmpty(){
return N==0;
}
public int size(){
return N;
}
public void insert(Key k){
N++;
if((N+1)==(pq.length))
resize((pq.length)*2);
pq[N]=k;
swim(N);
}
public Key delMax(){
Key max=pq[1];
exch(1,N--);
pq[N+1]=null;
//N要加1,如果不加,那么最后一个元素取不出来
if(N+1<((pq.length)-1)/4)
resize((pq.length)/2);
sink(1);
return max;
}
private boolean less(int i,int j){
return pq[i].compareTo(pq[j])<0;
}
private void exch(int i,int j){
Key temp=pq[i];
pq[i]=pq[j];
pq