提供一个基于定长数组的优先级队列,为了简便,只存储整数,假设数值越大,优先级越高。
工作时该队列按照数值的大小排列,出队时出优先级别最高的元素。
这已经不是普通意义上的队列(先进先出),叫优先级队列只是习惯。
构造函数:初始化队列大小
put:入队
get:出队
isEmpty:是否为空
普通队列请参见LinkedQueue,Queue
另一个实现基于定长数组,见(PriorityQueue)
class PriorityQueue {
private int[] array;
private int top = -1;
PriorityQueue(int capacity) {
array = new int[capacity];
}
void put(int value) {
assert top != array.length -1;
int i;
for(i=++top; i>0; i--) {
if(array[i-1] < value) break;
array[i] = array[i-1];
}
array[i] = value;
}
int get() {
assert top != -1;
return array[top--];
}
boolean isEmpty() {
return top == -1;
}
//测试代码
public static void main(String[] args) {
PriorityQueue q = new PriorityQueue(3);
assert q.isEmpty();
q.put(10);
q.put(5);
q.put(20);
assert !q.isEmpty();
assert q.get() == 20;
assert q.get() == 10;
assert q.get() == 5;
assert q.isEmpty();
}
}