{ File: code.pas } { Scopo: rappresentazione collegata di code } { prima di includere questo file si deve dichiarare il tipo degli elementi da inserire nella pila, mediante una dichiarazione type TipoElemCoda = ...; } { dichiarazioni di tipo } type TipoElemLista = TipoElemCoda; {$I TIPOLIS.PAS} { inclusione del file contenente la definizione del tipo TipoLista } TipoCoda = record primo, ultimo : TipoLista end; {$I LISTE.PAS} { inclusione del file contenente l'implementazione delle operazioni primitive sulle liste } procedure InitCoda (var c: TipoCoda); { inizializza la coda c ponendo a NIL i puntatori al primo e all'ultimo elemento della coda } begin InitLista(c.primo); InitLista(c.ultimo) end; { InitCoda } function TestCodaVuota (c: TipoCoda): boolean; { restituisce TRUE se la coda c e' vuota, FALSE altrimenti } begin TestCodaVuota := TestListaVuota(c.primo) end; { TestCodaVuota } procedure InizioCoda (c: TipoCoda; var v: TipoElemCoda); { restituisce in v il primo elemento della coda c senza modificare c } begin TestaLista(c.primo,v) end; { InizioCoda } procedure InCoda (var c: TipoCoda; v: TipoElemCoda); { inserisce l'elemento v all'ultimo posto della coda c } begin if TestCodaVuota(c) then { c e' vuota: l'elemento da inserire sara' sia il primo che l'ultimo elemento della coda } begin new(c.primo); c.ultimo := c.primo end else begin new(c.ultimo^.next); c.ultimo := c.ultimo^.next end; c.ultimo^.info := v; c.ultimo^.next := nil end; { InCoda } procedure OutCoda (var c: TipoCoda; var v: TipoElemCoda); { elimina il primo record della coda c, restituendone il valore in v } begin InizioCoda(c,v); { copia il valore del primo elemento di c in v (se esiste) } CancellaPrimoLista(c.primo); { elimina il primo elemento di c (se esiste) } { se l'elemento eliminato era l'unico elemento presente nella coda, allora si pone a NIL anche il puntatore all'ultimo elemento } if c.primo = NIL then c.ultimo := NIL end; { OutCoda }