优先级队列数组实现:
public class PriorityQueue {
private int[] data;
private int size; public PriorityQueue(int size){
data = new int[size];
this.size = 0;
} public void push(int toInsert) throws Exception{
if(size == data.length)
throw new Exception("Queue is full!");
if(size == 0){
data[0] = toInsert;
}else{
int i = size -1;
for( ; i >= 0 ; i--){
if(data[i] < toInsert){
data[i+1] = data[i];
}else{
break;
}
}
data[i+1] = toInsert;
}
size++;
} public int pop() throws Exception{
if(this.size == 0)
throw new Exception("Queue is empty!");
return data[--size];
} public int peek() throws Exception{
if(this.size == 0)
throw new Exception("Queue is empty!");
return data[size-1];
} public int size(){
return this.size;
} public boolean isEmpty(){
return (size == 0);
} public boolean isFull(){
return (size == data.length);
}
}
由于插入操作有可能需要移动数组中的数据项,故插入操作的时间复杂度为(0+N)/2,即O(N)
删除操作的时间复杂度为O(1)