优先级队列的源代码: package com.priorityquence; /** * * @author kinglong1203 2011.2.20 * */ public class MaxPriorityQuence { private int size ; private int quenceSize; private int[] array; public MaxPriorityQuence(){ size = 50; quenceSize = 0; array = new int[size]; } public MaxPriorityQuence(int size) { super(); this.size = size; this.quenceSize = 0; array = new int[size]; } public int getSize() { return size; } public void setSize(int size) { this.size = size; } public int getQuenceSize() { return quenceSize; } public void setQuenceSize(int quenceSize) { this.quenceSize = quenceSize; } public boolean isFull(){ if(quenceSize == size){ return true; } return false; } public boolean isEmpty(){ if(quenceSize < 1){ return true; } return false; } public void maxPriorityIncrease(int i,int x){ if(x < array[i-1]){ System.out.println("该值比现有值小,不能增加!"); } i = i -1; array[i] = x; while(i>0 && array[(i-1)/2] < array[i]){ int temp = array[i]; array[i] = array[(i-1)/2]; array[(i-1)/2] = temp; i = (i-1)/2; } } public void maxPriorityInsert(int x){ if(!isFull()){ array[quenceSize] = Integer.MIN_VALUE; quenceSize++; maxPriorityIncrease(quenceSize,x); } else { System.out.println("队列已满!"); } } //获得优先级最大的元素, public int maximum(){ buildMaxHeap(); return array[0]; } //提取优先级最大的元素,队列中删除该元素 public int extractMax(){ if(quenceSize < 1){ System.err.println("队列为空!"); return -1; } quenceSize--; int max = array[0]; array[0] = array[quenceSize]; maxPriority(1); return max; } //创建最大堆 private void buildMaxHeap(){ for(int i = quenceSize/2; i >= 2;i--){ maxPriority(i); } } //从i开始调整成最大堆 private void maxPriority(int i){ int s = i - 1; for(int j = 2*s+1;j<quenceSize;j = j*2+1){ if(j < quenceSize-1 && array[j] < array[j+1]) j++; if(array[s] >= array[j]) break; int temp = array[s]; array[s] = array[j]; array[j] = temp; s = j; } } //打印队列 public void printQuence(){ for(int i = 0; i < quenceSize; i++){ System.out.print(" " + array[i]); } System.out.println(" "); } } 测试代码: package com.priorityquence; /** * * @author kinglong1203 2011.2.20 * */ public class MaxPriorityQuenceTest { /** * @param args */ public static void main(String[] args) { MaxPriorityQuence maxPriority = new MaxPriorityQuence(); maxPriority.maxPriorityInsert(15); maxPriority.maxPriorityInsert(13); maxPriority.maxPriorityInsert(9); maxPriority.maxPriorityInsert(5); maxPriority.maxPriorityInsert(12); maxPriority.maxPriorityInsert(8); maxPriority.maxPriorityInsert(7); maxPriority.maxPriorityInsert(4); maxPriority.maxPriorityInsert(0); maxPriority.maxPriorityInsert(6); maxPriority.maxPriorityInsert(2); maxPriority.maxPriorityInsert(1); System.out.println("优先级最高的是: "+maxPriority.maximum()); maxPriority.printQuence(); maxPriority.maxPriorityInsert(10); System.out.println("优先级最高的是: "+maxPriority.maximum()); maxPriority.extractMax(); maxPriority.printQuence(); } }