{ prima di includere questo file si deve dichiarare: (i) la lunghezza massima della coda; (ii) il tipo degli elementi da inserire nella coda. Questo viene realizzato mediante le seguenti dichiarazioni: const MaxCoda = ...; type TipoElemCoda = ...; } { dichiarazioni di tipo } type TipoPosCoda = 0..MaxCoda; TipoCoda = record coda : array [1..MaxCoda] of TipoElemCoda; primo, ultimo : TipoPosCoda end; { implementazione delle operazioni primitive sulle code } procedure InitCoda (var c: TipoCoda); { inizializza la coda c ponendo a 0 i puntatori al primo e all'ultimo elemento della coda } begin c.primo := 0; c.ultimo := 0 end; { InitCoda } function TestCodaVuota (c: TipoCoda): boolean; { restituisce TRUE se la coda c e' vuota, FALSE altrimenti } begin TestCodaVuota := (c.primo = 0) end; { TestCodaVuota } procedure InizioCoda (c: TipoCoda; var v: TipoElemCoda); { restituisce in v il primo elemento della coda c senza modificare c } begin if TestCodaVuota(c) then writeln('ERRORE: CODA VUOTA') else v := c.coda[c.primo] end; { InizioCoda } function TestCodaPiena (c: TipoCoda): boolean; { restituisce TRUE se la coda c e' piena, FALSE altrimenti } begin TestCodaPiena := (c.primo - (c.ultimo mod MaxCoda) = 1) end; { TestCodaPiena } procedure InCoda (var c: TipoCoda; v: TipoElemCoda); { inserisce l'elemento v all'ultimo posto della coda c } begin if TestCodaPiena(c) then writeln('ERRORE: CODA PIENA') else with c do begin { posizionamento indice ultimo alla prossima posizione libera } if primo = 0 then { c vuota: l'elemento da inserire sara' sia il primo che l'ultimo elemento di c } begin ultimo := 1; primo := 1 end else { c non vuota: cambia solo il puntatore all'ultimo elemento } if ultimo = MaxCoda then { la prossima posizione libera del vettore e' la prima } ultimo := 1 else { la prossima posizione libera del vettore e' la successiva } ultimo := ultimo + 1; { assegnazione di v all'ultimo elemento della coda } coda[ultimo] := v end end; { InCoda } procedure OutCoda (var c: TipoCoda; var v: TipoElemCoda); { elimina il primo record della coda c, restituendone il valore in v } begin if TestCodaVuota(c) then writeln('ERRORE: CODA VUOTA') else with c do begin v := coda[primo]; { se l'elemento eliminato era l'unico elemento presente nella coda, allora si pone a NIL anche il puntatore all'ultimo elemento } if primo = ultimo then begin ultimo := 0; primo := 0 end else if primo = MaxCoda then { il prossimo elemento in cima alla coda si trova in posizione 1 } primo := 1 else { il prossimo elemento in cima alla coda si trova nella posizione successiva } primo := primo + 1 end end; { OutCoda }