下面代码为优先级队列的java实行
public class PriorityQueue {
private int capacity = 16;
private int [] quene= new int[capacity];
private int heapsize = 0;
/**
* 返回最大值
* @return
*/
public int maximum(){
return quene[0];
}
/**
* 插入一个元素
* @param value
*/
public void insert(int value){
quene [heapsize] = value;
heapsize ++;
increasekey(heapsize,value);
}
public void increasekey(int heapindex,int newValue){
if(newValue<quene[heapindex-1]){
return ;
}
quene[heapindex-1] = newValue;
int parentIndex = heapindex/2;
while(parentIndex>0&&quene[parentIndex-1]<newValue){
int temp = quene[parentIndex-1];
quene[parentIndex-1] = newValue;
quene[heapindex-1] = temp;
heapindex = parentIndex;
parentIndex = parentIndex/2;
}
}
/**
* 获取最大值并更新队列
* @return
*/
public int extractMax(){
if(heapsize<1){
return -1;
}
int max = quene[0];
quene[0] = quene[heapsize-1];
heapsize --;
maxHeapify(quene,1);
return max;
}
/**
* 保持最大堆性质
* @param array
* @param index
*/
public void maxHeapify(int array[],int index){
int l = index*2;
int r = index*2+1;
int largest;
if(l<=heapsize && array[l-1]>array[index-1]){
largest = l;
}else{
largest = index;
}
if(r<=heapsize && array[r-1]>array[largest-1]){
largest = r;
}
if(largest!=index){
int temp = array[index-1];
array[index-1] = array[largest-1];
array[largest-1] = temp;
}
}
/**
* 删除堆中的一个元素
* @param index
*/
public void heapDelete(int heapIndex){
if(heapIndex>heapsize){
//超出堆的大小
return ;
}
int arrayIndex = heapIndex;
int key = quene[arrayIndex-1];
quene[arrayIndex-1] = quene[heapsize-1];
heapsize--;
if(arrayIndex>1){
int parentIndex = arrayIndex/2;
if(parentIndex>1){
while(parentIndex>1 && quene[arrayIndex-1]>quene[parentIndex-1]){
int temp = quene[parentIndex-1];
quene[parentIndex-1] = quene[arrayIndex-1];
quene[arrayIndex-1] = temp;
arrayIndex = parentIndex;
parentIndex = parentIndex/2;
}
}
}else{
maxHeapify(quene,arrayIndex);
}
}