Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky

Domáce Hardware Siete Programovanie Softvér Otázka Systémy

Ako používať skosenie haldy v jazyku Java

šikmo haldy je abstraktná dátová štruktúra . Hoci Java neposkytuje pre binárny strom triede , skosenie haldy môže byť myšlienka ako self -organizovať binárneho vyhľadávacieho stromu . Trieda Java Skew Heap implementuje Porovnateľné rozhranie , takže zoznamy SkewHeap objektov možno triediť ľahko . Pokyny dovolená 1

Napíšte kostru triedy SkewHeap . Premenné záujmu sú hodnoty ( hodnota uzla ) a ľavý a pravý ( ľavý a pravý deti ) . Tmp a odsadenie statické premenné sa používajú pre dočasné miesto v metódach zlúčenie a tlače . Konštruktor inicializuje hodnotu a ponecháva vľavo a vpravo ako null " , " public class SkewHeap implementuje Porovnateľné { int hodnota ; . SkewHeap vľavo , vpravo , statické LinkedList tmp ; static int zarážka = 0 ; public SkewHeap ( int val ) { value = val ; } } " "
2

Použite metódu CompareTo ako spôsob , ako splniť Porovnateľné rozhranie a umožní zoznamy SkewHeap objektov , ktoré majú byť radené . Metóda compareTo by mal vrátiť záporné číslo , nula alebo kladné číslo , v závislosti na tom , ako by mali byť dva objekty radené . Dosiahnuť tým , že vykonáva odčítanie hodnôt dvoma uzlami " tak , že uzly s menšími hodnotami sú radené pred uzlov väčšiu hodnotu " , " public int compareTo ( SkewHeap h ) { return hodnota - h.value ; } " . "

3

Zostavte spôsob sekanie , dôležitú metódu používanú zlúčenie . Pri vykonávaní hromadnej korešpondencie , obe hromady sú nasekané seba po pravej strane . Metóda kotleta vykonáva túto kotletu a pridá zvyšné subheaps do zoznamu tmp " " public void chop ( ) { SkewHeap r = vpravo ; . Vpravo = null ; if ( r = null ! ) R.chop ( ) ; tmp.addLast ( this ) ; } " "
4

Vytvorte metódu zlúčenie . Vložka a removeHead metódy ako používať merge na splnenie ich úlohy . Metóda zlúčenie bude sekať obe zhromaždenia , ktoré majú byť zlúčené , ktorý ukladá všetky subheaps v tmp .
5

zvládnete triedenie tmp spojový zoznam a kombinuje subheaps odstránením posledné dve hromady zo zoznamu . Pridať jeden ako pravé dieťa iné , vymeniť pravý a ľavý deti a pridajte haldy späť na koniec zoznamu . Týmto spôsobom , sekané subheaps sú znovu zostavené do jedného vyváženého haldy . Ľavej uzly sú vždy zaručené , že bude menej ako tých správnych uzlov , a podriadené uzly majú väčšiu hodnotu ako nadradeného uzla " , " public SkewHeap merge ( SkewHeap h ) { //Chop uzly sa na správnu cestu tmp = new LinkedList ( ) . ; chop ( ) ; h.chop ( ) ; //Sort uzly Collections.sort ( tmp ) ; //Zlúčenie subheaps while ( tmp.size ( ) > 1 ) { SkewHeap = tmp.removeLast ( ) ; SkewHeap b = tmp.removeLast ( ) ; b.right = b.left ; b.left = ; tmp.addLast ( b ) ; } return tmp.getFirst ( ) ; } " "
6

napíš removeHead metóda . Tým sa odstráni uzol hlavy a spojiť ľavú a pravú dieťa hromady " " verejný SkewHeap removeHead ( ) { if ( left == null && právo == null ) return null ; . Else if ( vľavo == null ) return pravdu , inak if ( vpravo == null ) return vľavo ; iného spiatočný left.merge ( vpravo ) ; } " "
7

formulovať metódu tlače . Táto metóda je dôležité pre ladenie , ako Debuggers nemajú často zariadenie pre zobrazenie vnorené dátové štruktúry , ako je tento skosenie haldy . Je to rekurzívne a zarážky správne " " public void print ( ) { for ( int i = 0 ; . Aj System.out.println ( hodnota ) ; zarážka + + ; if ( left = null ) { for ( int i = 0 ; Aj Režim . out.println ( " left.print ( ) ; } if ( vpravo = null ) { for ( int i = 0 ; i System.out.println ( ! " - > " ) ; right.print ( ) ; } zarážka - - ; } " "

Najnovšie články

Copyright © počítačové znalosti Všetky práva vyhradené