Queue

Aus ProgrammingWiki

Wechseln zu: Navigation, Suche

Ein ADT Queue (Warteschlange) ist dem Stack ähnlich. Hier gibt es ebenso die Operationen

  1. zur Instanziierung einer Queue,
  2. zum Hinzufügen (enqueue) eines neuen Elements (am Ende: rear) und
  3. zum Entfernen (dequeue) des nächsten Elements (am Anfang: front).

Im Gegensatz zum Stack (LIFO) handelt es sich bei einer Queue um eine First-In-First-Out-(FIFO)-Datenstruktur. D.h. die Elemente, die zuerst mit der enqueue-Operation am Ende (rear, tail) der Queue hinzugefügt wurden, werden auch die sein, die zuerst mit der dequeue-Operation am Anfang (head) entfernt werden - so wie man das von einer Warteschlange erwartet.

Eine Queue kann mit einer Doubly Linked List implementiert werden. Da man bei einer Queue sehr häufig Elemente am Ende anfügt und am Anfang entfernt, ist eine flexible Listen-Datenstruktur, wie eben die Linked List, sehr zu empfehlen. Neben der Verwendung einer Doubly Linked List kann auch eine Singly Linked List, für die wir je einen Zeiger auf das aktuell erste bzw. letzte Element speichern, Verwendung finden. Einfügen und entfernen eines Elements können in konstanter Zeit, d.h. in $\mathcal{O}(1)$, erfolgen.

Nun ist es relativ einfach eine Queue mit Singly Linked List zu implementieren. Bei der enqueue-Operation muss man ein neues Node anlegen, dessen Pointer auf das bisher erste Element setzen und den head der Queue entsprechend anpassen. Bei der dequeue-Operation wird das letzte Element entfernt und der Pointer des vorherigen Nodes auf null gesetzt. Außerdem wird der rear*-Pointer nun auf das bisher vorletzte und aktuell letzte Node gesetzt.

Für die Queue können wir die Doubly-Linked List, die wir oben implementiert haben, nutzen. Im Unterschied zu obiger Beschreibung der Operationen `enqueue` und `dequeue` werden neue Elemente vorn (front) hinzugefügt und hinten (rear) entfernt. Auf diese Weise wird nicht nur FIFO umgesetzt, sondern auch eine Bewegung der Warteschlange im Speicher bei vielen `enqueue`- und `dequeue`-Operationen vermieden. Man kann sich den Speicher dann auch zyklisch (Kreisstruktur) vorstellen.

Persönliche Werkzeuge