Die hier gesetzten Anfangswerte für hd und tl ergeben sich beim Austragen des einzigen Elements einer einelementigen Schlange, die ganz am Ende des Array liegt; andere Besetzungen wären ebenso möglich. Eine Schlange ist leer genau dann, wenn sie die Länge Null hat.TYPE queue = POINTER TO qrecord; index = 1 .. max; (* maximaler Umfang *) storeTyp = ARRAY [index] OF atom; qrecord = RECORD store: StoreTyp; hd, tl: index; l: CARDINAL; END; PROCEDURE newqueue(VAR q: queue); BEGIN NEW(q); WITH q^ DO l := 0; hd := 1; tl := max; END; END newqueue;
Achtung! Eine Schlange der maximalen Länge l=max sieht bei dieser Implementierung bis auf die Längenangabe genauso wie eine leere Schlange aus! Daher müssen wir hier unbedingt die Länge mitrechnen, selbst wenn sie der Anwender nicht brauchen sollte.