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í verzeNásledující verze | Předchozí verze | ||
informatika:maturita:21a [21. 02. 2015, 17.33] – xmrnustik | 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 1: | Řádek 1: | ||
====== Fronta a zásobník ====== | ====== Fronta a zásobník ====== | ||
- | = způsoby dočasného uložení dat v rámci | + | Fronta i zásobník jsou 2 principiálně velmi podobné |
- | ===== Základní funkce | + | ===== Základní funkce ===== |
- | **push(co)** - slouží k vložení dat | + | * **push(objekt)** – vkládá nová data do řady |
+ | * **pop()** nebo také **pull()** – získá data, která jsou právě na řadě | ||
- | **pop()** nebo také **pull()** - slouží k získání dat, které jsou právě na řadě | + | ===== Fronta |
+ | 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). | ||
- | ===== Fronta ===== | + | Jsou potřeba dva ukazatele: front (zde jsou odebírána |
- | (anglicky queue) | + | |
- | + | ||
- | 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), kteří příjdou dříve, přijdou na řadu první(jsou vrácena dříve). | + | |
==== Metody Implementace ==== | ==== Metody Implementace ==== | ||
Řádek 19: | Řádek 18: | ||
=== Pomocí statického pole === | === Pomocí statického pole === | ||
- | Řešení pomocí statického pole funguje tak, že si vytvoříme **pole** | + | 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ů === | ||
- | Metodu řešení pomocí **ukazatelů** můžete vidět na níže uvedeném diagramu. Výhoda tohoto řešení je zároveň i jeho nevýhodou, jsme totiž schopni přidávat do fronty příspěvky | + | Metodu řešení pomocí **ukazatelů** můžeme vidět na níže uvedeném diagramu. Výhoda tohoto řešení je zároveň i jeho nevýhodou |
{{: | {{: | ||
- | ===== Zásobník ===== | + | 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á. |
- | (anglicky stack) | + | |
- | Funguje na principu **LIFO** (last in first out), to znamená, že funguje stejně **jako zásobník v samopalu**. Při nabíjení samopalu (vkládání dat) skládáme vždy náboje na spodek zásobníku a vršíme je na sebe, při výstřelu (výběr dat) se náboje berou odvrchu, z toho plyne, že poslední vložený je první | + | {{ : |
+ | |||
+ | ===== Zásobník (stack) ===== | ||
+ | |||
+ | Funguje na principu **LIFO** (last in first out), to znamená, že funguje stejně **jako zásobník v samopalu**. Při nabíjení samopalu (vkládání dat) skládáme vždy náboje na spodek zásobníku a vršíme je na sebe, při výstřelu (výběru dat) se náboje berou svrchu – poslední vložený je tedy vystřelen jako první. | ||
==== Metody Implementace ==== | ==== Metody Implementace ==== | ||
Řádek 41: | Řádek 61: | ||
Řešení zásobníku pomocí statického pole je stejné jako u **fronty**, jediný rozdíl je v tom, že si v další proměnné musíme držet index posledních vložených dat a při zavolání funkce pop() vezmeme data z indexu posledních vložených data a index snížíme o jedna. | Řešení zásobníku pomocí statického pole je stejné jako u **fronty**, jediný rozdíl je v tom, že si v další proměnné musíme držet index posledních vložených dat a při zavolání funkce pop() vezmeme data z indexu posledních vložených data a index snížíme o jedna. | ||
- | Výhody a nevýhodu | + | Výhody a nevýhody |
=== Pomocí ukazatelů === | === Pomocí ukazatelů === | ||
- | Řešení pomocí ukazatelů je také podobné jako u **fronty**, znázroněné ho máte na diagramu | + | Řešení pomocí ukazatelů je také podobné jako u **fronty** |
- | Výhody a nevýhodu jsou stejné jako u fronty. | + | Výhody a nevýhodu jsou opět naprosto |
{{: | {{: | ||
- | |||
- | |||
- |
informatika/maturita/21a.1424536394.txt.gz · Poslední úprava: autor: xmrnustik