[Java数据结构]线性表之优先级队列PriorityQueue

来源:互联网 发布:淘宝上怎么好评改差评 编辑:程序博客网 时间:2024/06/07 22:36

这里只探讨最简单的java数据结构

》》PriorityQueue

优先级队列会对入队的元素进行排序,所以在队列顶端的总是最小(或最大)的元素,这里取决于你对优先级的判断。

顶端是队头,n方向才是队头,而不是0。

即,优先级设定为元素小的,那么插入的值越小就会越排在队头最先被弹出。

优先级队列不同于队列,优先级的队列的队头在优先级高的地方,而不是传统的先进就是队头后进就是队尾。

》》插入和删除

插入慢,但是删除很快

》》代码思路

插入:先检查是否有数据项,有则插入arr[0]
如果有,则从队头(即n处向前遍历,比较arr[j]和插入数值的大小,优先级高的排在前面,将插入数值放入合适的位置
移出:弹出,从优先级高的地方,即队头(N处)逐一弹出

》》代码

package 栈和队列;/* *  * 本例设定数字越小优先级越高 * 小的数字会插在队头,越大会越排在队尾。 * */class priQueArr {private int maxSize;private long[] queArrary;private int n;public priQueArr(int size) {maxSize = size;queArrary = new long[maxSize];n = 0;}public void insert(int i) {int j;if(n==0){queArrary[n++]=i;}else{for(j=n-1;j>=0;j--){//从最后开始,往前比较if(i>queArrary[j]){queArrary[j+1]=queArrary[j];//交换(还没有插入,而是空位交换,即里面的数字让位)}else{//如果不需要移动break;//跳出for循环,j不会再自减}}queArrary[j+1]=i;//插入,先插入,n++;}}public boolean isEmpty() {return (n==0);}public boolean isFull(){return (n==maxSize);}public long remove() {return queArrary[--n];//最小的先弹出}}public class PriorityQue {public static void main(String[] args) {priQueArr arr = new priQueArr(10);arr.insert(2);arr.insert(4);arr.insert(1);arr.insert(1);while (!arr.isEmpty()) {long item = arr.remove();System.out.print(item + " ");}}//1 1 2 4}