优先级队列就是学生去食堂排队打饭,同普通队列一样,队头的先打饭,队尾的后打饭,但是这次有人比较厉害,他要插队,你不听他就打你。哎。
1.和普通的队列一样也有队头和队尾。只是程序中没有给出 ,其head=nItems-1; foot = 0
2.插入数据时,要和之前的数据项进行比较并且根据比较情况 决定是继续与下一个数据项比较还是插入数据。
package javal.util.test;
public class PriorityQueue {
private int maxSize;
private long[] array;
private int nItems;
public PriorityQueue(int size) {
this.maxSize = size;
this.array = new long[maxSize];
this.nItems = 0 ;
}
//insert
public void insert(long l) {
int x;
if(nItems == 0) {
array[nItems++] = l;
}else {
for( x=nItems -1; x>= 0;x--) {// x 队头下标
if(l < array[x]) {
array[x+1] = array[x];
}else {
break;
}
}
array[x+1] = l;
nItems ++;
}
}
public long get() {
return array[--nItems];
}
public long peek() {
return array[nItems - 1];
}
public boolean isFull() {
return nItems == maxSize;
}
public boolean isEmpty() {
return nItems == 0;
}
public int size() {
return nItems;
}
public static void main(String[] args) {
PriorityQueue queue = new PriorityQueue(5);
queue.insert(5);
queue.insert(4);
queue.insert(3);
queue.insert(2);
queue.insert(1);
System.out.println(queue.get());
System.out.println(queue.get());
System.out.println(queue.get());
System.out.println(queue.get());
System.out.println(queue.get());
}
}
优先级队列注意的几点:
1.和普通的队列一样也有队头和队尾。只是程序中没有给出 ,其head=nItems-1; foot = 0
2.插入数据时,要和之前的数据项进行比较并且根据比较情况 决定是继续与下一个数据项比较还是插入数据。
ps:在插入时应该进行Full判断,移除时进行Empty判断。