优先级队列:
在优先级队列中,数据项按关键字的值有序,这样关键字最小的数据项(或最大)总是在
队头。数据项插入时会按照顺序插入到合适的位置以确保队列的顺序。
package test13_priorityqueue;
/**
* Created by mlink on 2017/3/17.
*/
public class PrioprityQueue {
private long[] arr;
private int maxSize;//最大空间
private int elems;//有效元素大小
public PrioprityQueue(int maxSize){
this.maxSize =maxSize;
arr = new long[maxSize];
elems =0;
}
//插入数据
public void insert(long value){
int i;
for (i = 0; i <elems ; i++) {
if(arr[i]<value){
break;
}
}
for (int j = elems; j >i ; j--) {
arr[j] = arr[j-1];
}
arr[i] = value;
elems++;
}
//移除数据
public long remove(){
long value = arr[elems-1];
elems--;
return value;
}
//是否为空
public boolean isEmpty(){
return (elems==0);
}
//是否满了
public boolean isFull(){
return (elems==maxSize);
}
//返回有效数字大小
public int size(){
return elems;
}
}
测试
package test13_priorityqueue;
/**
* Created by mlink on 2017/3/17.
*/
public class Test {
public static void main(String[] args) {
PrioprityQueue pq = new PrioprityQueue(10);
pq.insert(50);
pq.insert(40);
pq.insert(30);
pq.insert(20);
pq.insert(10);
while (!pq.isEmpty()){
long value = pq.remove();
System.out.print(value+" ");
}
}
}
打印:
10 20 30 40 50
表明在队列中,10优先级最高,从小到大,插入的是从大到小,这里提现了优先级