1 / 15

Fronta -

Fronta -. odebírá se ze začátku fronty, přidává se na konec fronty. Datová struktura typu FIFO. (kolejka). Implementace s využitím statických struktur (pole) Implementace s využitím dynamických struktur (spojového seznamu). a) s využitím statických struktur. Definice a deklarace:

nirav
Télécharger la présentation

Fronta -

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Fronta - odebírá se ze začátku fronty, přidává se na konec fronty. Datová struktura typu FIFO (kolejka) • Implementace s využitím statických struktur (pole) • Implementace s využitím dynamických struktur (spojového seznamu)

  2. 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

  3. 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).

  4. 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.

  5. Type COSI = string[10]; WSKAZ = ^STRU; STRU = record IM : COSI; WSK : WSKAZ end; var F1 : FRONTA; b) s využitím dynamických struktur type FRONTA = record ZAC:WSKAZ; KON:WSKAZ end F1 ZAC KON ZAC - START KON - ILOSC

  6. Úvodní inicializaci fronty řeší algoritmus Procedure INIT; begin new(F1.ZAC); F1.ZAC^.WSK:=nil; F1.KON:=F1.ZAC end F1 ZAC KON

  7. 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

  8. Odebrání prvku z fronty řeší algoritmus ProcedureODEBER(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

  9. Schematicky lze přidání prvku do fronty znázornit: F1 ZAC KON Schematicky lze odebrání prvku z fronty znázornit: (3) (3) (2) (1) R (4) F1 ZAC KON (3) (3) (2) (4) POM (1) R

  10. Implementace s využitím statických struktur (pole) Implementace s využitím dynamických struktur (spojového seznamu) Zásobník(stos) - přidává se i odebírá vždy z vrcholu zásobníku. Datová struktura typu LIFO TOP

  11. 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; varZ1 : 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

  12. Type COSI = string[10]; WSKAZ = ^STRU; STRU = record IM : COSI; WSK : WSKAZ end; var Z1 : WSKAZ; b) s využitím dynamických struktur Z1

  13. Ú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

  14. 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

  15. 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 FunctionJePrazdny : Boolean; begin if Z1=nil then JePrazdny := true else JePrazdny := false end

More Related