Statt der IF-Abfrage hätten wir auch mit der MOD-Funktion arbeiten können, und hätten uns dabei vermutlich erst einmal verrechnet. Die hier gegebene Lösung ist so primitiv, daß ihre Korrektheit unmittelbar einsichtig ist; daher ist sie unbedingt vorzuziehen (schneller ist sie außerdem auch noch!)PROCEDURE enqueue(x: atom; VAR q: queue); BEGIN WITH q^ DO IF tl = max THEN tl := 1 ELSE tl := tl + 1 END; store[tl] := x; l := l + 1; END; END enqueue; PROCEDURE dequeue(VAR y: atom; VAR q: queue); BEGIN WITH q^ DO y := store[hd]; l := l - 1; IF hd = max THEN hd := 1 ELSE hd := hd + 1 END; END; END dequeue;