首页 > 代码库 > Java数据结构与算法(4) - 队列(Queue和PriorityQ)
Java数据结构与算法(4) - 队列(Queue和PriorityQ)
队列: 先进先出(FIFO)。
优先级队列: 在优先级队列中,数据项按照关键字的值有序,关键字最小的数据项总在对头,数据项插入的时候会按照顺序插入到合适的位置以确保队列的顺序,从后往前将小于插入项的数据项后移。在图的最小生成树算法中应用优先级队列。
示例代码:
package chap04.Queue;class Queue { private int maxSize; private long[] queArray; private int front; private int rear; private int nItems; public Queue(int s) { maxSize = s; queArray = new long[maxSize]; front = 0; rear = -1; nItems = 0; } // 插入方法,队尾是数组的最后一项 public void insert(long j) { if (rear == maxSize - 1) { rear = -1; } queArray[++rear] = j; nItems++; } // 先进先出 public long remove() { long temp = queArray[front++]; if (front == maxSize) { front = 0; } nItems--; return temp; } public long peekFront() { return queArray[front]; } public boolean isEmpty() { return (nItems == 0); } public boolean isFull() { return (nItems == maxSize); } public int size() { return nItems; }}class PriorityQ { private int maxSize; private long[] queArray; private int nItems; public PriorityQ(int s) { maxSize = s; queArray = new long[maxSize]; nItems = 0; } // 插入方法,从大到小排列 public void insert(long item) { int j; if (nItems == 0) { queArray[nItems++] = item; } else { for (j = nItems - 1; j >= 0; j--) { if (item > queArray[j]) { // if new item larger, queArray[j + 1] = queArray[j]; } else { break; } } queArray[j + 1] = item; nItems++; } } // 按照优先级从后往前移除,不再跟先进还是后进有关 public long remove() { return queArray[--nItems]; } public long peekMin() { return queArray[nItems - 1]; } public boolean isEmpty() { return (nItems == 0); } public boolean isFull() { return (nItems == maxSize); }}class QueueApp { public static void main(String[] args) { Queue theQueue = new Queue(5); theQueue.insert(10); theQueue.insert(20); theQueue.insert(30); theQueue.insert(40); theQueue.remove(); theQueue.remove(); theQueue.remove(); theQueue.insert(50); theQueue.insert(60); theQueue.insert(70); theQueue.insert(80); while (!theQueue.isEmpty()) { long n = theQueue.remove(); System.out.print(n); // 40, 50, 60, 70, 80 System.out.print(" "); } System.out.println(""); PriorityQ thePQ = new PriorityQ(5); thePQ.insert(30); thePQ.insert(50); thePQ.insert(10); thePQ.insert(40); thePQ.insert(20); while (!thePQ.isEmpty()) { long item = thePQ.remove(); System.out.print(item + " "); // 10, 20, 30, 40, 50 } System.out.println(""); }}
Java数据结构与算法(4) - 队列(Queue和PriorityQ)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。