Un mucchio skew è una struttura dati astratta . Anche se Java non prevede una classe di albero binario , il mucchio skew può essere pensato come un albero binario di ricerca di auto-organizzazione . La classe Heap Skew Java implementa l'interfaccia Comparable così elenchi di oggetti SkewHeap possono essere ordinati facilmente . Istruzioni
1
Scrivi lo scheletro della classe SkewHeap . Le variabili di interesse sono il valore ( il valore del nodo ) e di sinistra e di destra (i figli sinistro e destro ) . Le variabili statiche tmp e trattino sono utilizzati per lo spazio temporaneo nella fusione e metodi di stampa. Il costruttore inizializza valore e lascia a sinistra e destra come null " " SkewHeap public class implementa Comparable { int valore ; . SkewHeap sinistra, a destra ; tmp LinkedList statico ; static int trattino = 0; { valore pubblico SkewHeap ( int val) = val ; } } " "
2
Utilizzare il metodo compareTo come un modo per soddisfare l' interfaccia Comparable e permettono di elenchi di oggetti SkewHeap da ordinare . Il metodo compareTo deve restituire un numero negativo , il numero zero o positivo , a seconda di come i due oggetti devono essere ordinati . Raggiungere questo eseguendo una sottrazione di valori dei due nodi 'tale che i nodi con valori minori sono ordinati prima che i nodi di maggior valore " " public int compareTo ( SkewHeap h ) { valore di ritorno - h.value ; } " . "
3
Compose il metodo di taglio , un importante metodo utilizzato dal merge. Quando si esegue una stampa unione , entrambe cumuli vengono tagliati a pezzi lungo il lato destro . . Il metodo che esegue chop chop e aggiunge le restanti subheaps alla lista tmp " " vuoto chop pubblico ( ) { SkewHeap r = destra, destra = null; if ( r = null ! ) R.chop ( ) ; tmp.addLast ( questo );} " "
4
creare il metodo di unione. I metodi di inserimento e removeHead entrambi utilizzano fondono per svolgere il loro compito . Il metodo merge tritare entrambi cumuli da unire , che memorizza tutti i subheaps in tmp .
5
Realizzare ordinamento la lista collegata tmp e combinando i subheaps rimuovendo gli ultimi due cumuli dall'elenco. Aggiungere uno come il figlio destro dell'altro, scambiare i bambini destro e sinistro e aggiungere la schiena mucchio alla fine dell'elenco . In questo modo , subheaps tritate vengono riassemblati in un unico mucchio equilibrato . Nodi di sinistra sono sempre garantiti per essere meno i nodi giusti , e nodi figlio hanno un valore maggiore di nodi padre " " pubblica SkewHeap merge ( SkewHeap h ) { //Tritare i nodi lungo il percorso giusto tmp = new LinkedList ( ) . ; chop (); h.chop ( ) ; //Ordina i nodi Collections.sort ( tmp ) ; //Unisci i subheaps mentre ( tmp.size ( ) > 1) { SkewHeap a = tmp.removeLast (); SkewHeap b = tmp.removeLast (); b.right = b.left ; b.left = a; tmp.addLast ( b); } return tmp.getFirst (); } " "
6
Scrivi il metodo removeHead . Questo rimuoverà il nodo principale e unire i cumuli figlio sinistro e destro " " pubblica SkewHeap removeHead ( ) {if ( left == null && destra == null) return null ; . Else if (a sinistra == null ) return giusto , altrimenti se (a destra == null ) return sinistra ; altro left.merge ritorno (a destra );} " "
7
formulare il metodo di stampa . Questo metodo è importante per il debug , come debugger spesso non hanno le strutture per visualizzare le strutture dati annidate come questo mucchio skew . E ' ricorsiva e trattino correttamente " " void print pubblico ( ) {for ( int i = 0; . Ho System.out.println ( value); trattino + +; if ( sinistra = null) {for ( int i = 0; ! Ho Sistema . out.println ( " left.print (); } if ( destra = null) {for ( int i = 0; i System.out.println ( " - > "); right.print (); } trattino - - ; } " "