Eine leere Schlange hat einen nichtleeren Beschreibungsblock, aber die daran hängende Liste ist leer; wir setzen (redundant) hd = tl = NIL und l = 0. Wird eine Schlange nicht mehr gebraucht, so müssen wir nicht nur die Listenelemente, sondern auch den Beschreibungskopf freigeben!TYPE queue = POINTER TO qrecord; qrecord = RECORD l: CARDINAL; hd, tl: liste; END;
Bei einer einelementigen Schlange ist der Kopf gleichzeitig das letzte Element; dies gibt beim Eintragen und Aushängen Sonderfälle. Das versuchte Aushängen aus einer leeren Schlange fangen wir nicht dynamisch ab; der Benutzer kann (und sollte) es durch Abfragen selbst vermeiden!PROCEDURE newqueue(VAR q: queue); BEGIN NEW(q); WITH q^ DO hd := NIL; tl := NIL; l := 0; END; END newqueue; PROCEDURE isempty(q: queue): BOOLEAN; BEGIN RETURN q^.hd = NIL; END isempty; PROCEDURE killqueue(VAR q: queue); BEGIN delete(q^.hd); DISPOSE(q); END killqueue;