informatika:maturita:21a
Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Obě strany předchozí revizePředchozí verze | |||
| informatika:maturita:21a [30. 01. 2018, 13.08] – korekce xsilling | informatika:maturita:21a [16. 03. 2020, 13.57] (aktuální) – Přidána cyklická fronta a též přidány příklady reálné implementace fronty. xbures1 | ||
|---|---|---|---|
| Řádek 11: | Řádek 11: | ||
| Funguje na principu **FIFO** (first in first out), to znamená, že si frontu můžeme představit třeba jako frontu na úřadu práce. Lidé (data) se řadí po příchodu do fronty a ve stejném pořadí se i dostanou na řadu (data jsou tedy dříve vrácena). | Funguje na principu **FIFO** (first in first out), to znamená, že si frontu můžeme představit třeba jako frontu na úřadu práce. Lidé (data) se řadí po příchodu do fronty a ve stejném pořadí se i dostanou na řadu (data jsou tedy dříve vrácena). | ||
| + | |||
| + | Jsou potřeba dva ukazatele: front (zde jsou odebírána data) a rear (zde jsou data vkládána) | ||
| ==== Metody Implementace ==== | ==== Metody Implementace ==== | ||
| Řádek 16: | Řádek 18: | ||
| === Pomocí statického pole === | === Pomocí statického pole === | ||
| - | Řešení pomocí statického pole funguje tak, že si vytvoříme danou frontu jako **pole**. V rámci funkce push(objekt) pak postupně dáváme data do pole a ve funkci pop() vždy vezmeme první položku a všechny zbylé posuneme o jedno místo dopředu. | + | Existují dva způsoby statické implementace – klasická |
| - | Nevýhodou tohoto | + | U obou variant začínáme tím, že si vytvoříme danou frontu jako **pole**. V rámci funkce push(objekt) pak postupně vkládáme data do pole pomocí ukazatele rear a funkcí pop() získáváme data pomocí ukazatele front. Nyní se dva zmíněné |
| + | |||
| + | ** klasická fronta **: Při volání funkce pop() získáme data, snížíme hodnotu rear ukazatele a všechny položky posuneme o jedno dopředu. | ||
| + | |||
| + | zde ukázka klasické varianty statické implementace fronty v jazyce Java: | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | V rámci konstruktoru vkládáme do fronty čísla 7 a 8 a text " | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | ** cyklická fronta **: Při volání funkce pop() opět získáme data, ale tentokrát hodnotu rear ukazatele ponecháváme a naopak se zvyšuje hodnota ukazatele front. Celá fronza je navíc skutečně cyklická, takže v situaci kdy se uvolní prostor z původního " | ||
| + | |||
| + | viz. diagram: | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | Nevýhodou statické | ||
| === Pomocí ukazatelů === | === Pomocí ukazatelů === | ||
| Řádek 26: | Řádek 46: | ||
| {{: | {{: | ||
| + | |||
| + | Zde můžeme vidět implementaci pomocí ukazatelů v jazyce Java a to konkrétně s využitím kolekce LinkedList. Všimněme si též těla metody deQueue(), kde musíme zachytávat vyjímku chybějícího ukazatele, je-li fronta prázdná. | ||
| + | |||
| + | {{ : | ||
| ===== Zásobník (stack) ===== | ===== Zásobník (stack) ===== | ||
informatika/maturita/21a.1517314124.txt.gz · Poslední úprava: autor: xsilling
