Fronta - a)Implementace s využitím statických struktur (pole) b)Implementace s využitím dynamických struktur (spojového seznamu) odebírá se ze začátku fronty, přidává se na konec fronty. Datová struktura typu FIFO (kolejka)
a) s využitím statických struktur Definice a deklarace: type COSI = string[10]; {popř. COSI=real apod.} PP = 10; FRONTA = array[1..PP] of COSI; Var F1 : FRONTA; ZAC, KON : byte; PRVEK : COSI; Přidej prvek do fronty: begin KON:=KON+1; KON:=0; F1[KON]:= PRVEK ZAC:=1 end Odeber prvek z fronty: begin PRVEK:=F1[1]; for I:=2 to KON do F1[I-1]:=F1[I] end
Uvedené řešení je spíše manuální záležitost, jediná starost je o stav, kdy fronta je plná (KON=PP - nedá se přidat) popř. prázdná (KON=0 - nedá se odebrat) Efekt přináší použití fronty v podobě kruhu, kdy kromě výše uvedených proměnných deklarujeme ještě proměnnou var POC: byte udržující informaci o počtu zákazníků ve frontě (POC <= PP).
Pak přídání prvku do fronty řeší algoritmus begin KON:=(KON+1) mod 10; F1[KON]:=PRVEK; POC:=POC+1 end a odebrání prvku z fronty řeší algoritmus begin PRVEK:=F1[ZAC]; ZAC:=(ZAC+1) mod 10; POC:=POC-1 end Výchozí nastavení KON:=0; ZAC:=1; POC:=0 a starost, aby hodnota POC byla v intervalu 1..PP (ovšem nabývat hodnot může z intervalu 0..PP+1.
b) s využitím dynamických struktur Type COSI = string[10]; WSKAZ = ^STRU; STRU = record IM : COSI; WSK : WSKAZ end; var F1 : FRONTA; nil ZACKON type FRONTA = record ZAC:WSKAZ; KON:WSKAZ end ZAC - START KON - ILOSC F1
Úvodní inicializaci fronty řeší algoritmus Procedure INIT; begin new(F1.ZAC); F1.ZAC^.WSK:=nil; F1.KON:=F1.ZAC end ZACKON F1 nil
Přidání prvku do fronty řeší algoritmus Procedure PRIDEJ(R:COSI); begin F1.KON^.IM:=R; new(F1.KON^.WSK); F1.KON:=F1.KON^.WSK; F1.KON^.WSK:=nil end
Odebrání prvku z fronty řeší algoritmus Procedure ODEBER(var R:COSI); var POM : WSKAZ; begin if F1.ZAC<>F1.KON then begin R:=F1.ZAC^.IM; POM:=F1.ZAC ; F1.ZAC:=F1.ZAC^.WSK; dispose(POM) end
nil ZACKON F1 nil (3) (1) R (2) (4) nil ZACKON F1 (3) (1) R (2) (4) POM Schematicky lze odebrání prvku z fronty znázornit: Schematicky lze přidání prvku do fronty znázornit:
Zásobník (stos) - a)Implementace s využitím statických struktur (pole) b)Implementace s využitím dynamických struktur (spojového seznamu) nil TOP přidává se i odebírá vždy z vrcholu zásobníku. Datová struktura typu LIFO
a) s využitím statických struktur Definice a deklarace: type COSI = string[10]; {popř. COSI=real apod.} FRONTA = array[1..PP] of COSI; var Z1 : FRONTA; VRCH : byte; PRVEK : COSI; Přidej prvek do zásobníku: begin VRCH:=VRCH+1; VRCH:=0; Z1[VRCH]:= PRVEK end Odeber prvek z fronty: begin PRVEK:=Z1[VRCH]; VRCH :=VRCH-1 end
b) s využitím dynamických struktur Type COSI = string[10]; WSKAZ = ^STRU; STRU = record IM : COSI; WSK : WSKAZ end; var Z1 : WSKAZ; nil Z1Z1
Úvodní inicializaci zásobníku řeší algoritmus Procedure INIT; begin Z1:= nil; end Přidání prvku do zásobníku řeší algoritmus Procedure VLOZ(R:COSI); var POM : WSKAZ; begin new(POM); POM^.IM :=R; POM^.WSK:=Z1; Z1 :=POM end
Odebrání prvku ze zásobníku řeší Procedure ODEBER(var R:COSI); var POM : WSKAZ; begin R :=Z1^.IM; POM:=Z1; Z1 := Z1^.WSK; dispose(POM) end
Jak u fronty, tak u zásobníku, je třeba hlídat, zda není prázdný. U zásobníku je algoritmus ve tvaru Function JePrazdny : Boolean; begin if Z1=nil then JePrazdny := true else JePrazdny := false end