Queue - Dynamische Datenstrukturen

Queue

Eine Warteschlange (engl. Queue) ist eine Datenstruktur, in der Elemente nach dem Warteschlangenprinzip (auch FIFO-Prinzip) eingefügt und gelöscht werden.


Erklärung

Eine Queue heißt auf Deutsch Warteschlange und genau so kannst du dir diese Datenstruktur auch vorstellen:

Hierbei gilt das "First in First Out"-Prinzip: die erste Person, die sich anstellt, wird auch als Erstes bedient.

Operationen am Beispiel

Eine Queue hat drei wichtige Operationen, die auf ihr aufgeführt werden können:

  • Enqueue: Einfügen eines neuen Objekts.
  • Dequeue: Löschen des ersten Objekts.
  • Empty: Überprüfen, ob die Queue leer ist.

Enqueue

Schau dir das am besten am Beispiel einer Warteschlange an.

Die neue Person stellt sich an das Ende der Schlange an.

Dequeue

Die erste Person der Schlange wird als Nächstes bedient.

Empty

Kassiererin an einer Kasse ist alleine, also keine Personen stehen an.

Bei der Operation Empty überprüfst du, ob die Schlange leer ist.

Aufbau

Eine Queue kann als doppelt verkettete Liste implementiert werden.

Du benötigst zwei Wächterknoten:

  1. head: Erster Knoten in der Queue.
  2. tail: Letzter Knoten.

Operationen an der Datenstruktur

Nun schau dir wieder die drei Operationen an, die du auf eine Queue anwenden kannst:

Enqueue

Eine Queue mit drei Daten-Knoten und head und tail am Anfang bzw. Ende. Diese zeigen beide auf NULL.

Um ein neues Element an die Queue zu hängen, fügst du sie vor den Wächterknoten tail ein.

Dafür müssen zuerst die Zeiger von dem neuen Knoten auf den letzten Daten-Knoten und auf tail zeigen.

Dann lässt du die Zeiger von dem letzten Daten-Knoten und tail auf den neuen Knoten zeigen:

Dequeue

Um das erste Element aus der Queue zu löschen, lässt du den Zeiger von head auf den zweiten Knoten zeigen und umgekehrt:

Das erste Element ist nun gelöscht, da keine Knoten aus der Liste auf sie zeigen.

Empty

Mit der Empty-Operation überprüfst du, ob eine Queue leer ist.

Das ist der Fall, wenn head auf tail und tail auf head zeigt:

Nutzungskontext

Queues werden oft als Zwischenspeicher verwendet: Dabei werden Daten von einem Gerät zum anderen "durchgereicht". Der Vorteil dabei ist, dass die beiden Geräte getrennt voneinander einlesen und verarbeiten können.

Im linken Teil des Bildes ist ein Block, der eine Eingabe symbolisieren soll. Dieser wird von einem Gerät eingelesen und dann an einen Zwischenspeicher in Form einer Queue gehängt. Das erste Element der Queue wird rechts im Bild von einem zweiten Gerät von der Queue genommen und verarbeitet.
Queue als Zwischenspeicher

Ein anderes Wort für Zwischenspeicher ist Buffer (deutsch Puffer). Eine Queue wird gerne als Ringbuffer implementiert. Der sieht ungefähr so aus:

Auf diesem Bild wird eine Queue als Ringbuffer dargestellt. Dieser ist in die drei Teile fetch, add und release eingeteilt, die nacheinander immer wieder durchlaufen werden können.
Queue als Buffer

Queues können außerdem für Benutzeroberflächen verwendet werden, um die Eingaben über die Maus und die Tastatur zu speichern.

Das Bild zeigt im oberen Bereich einen Monitor mit Benutzeroberfläche, im speziellen ein Login-Fenster und darunter eine Tastatur und eine Maus, deren Eingaben in einer Queue gespeichert und nach und nach verarbeitet werden.
Queue bei Benutzeroberflächen

Beispiele

Equeue

Füge nun nochmal zur Übung die 2 an die Queue an:

Eine Queue als Datenstruktur mit head- und tail-Knoten am Anfang bzw. Ende und drei Datenknoten mit den Werten 12, 7 und 4. head und tail zeigen beide auf NULL.

2 muss also auf 4 und tail zeigen und danach 4 und tail auf 2:

Dequeue

Nun entferne nochmal zur Übung den ersten Knoten aus der Queue.

head und 7 zeigen nun auf den jeweils Anderen:

Dadurch zeigt kein Knoten mehr auf 12, wodurch sie aus der Liste gelöscht wurde.

Empty

Wenn du überprüfen möchtest, ob die Queue leer ist, dann musst du nur überprüfen, ob head auf tail und tail auf head zeigt. Da das hier nicht der Fall ist, ist sie nicht leer.

No items found.

simpleclub ist am besten in der App.

Mit unserer App hast du immer und überall Zugriff auf: Lernvideos, Erklärungen mit interaktiven Animationen, Übungsaufgaben, Karteikarten, individuelle Lernpläne uvm.

Jetzt simpleclub Azubi holen!

Mit simpleclub Azubi bekommst du Vollzugang zur App: Wir bereiten dich in deiner Ausbildung optimal auf deine Prüfungen in der Berufsschule vor. Von Ausbilder*innen empfohlen.

Jetzt simpleclub Azubi holen