6. Rad
6.1 Čo je to?
Rad (front, queue) je taký lineárny zoznam, na ktorom sú definované iba tieto operácie:
- vytvoriť prázdny rad
- pridať nový prvok na koniec radu
- odobrať prvok zo začiatku radu
- zistiť, či je rad prázdny
Operácia „vlož prvok do frontu“ sa niekedy v literatúre označuje enter. Operácia „vyber prvok z frontu“ sa nazýva remove.
Rad sa v praxi spravidla implementuje ako lineárny zoznam. Implementácia pomocou poľa je síce možná, ale veľmi nevýhodná. Operácia odober zo začiatku si vyžaduje posun ostatných prvkov o jedno miesto vľavo. V prípade, že nechceme pole posúvať, môžeme si síce pamätať index prvku, ktorý je na začiatku a index prvku na konci frontu, ale prvky, ktoré sa už z frontu „odstránili,“ sú zbytočne stále uložené v poli. Navyše by sme museli veľkosť frontu vopred vymedziť veľkosťou použitého poľa.
Graficky sa front implementovaný ako jednosmerný lineárny zoznam znázorňuje väčšinou takto:  | h1, h2, h3, …, hn sú hodnoty prvkov vo fronte pointer z ukazuje na začiatok frontu pointer k ukazuje na koniec frontu
|

| Princíp, podľa ktorého sa najskôr vložený prvok odstráni z radu ako prvý, sa nazýva princíp FIFO (z angl. First In First Out – „prvý príde, prvý odíde“).
Rad sa preto nazýva aj pamäť FIFO.
| |
|
V programoch sa často používajú niektoré špeciálne druhy radov, ktoré sa správajú trochu inak. Medzi najpoužívanejšie patrí
dvojitý front – ktorý umožňuje pridávať a odoberať prvky z oboch koncov (analógia bežného radu zo života – na začiatok prichádzajú prominenti, koniec opúšťajú tí, ktorí už nemôžu čakať)
front s predbiehaním do ktorého sa nový prvok zaraďuje podľa priority (dôležitosti)
Precvičme si
Napíšte program, ktorý bude simulovať činnosť „operačného systému“ tlačiarne. Prichádzajúce úlohy sa budú zaraďovať do dvoch frontov. Jeden z nich je prioritný – kým v ňom budú nejaké úlohy, budú sa tlačiť tie a všetko ostatné bude čakať. Druhý, bežný front, sa bude spracúvať len v prípade, ak bude prvý prázdny. Kvôli zjednodušeniu nahradíme skutočnú tlač výpisom názvu úlohy na obrazovku, pridávanie úloh do frontov a spustenie vybavovania úloh bude možné vykonať výberom príslušnej ponuky z menu na obrazovke.
|
[Riešenie]
|
|