/** *
* Heap.java * * Revisions: 1.0 Oct. 27, 2002 * Created the Heap class * 1.1 Oct. 27, 2002 * Compiled, Finished * 1.2 Oct. 27, 2002 * Commented * ** * Collaboration Statement: * I worked on the homework assignment alone, using only * course materials. * * Created with JCreatorLE, some indents are off when viewed through notepad * or EMACS * * @author Jose Manuel Caban * @version Version 1.2, Oct. 27, 2002 */ import java.util.*; public class Heap { private Vector data; //////////////// //Constructors// //////////////// /** *Default Constructor for Heap *@done sets the first element to null */ public Heap(){ data = new Vector(); data.add(null); } /////////// //Methods// /////////// /** *Swaps the elements at the given locations *@param a and b, the elements to be swapped */ private void swap(int a,int b){ Comparable temp = (Comparable)data.elementAt(a); data.setElementAt(data.elementAt(b),a); data.setElementAt(temp,b); } /** *Insert a piece of data into the Heap *@param toAdd, the data to be added */ public void insert(Comparable toAdd){//i changed this to toAdd because //the bright guy who decided to make us //use this.data.INSERTHERE() is a sadist int i = data.size(); data.setElementAt(new Integer(i),0); data.add(toAdd); while(i>1 && ((Comparable)data.elementAt(i)).compareTo(data.elementAt(i/2))>0){ swap(i,(i/2)); i /= 2; } }//end insert(Comparable) /** *Arranges heap to be a heap *@param node, the node to be tested for heapitude */ private void heapify(int node){ int iLeft = (node*2),iRight = ((node*2)+1),iMin = iLeft; int iSize = data.size()-1; if(iLeft <= iSize && ((Comparable)data.elementAt(iLeft)).compareTo(data.elementAt(node))<0){ iMin = iLeft; } else{ iMin = node; } if(iRight <= iSize && ((Comparable)data.elementAt(iRight)).compareTo(data.elementAt(iMin))<0){ iMin = iRight; } if(iMin != node){ swap(iMin,node); heapify(iMin); } }//end heapify(int) /** *Removes the largest piece of data from the heap */ public Comparable remove(){ Comparable removed=null; if(data.size()-1 > 0) { removed = (Comparable)data.elementAt(1); data.setElementAt(data.elementAt(data.size()-1), 1); //reduce size Integer temp = (Integer)data.elementAt(0); temp = new Integer(temp.intValue()-1); data.setElementAt(temp,0); data.remove(temp.intValue()+1); heapify(1); } return removed; }//end remove() /** *@return true if the heap is empty, false otherwise */ public boolean isEmpty(){ if(data.size()>1){ return false; } return true; } /** *String representation of the Heap */ public String toString(){ return data.toString(); } /***************************************************************/ /** * Debugging main for class Heap. * This method will rigorously test my code. * *