BPC-ALD - Skripta_rev2019_2
Níže je uveden pouze náhled materiálu. Kliknutím na tlačítko 'Stáhnout soubor' stáhnete kompletní formátovaný materiál ve formátu PDF.
Frontu lze také
uložit do pole.
− 15 −
pole, i když ne tak snadno jako zásobník. Problém je v tom, že při odebírání se začátek fronty
v poli postupně posunuje dozadu. To vyřešíme cyklickým přechodem z posledního prvku pole
na jeho první prvek. Dalším problematickým rysem je zde stejně jako u zásobníku stanovení
velikosti pole tak, aby nedošlo k přeplnění fronty.
Označme pole použité pro implementaci fronty opět jménem z, počet prvků v něm nechť je n a
indexování prvků pole nechť je opět od 0. Dále nechť proměnná i reprezentuje index prvku
pole, který tvoří začátek fronty, a proměnná j je indexem prvku pole, jež je koncem fronty, a
proměnná m obsahuje počet prvků uložených ve frontě. Operace budou:
Počáteční nastavení prázdné fronty:
i = 0;
j = 0;
m = 0;
Operace přidání nového datového prvku do fronty :
if (m==n) { /* fronta je plná */ }
else
{ z[j] = datový_prvek;
j = (j+1) mod n;
m = m+1; }
Operace odebrání datového prvku z fronty a jeho přesun do nějaké proměnné:
if (m==0) { /* fronta je prázdná, nelze z ní odebrat */ }
else
{ proměnná = z[i];
i = (i+1) mod n;
m = m-1; }
Kde operace mod označuje zbytek po dělení.
Posunutí začátku a konce fronty v poli, ve kterém je fronta uložena, při ukládání a odebírání
prvků ukazuje následující obrázek.
I frontu lze implementovat pomocí seznamu. V tomto případě si kromě ukazatele na první uzel
v seznamu budeme rovněž uchovávat ukazatel na poslední uzel v seznamu, abychom při
každém přidání do fronty nemuseli seznam procházet od začátku až po jeho konec.