A Skew Heap ist eine abstrakte Datenstruktur. Obwohl Java nicht für einen binären Baum Klasse bereitzustellen , kann der Skew Haufen als sich selbst organisierende binären Suchbaum gedacht werden . Die Java- Heap Skew -Klasse implementiert die Schnittstelle Comparable so Listen SkewHeap Objekte leicht sortiert werden kann . Anleitung
1
schreiben das Skelett des SkewHeap Klasse. Die Variablen von Interesse sind Wert ( Wert des Knotens ) und links und rechts ( die linken und rechten Kinder). Die tmp und Gedankenstrich statischen Variablen werden für temporäre Raum in der Zusammenführung und Druckverfahren eingesetzt. Der Konstruktor initialisiert Wert und lässt links und rechts als null " " public class SkewHeap implementiert Comparable {int value; . SkewHeap links, rechts ; static LinkedList tmp ; static int indent = 0; öffentlichen SkewHeap (int val ) {value = val ;} } ""
2
Verwenden Sie die compareTo Verfahren als eine Möglichkeit , um die Vergleichbar -Schnittstelle zu erfüllen und damit Listen von SkewHeap Objekte sortiert werden sollen. Die compareTo Methode sollte eine negative Zahl, Null oder positive Zahl ist, je nachdem, wie die beiden Objekte sortiert werden sollen . Sie erreichen dies durch eine Subtraktion auf die beiden Knoten ' Werte , so dass Knoten mit geringeren Werten vor Knoten von größerem Wert sortiert werden " " public int compareTo ( SkewHeap h ) {return Wert - h.value ;} " . "
3
Arrangieren Sie das chop Verfahren , eine wichtige Methode von Merge verwendet . Wenn eine Zusammenführung durchgeführt wird, werden beide Haufen auseinander auf der rechten Seite gehackt . . Die chop chop Methode führt diese und fügt die restlichen subheaps dem tmp Liste " " public void chop () { SkewHeap r = rechts , rechts = null; if ( r = null ! ) R.chop (); tmp.addLast ( this); } ""
4
erstellen Sie die Merge-Methode . Die Einlage und RemoveHead Methoden verwenden beide verschmelzen , um ihre Aufgabe zu erfüllen. Die Merge-Methode werden beide hacken Haufen zusammengelegt werden , die alle subheaps speichert in tmp.
5
Accomplish Sortierung der tmp verketteten Liste und Kombinieren der subheaps durch Entfernen der letzten zwei Haufen aus der Liste. In einer als rechte Kind des anderen , tauschen Sie die rechte und linke Kinder und fügen Sie den Heap zurück an das Ende der Liste. Auf diese Weise werden gehackten subheaps in einem ausgewogenen Heap zusammengesetzt. Left Knoten werden garantiert immer weniger als den richtigen Knoten und untergeordnete Knoten haben einen größeren Wert als übergeordneten Knoten " " public SkewHeap Merge ( SkewHeap h ) {//Hacken Sie die Knoten auf der rechten Pfad tmp = new LinkedList () . hacken (); h.chop (); //sortieren Knoten Collections.sort ( tmp) ; //Merge die subheaps while ( tmp.size () > 1) { a = SkewHeap tmp.removeLast (); SkewHeap b = tmp.removeLast (); b.right = b.left ; b.left = a; tmp.addLast (b); } return tmp.getFirst (); } ""
6
schreiben die RemoveHead Verfahren . Dadurch wird der Head-Knoten und verschmelzen die linke und rechte Kind Haufen " " public SkewHeap RemoveHead () {if (links == null && rechts == null ) return null; . Else if (links == null ) return rechts , sonst if ( rechts == null ) return left; anderes Rückkehr left.merge ( rechts); } ""
7
Formulieren Sie die Print-Methode . Diese Methode ist für die Fehlersuche wichtig, da Debugger nicht oft haben die Einrichtungen , um verschachtelte Datenstrukturen wie dieser Skew Haufen zu sehen. Es ist rekursiv und Einzüge korrekt " " public void print () {for (int i = 0; . I System.out.println ( value); Gedankenstrich + +; if ( links = null) {for (int i = 0; ! I -System . out.println (" left.print (); } if ( rechts = null) { for (int i = 0; i System.out.println ( " - > "); right.print ();} indent- - ; } ""