Kolekce a pole, zásobník, fronta, slovník

Formát: 30 min praktická úloha, 15 min obhajoba + teorie. Teorie pokrývá pole, generické kolekce a hash-based struktury. Praktika: implementovat vlastní Stack a Queue pomocí Listu, plus třída se slovníkem.


Část 1: Teorie

Co jsou kolekce

Kolekce je abstraktní datový typ pro ukládání a správu skupiny objektů. Na rozdíl od jednotlivých proměnných umožňují pracovat s víc prvky najednou.

Proč potřebujeme kolekce, když máme pole:

Pole (Array) Kolekce (List, Stack, atd.)
Pevná velikost Dynamická velikost
Manuální resize (znovu alokovat) Auto-resize, vestavěné metody
Jen index-based přístup Různé přístupové vzory (FIFO, LIFO, by key)
Žádné vestavěné metody Add, Remove, Contains, Sort...

V C# se rozdělují na:

Pro maturitu se zaměříme na generické. Negenerické jsou přežitek z .NET 1.x (před generikami v roce 2005) a dnes je nepoužívej, jsou pomalejší a méně bezpečné.


Pole (Array)

Pole je primitivní kolekce s pevnou velikostí, kde prvky leží bezprostředně za sebou v paměti (souvislý blok).

int[] cisla = new int[5];           // pole o velikosti 5
cisla[0] = 10;
cisla[1] = 20;

int[] inicializovane = { 1, 2, 3, 4, 5 };

Console.WriteLine(cisla[0]);         // přístup přes index
Console.WriteLine(cisla.Length);     // 5

Vlastnosti pole

Vlastnost Hodnota
Velikost Pevná, určí se při vytvoření
Přístup přes index O(1), díky kontinuální paměti
Insert/Delete uprostřed O(n), nutné posunout prvky
Resize Nelze přímo, musíš alokovat nové pole a kopírovat
Typ prvků Stejný (homogenní)