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 zlúčiť dva Zoradené ADT Zoznamy

Abstraktný dátový typ ( ADT ) zoznam alebo spájať zoznam , ako to je viac obyčajne volal , je jedným zo základných dátových štruktúr v informatike a jeden z prvých alternatív k jednoduchej poľa dozvedel o počítačová veda študenta . Aj keď obetuje schopnosť pohybovať sa v strede zoznamu , bez toho prehľadávanie zoznamu po prvýkrát , zoznam ADT je to triviálne jednoduché rozšíriť a zmenšiť uložené dáta . Tento kód je implementovaná v jazyku Java , pretože vstavaný Linked Zoznam dátová štruktúra Java nám umožňuje dostať sa priamo k veci , ale rovnaká logika by mohla byť vykonaná s minimom úprav v inom C - ako jazyk . Pokyny dovolená 1

Vytvorte si dve prepojené zoznamy a inicializovať je s niektorými triedených dát vložením nasledujúcej do súboru Java :

LinkedList list1 = new LinkedList ( ) ;

LinkedList Hárok2 = new LinkedList ( ) ;

for ( int x = 0 ; x < 100 , x + + ) Máte dve prepojené zoznamy plnej náhodných čísel , ktoré boli zoradené
2

Vytvoriť nový spájať zoznam držať zlúčený zoznam vložením nasledovné : .

LinkedList zlúčené = new LinkedList ( ) ;
3

Nastaviť jednoduché , zatiaľ čo slučka . Táto slučka bude pokračovať tak dlho , kým obaja zoznamy mať aspoň jeden prvok v nich , a to bude pohybovať najmenší z hlavných prvkov do zlúčeného zoznamu : .

//Aj keď sú oba zoznamy nie sú prázdne

while ( list1.isEmpty ! ( ) && ! ​​list2.isEmpty ( ) ) {

if ( list1.peek ( ) < = list2.peek ( ) ) {

zlúčené . pridať ( list1.pop ( ) ) ;

} else {

merged.add ( list2.pop ( ) ) ;

}

}

príkaz " Peek " sa zameriava na prvok na začiatok zoznamu , zatiaľ čo " Pop " ako sa pozerá na prvku a odstráni ju . Keď porovnanie sa vykoná len chcete nahliadnuť v hornej časti zoznamu pre zobrazenie, ktoré je menšie . Keď príde čas zlúčiť zoznamy , ktoré chcete vziať so najvyššiu hodnotu , a dať to na nových zoznamoch .
4

dokončiť prácu . Akonáhle jeden zoznam je prázdny , nie je potrebné pokračovať v porovnávaní . Preto starý slučka končí , a ďalšie slučka je vytvorený k vyplneniu zvyšok zlúčeného zoznamu sa zostávajúcimi dátami z posledného zoznamu :

//Kým prvý zoznam nie je prázdny

while ( list1.isEmpty ( ! ) ) {

merged.add ( list1.pop ( ) ) ;

}

//Zatiaľ čo druhý zoznam nie je prázdny.

zatiaľ čo {

merged.add ( list2.pop ( ) ) ;

} ( list2.isEmpty ( ! ) )
5

Vytlačte výsledkov , takže si môžete prezrieť zlúčený zoznam a uistite sa , že pracuje správne :

int x = 1 ;

pre ( Double y : zlúčené ) { klipart

systém . out.println ( x + " , " + y ) ;

x + + ;

}

Najnovšie články

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