Un tas d'inclinaison est une structure de données abstrait . Bien que Java ne prévoit pas une classe d'arbre binaire , le tas d'inclinaison peut être considéré comme un arbre binaire de recherche d'auto-organisation . La classe Heap Skew Java implémente l' interface Comparable si des listes d'objets SkewHeap peuvent être triés facilement . Instructions 1 Ecrire le squelette de la classe SkewHeap . Les variables d'intérêt sont la valeur ( la valeur du nœud) et à gauche et à droite ( les enfants gauche et droit ) . Les variables statiques tmp et tiret sont utilisés pour l'espace temporaire lors de la fusion et des méthodes d'impression. Le constructeur initialise la valeur et laisse à gauche et à droite comme nulle "" SkewHeap public class implémente Comparable {int valeur ; . SkewHeap gauche, à droite ; tmp LinkedList statique static int tiret = 0; (int val) valeur publique SkewHeap { = val ;} } "" 2 Utilisez la méthode compareTo comme un moyen de réaliser l'interface Comparable et permettent des listes d'objets SkewHeap à trier . La méthode compareTo doit retourner un nombre négatif , le nombre nul ou positif , selon la façon dont les deux objets doivent être triées . Atteindre cet objectif en effectuant une soustraction sur les valeurs des deux nœuds de telle sorte que les nœuds avec des valeurs inférieures sont triés avant nœuds de plus grande valeur "" public int compareTo ( SkewHeap h ) { Valeur de retour - h.value ; } ". " 3 Composez la méthode de hachage , une méthode importante utilisée par fusion. Lorsqu'une fusion est effectuée , les deux amas sont coupés à part sur le côté droit . . La méthode chop chop qui exécute et ajoute les subheaps restant à la liste des tmp "" chop public void () { SkewHeap r = droit ; droite = null; if ( r = null !) R.chop (); tmp.addLast ( this); } "" 4 créer la méthode de fusion. L'insert et RetirerTête méthodes à la fois l'utilisation de fusionner pour accomplir leur tâche . La méthode de fusion va couper les deux tas à fusionner , qui stocke toutes les subheaps dans tmp. 5 Accomplir le tri de la liste chaînée tmp et en combinant les subheaps en enlevant les deux derniers monceaux de la liste . Ajouter un comme l'enfant le droit de l'autre , échanger les enfants à droite et à gauche et ajouter le dos du tas à la fin de la liste . De cette façon, subheaps hachées sont rassemblés en un seul tas équilibrée. Noeuds gauche sont toujours garantis d'être moins que le droit nœuds et nœuds enfants ont une plus grande valeur que les noeuds parents "" publique SkewHeap fusion ( SkewHeap h ) {//Hacher les noeuds en bas du chemin droit tmp = new LinkedList (). ; cHOP ( ) ; h.chop (); //Trier les noeuds Collections.sort ( tmp ) ; //Fusionner les subheaps while ( tmp.size () > 1) { SkewHeap a = tmp.removeLast (); SkewHeap b = tmp.removeLast (); b.droit = b.left ; b.left = a; tmp.addLast ( b); } return tmp.getFirst (); } "" 6 Ecrire le méthode RetirerTête . Cela permettra d'éliminer le nœud de tête et de fusionner les tas d'enfants à gauche et à droite "" publique SkewHeap RetirerTête () {if ( gauche == null && droit == null) return null ; . Else if retour (à gauche == null) à droite ; d'autre if ( droite == null ) return gauche ; left.merge de retour d'autre (à droite) ; } "" 7 formuler la méthode d'impression. Cette méthode est important pour le débogage, comme les débogueurs n'ont souvent pas les moyens de voir les structures de données imbriquées comme ce tas d'inclinaison . Il est récursive et tirets correctement " " print public void () { for (int i = 0; i. System.out.println ( value); tiret + +; if ( gauche = null) { for (int i = 0; ! System i . out.println (" left.print (); } if ( droite = null) { for (int i = 0; i System.out.println ( " - > "); right.print ();} tiret - - ; } ""
|