Ringlisten (2)


Mittels Ringlisten lassen sich Schlangen überraschend elegant implementieren, wenn man den Anker auf das logisch letzte Element verweisen läßt; das folgende Element ist dann der Kopf, und man kann vom Anker aus effizient sowohl den Kopf entfernen, wie auch durch Eintragen dahinter und Weiterschalten des Ankers ein neues logisch letztes Element eintragen. Wenn man die Länge nicht explizit benötigt, kommt man mit dem Zeigertyp liste  zur Repräsentation der Schlangen aus. Die Routinen ändern sich nur geringfügig:
TYPE queue = liste;

PROCEDURE enqueue(x: atom; VAR q: queue);
VAR p: queue;
BEGIN NEW(p); 
      IF q = NIL THEN q := p ELSE p^.nach := q^.nach
      END; 
      q^.nach := p; q := p; p^.wert := x; 
END enqueue;

PROCEDURE dequeue(VAR x: atom; VAR q: queue);
VAR p: queue;
BEGIN p := q^.nach; x := p^.wert; 
      IF q = p THEN q := NIL ELSE q^.nach := p^.nach
      END;
      DISPOSE(p);
END dequeue;

zurück | Inhalt | Index | vor | Vorlesung

Klaus Lagally, 22. Februar 2000, 19:36