优先队列是一种强调顺序的队列,和普通队列一样,遵循先入先出的规则,不同是在放入元素时,就已经按照某种方案进行了优先级的排序,通常是在添加的数据项中给定一套关键字,依照重要程度将关键字小的放在队尾或者队头。剩下的查看,移除操作都和普通队列一样。
这次的java代码实现,规定升序排列元素,并且取队尾的形式展示。
package com.test; public class Test { public static void main(String[] args) { priorityQ q = new priorityQ(10); q.insert(1); q.insert(2); q.insert(3); q.insert(4); q.remove(); long m = q.peekMin(); System.out.println("min:"+m); } } /** * 优先队列 * @author jingxin * */ class priorityQ{ private int maxSize; // 队列大小 private long[] queArray; // 基于数组 private int nElems; // 元素下标 public priorityQ(int s){ maxSize = s; queArray = new long[maxSize]; nElems = 0; } // 添加元素(元素值小的在上) public void insert(long item){ int j; if(nElems == 0){ queArray[nElems++] = item; }else{ // 添加的元素与之前加的元素比较,升序排 for (j = nElems-1; j >=0; j--) { if(item>queArray[j]){ queArray[j+1] = queArray[j]; }else{ break; } } // 此时的j是上面最后一次交换的位置 queArray[j+1] = item; nElems++; } } // 移除元素 public long remove(){ return queArray[--nElems]; } // 查看元素 public long peekMin(){ return queArray[nElems-1]; } public boolean isEmpty(){ return nElems==0 ; } public boolean isFull(){ return nElems==maxSize; } }