优先队列 算法导论 java语言

来源:互联网 发布:身体域纳米网络 编辑:程序博客网 时间:2024/05/22 13:08
<pre name="code" class="java">public class PriorityQueue {private int heapsize=0;public final static int MIN=-10000;    private final static int CAPACITY = 16;     private int[] quene = new int[CAPACITY];     public static void main(String[] args) {PriorityQueue q = new PriorityQueue();System.out.println("插入2 6 3 8 7 9 1 10 9!");q.insert(2); q.insert(6); q.insert(3); q.insert(8); q.insert(7); q.insert(9); q.insert(1); q.insert(10);q.insert(9); System.out.println("最大值:"+q.getMaximum());System.out.println("最大值:"+q.extractMax()+"取出"); System.out.println("最大值:"+q.extractMax()+"取出"); System.out.println("插入9 1 10!");q.insert(9); q.insert(1); q.insert(10); System.out.println("最大值:"+q.extractMax()+"取出"); System.out.println("最大值:"+q.extractMax()+"取出"); System.out.println("最大值:"+q.extractMax()+"取出"); System.out.println("最大值:"+q.extractMax()+"取出"); }public int getMaximum() {return quene[0];}public int extractMax() {if(heapsize < 1) {System.err.println("heap underflow!");}int max = quene[0];quene[0] = quene[heapsize-1];heapsize--;maxHeapify(0);return max;}public void insert(int key) {heapsize++;quene[heapsize-1] = MIN;increaseKey(heapsize-1,key);}private void increaseKey(int i,int key) {if(key < quene[i]) {System.err.println("new key is smaller than current key");}quene[i]=key;while(i>0 && quene[parent(i)]<quene[i]) {exchange(i,parent(i));i=parent(i);}}private void exchange(int i, int j) {int temp = quene[i];quene[i] = quene[j];quene[j] = temp;}private void maxHeapify( int i) {int largest=0;int l = Left(i);int r = Right(i);if(l < heapsize && quene[l] > quene[i]) {largest = l;} else {largest = i;}if(r < heapsize && quene[r] > quene[largest]) {largest = r;}if(largest != i) {exchange(i,largest);maxHeapify(largest);}}private int parent(int i) {return (i-1)/2;}private int Right(int i) {return (2*i+2);}private int Left(int i) {return (2*i+1);}}



运行结果为:

插入2 6 3 8 7 9 1 10 9!最大值:10最大值:10取出最大值:9取出插入9 1 10!最大值:10取出最大值:9取出最大值:9取出最大值:8取出





































































































q.insert(1); 
0 0