package edu.princeton.cs.excercise.ch2; import edu.princeton.cs.introcs.StdOut; /************************************************************************* * Compilation: javac UnorderedArrayMaxPQ.java * Execution: java UnorderedArrayMaxPQ * * Priority queue implementation with an unsorted array. * * Limitations * ----------- * - no array resizing * - does not check for overflow or underflow. * *************************************************************************/ public class UnorderedArrayMaxPQ<Key extends Comparable<Key>> { private Key[] pq; // elements private int N; // number of elements // set inititial size of heap to hold size elements public UnorderedArrayMaxPQ(int capacity) { pq = (Key[]) new Comparable[capacity]; N = 0; } public boolean isEmpty() { return N == 0; } public int size() { return N; } public void insert(Key x) { pq[N++] = x; } public Key delMax() { int max = 0; for (int i = 1; i < N; i++) if (less(max, i)) max = i; exch(max, N-1); return pq[--N]; } /*********************************************************************** * Helper functions. **********************************************************************/ private boolean less(int i, int j) { return (pq[i].compareTo(pq[j]) < 0); } private void exch(int i, int j) { Key swap = pq[i]; pq[i] = pq[j]; pq[j] = swap; } /*********************************************************************** * Test routine. **********************************************************************/ public static void main(String[] args) { UnorderedArrayMaxPQ<String> pq = new UnorderedArrayMaxPQ<String>(10); pq.insert("this"); pq.insert("is"); pq.insert("a"); pq.insert("test"); while (!pq.isEmpty()) StdOut.println(pq.delMax()); } }