public class NaiveHeap { private int storedItemsVal = 0; // number of items stored private int minVal = -1; // current minimum private int leftEndVal; // smallest integer in range // that can be stored private int lengthVal; // length of range of ints // that can be private boolean[] Members; // records which items in range have been // inserted public int length() // length of tree (number of items in range) { return lengthVal; } public int storedItems() // number of items currently stored { return storedItemsVal; } public int findMin() // current minimum (-1 if nothing stored) { return minVal; } public int leftEnd() // first integer in the tree's range { return leftEndVal; } public boolean isEmpty() // true if nothing currently stored { return storedItems() == 0; } // true if i is in the tree's range of integers it can store public boolean inRange(int i) { return (i >= leftEnd() && i < leftEnd() + length()); } public boolean insert(int i) // insert a new element { if (! inRange(i)) // if out of range return false; else if (Members[i - leftEnd()]) // if already stored return false; else { Members[i - leftEnd()] = true; // store the new item storedItemsVal++; // if minimum stored value has changed if (storedItems() == 1 || i < findMin()) minVal = i; return true; } } // extract the minimum element ... public int extractMin() { if (isEmpty()) return -1; int oldMin = findMin(); storedItemsVal--; Members [oldMin - leftEnd()] = false; if (isEmpty()) minVal = -1; else // look for new minimum ... for (int j = leftEnd(); j < leftEnd() + length(); j++) if (Members[j - leftEnd()]) { minVal = j; break; } return oldMin; } // print out current set of items stored in the tree ... public void printContents() { for (int i=0; i < length(); i++) if (Members[i]) System.out.print ((i + leftEnd()) + " "); } // constructor public NaiveHeap(int leftRange, int len) { leftEndVal = leftRange; lengthVal = len; storedItemsVal = 0; minVal = -1; Members = new boolean[len]; for (int i = 0; i < len; i++) Members[i] = false; } }