const max = 5; (* massima dimensione *) empty_el = 9999; type (* dichiarazione della struttura CODA *) queue = RECORD elements: array[1..max] of integer; inQueue: 1..max; (* punta al primo elemento della coda *) END (* end record *) (* Funzioni/Procedure di base: create(queue); full(queue) --> boolean; empty(queue) --> boolean; in(queue, integer); out(stack) --> integer; *) (* CREA CODA *****************************************) (* procedura di inizializzazione *) procedure create(Q: queue); begin Q.inQueue := 0; (* stato di coda vuota *) end; (* CODA PIENA *****************************************) function full(Q: queue): boolean; begin full := (Q.inQueue=max); end; (* STACK VUOTO *****************************************) function empty(Q: queue): boolean; begin empty := (Q.inQueue=0); end; (* INSERIMENTO NELLA CODA *****************************) (* restituisce TRUE se l'elemento č stato inserito *) function in(var Q: queue; x: integer): boolean; begin if(not full(Q)) then begin Q.inQueue := Q.inQueu+1; (* un elemento in pių *) Q.elements[Q.inQueue] := x; in := true; end else in := false; end; (* USCITA DALLA CODA ******************************) function out(var Q: queue): integer; begin if(not empty(Q)) then begin out := Q.elements[1]; (* tutti gli elementi vengono "sciftati" a sinistra di 1 *) for i=2 to Q.inQueue do Q.elements[i-1] := Q.elements[i]; Q.inQueue := Q.inQueu-1; end else out := empty_el; end; (* FUNZIONE: somma degli elementi della coda; *) function sum(Q: queue): integer; var tot: integer; begin tot := 0; while(not empty(Q)) tot := tot + out(Q); sum := tot; end;