GeeksforGeeks
Pole ukládají prvky v souvislých místech paměti, což vede ke snadno vypočitatelným adresám uložených prvků a umožňuje rychlejší přístup k prvku na určitém indexu. Propojené seznamy jsou méně rigidní ve své struktuře ukládání a prvky obvykle nejsou uloženy v souvislých místech, proto musí být uloženy s dalšími značkami udávajícími odkaz na další prvek. Tento rozdíl ve schématu ukládání dat rozhoduje o tom, která datová struktura bude pro danou situaci vhodnější.
Schéma ukládání dat pole
Schéma ukládání dat spojový seznam
Hlavní rozdíly jsou uvedeny níže:
- Velikost: Protože data mohou být v poli uložena pouze v souvislých blocích paměti, nelze za běhu měnit jejich velikost kvůli riziku přepsání přes jiná data. Ve spojovém seznamu však každý uzel ukazuje na další uzel, takže data mohou existovat na rozptýlených (nespojitých) adresách; to umožňuje dynamickou velikost, která se může za běhu měnit.
- Alokace paměti:
- Efektivita paměti: Při stejném počtu prvků využívají propojené seznamy více paměti, protože spolu s daty je uložen také odkaz na další uzel. Flexibilita velikosti u propojených seznamů však může způsobit, že celkově spotřebují méně paměti; to je užitečné při nejistotě ohledně velikosti nebo při velkých rozdílech ve velikosti datových prvků; při použití polí se musí alokovat paměť odpovídající hornímu limitu velikosti (i když se nevyužívá celá), zatímco u propojených seznamů lze jejich velikost zvětšovat postupně úměrně množství dat.
- Doba provádění: V případě propojeného seznamu je však nutné projít všechny předchozí prvky, aby bylo možné se dostat k libovolnému prvku. Také lepší lokalizace mezipaměti v polích (díky souvislé alokaci paměti) může výrazně zlepšit výkon. V důsledku toho jsou některé operace (například změna určitého prvku) v polích rychlejší, zatímco některé jiné (například vložení/odstranění prvku v datech) jsou rychlejší ve spojových seznamech.
Následující body hovoří ve prospěch propojených seznamů.
(1) Velikost polí je pevně daná: Musíme tedy předem znát horní hranici počtu prvků. Také obecně platí, že přidělená paměť se rovná horní hranici bez ohledu na využití a při praktickém použití se horní hranice dosáhne jen zřídka.
(2) Vložení nového prvku do pole prvků je nákladné, protože pro nové prvky se musí vytvořit prostor a pro vytvoření prostoru se musí stávající prvky posunout.
Předpokládejme například, že udržujeme setříděný seznam ID v poli id.
id = .
A pokud chceme vložit nové ID 1005, pak abychom zachovali setříděné pořadí, musíme přesunout všechny prvky za 1000 (kromě 1000).
Smazání je u polí také drahé, dokud se nepoužijí nějaké speciální techniky. Například chceme-li v id smazat 1010, musíme přesunout vše za 1010.
Propojený seznam tedy poskytuje oproti polím následující dvě výhody
1) Dynamická velikost
2) Snadné vkládání/mazání
Propojené seznamy mají následující nevýhody:
1) Náhodný přístup není povolen. K prvkům musíme přistupovat postupně od prvního uzlu. Nemůžeme tedy se spojovými seznamy provádět binární vyhledávání.
2) S každým prvkem seznamu je potřeba další paměťový prostor pro ukazatel.
3) Pole mají lepší lokalizaci mezipaměti, což může znamenat dost velký rozdíl ve výkonu.
.