Základní abstraktní kolekce (jejich klasická implementace [seznamy, slovníky], iterátory nad nimi, typické elementární operace a jejich časová složitost) a specializované abstraktní kolekce (fronta, zásobník)


int[] numbers = new int[5];
numbers[0] = 10;
numbers[1] = 20;
numbers[2] = 30;
int length = numbers.Length; // 5
int first = numbers[0]; // 10
| Operace | Best Case | Worst Case | Vysvětlení |
|---|---|---|---|
zjištění délky (Length) |
O(1) | O(1) | Velikost pole je známá od vytvoření |
přístup (numbers[i]) |
O(1) | O(1) | Prvek je uložen na přesně vypočitatelné pozici v souvislé paměti |
změna hodnoty (numbers[i] = x) |
O(1) | O(1) | Mění se jen hodnota na již existující pozici |
| vyhledání hodnoty | O(1) | O(n) | Buď je hledaný prvek hned na začátku, je na konci nebo v poli není |
| vložení/odstranění prvku | O(n) | O(n) | Je nutné vytvořit nové pole a zkopírovat všechny prvky (velikost je pevná) |
using System.Collections.Generic;
List<int> numbers = new();
numbers.Add(10);
numbers.Add(20);
numbers.Add(30);
int count = numbers.Count; // 3
int first = numbers[0]; // 10
| Operace | Best Case | Worst Case | Vysvětlení |
|---|---|---|---|
zjištění počtu prvků (Count) |
O(1) | O(1) | Počet prvků je uložen jako vlastnost kolekce |
přístup (numbers[i]) |
O(1) | O(1) | Prvek je uložen na přesně vypočitatelné pozici v souvislé paměti |
změna hodnoty (numbers[i] = x) |
O(1) | O(1) | Mění se jen hodnota na existující pozici |
| vyhledání hodnoty | O(1) | O(n) | Buď je prvek hned na začátku, nebo je nutné projít celý seznam |
přidání na konec (Add) |
O(1) | O(n) | Pokud je volná kapacita, jen se zapíše; při zaplnění se vytvoří větší pole a vše se zkopíruje |
| vložení/odstranění uprostřed | O(n) | O(n) | Je nutné posunout prvky za danou pozicí |

A = {1, 2, 3, 4}
B = {3, 4, 5, 6}
A ∪ B = {1, 2, 3, 4, 5, 6} // Prvky, které jsou v A nebo v B.
A ∩ B = {3, 4} // Prvky, které jsou zároveň v A i v B
A \ B = {1, 2} // Prvky, které jsou v A, ale nejsou v B.
B \ A = {5, 6} // Prvky, které jsou v B, ale nejsou v A.


| Implementace | enqueue | dequeue | front | rear | Poznámka |
|---|---|---|---|---|---|
| Kruhové pole | O(1) | O(1) | O(1) | O(1) | Posun indexů pomocí modulo, žádné přesouvání prvků |
| Spojový seznam (head + tail) | O(1) | O(1) | O(1) | O(1) | Vkládání i odebírání jen přepojí ukazatele |
| Dynamické pole (běžný list) | O(1) | O(n) | O(1) | O(1) | dequeue vyžaduje posun všech prvků |

| Implementace | push | pop | peek | Poznámka |
|---|---|---|---|---|
| Dynamické pole | O(1)* | O(1) | O(1) | *amortizovaně |
| Spojový seznam | O(1) | O(1) | O(1) | Přepojení hlavy |
