Datenstrukturen: Queue / Warteschlange

in SteemSTEM4 years ago

Die Warteschlange

Eine Queue (deutsch: Warteschlange) ist ebenfalls eine Datenstruktur, die einige Gemeinsamkeiten mit einer einfach verketteten Liste hat.
Sie stellt die Umkehrung eines Stacks dar und folgt nach dem FIFO-Prinzip (First-In-First-Out). Das bedeutet, das Objekt was zuerst in die Datenstruktur eingefügt wurde, ist zugleich das erste Objekt was entnommen wird.

Genauso wie bei einem Stack gibt es keine Möglichkeit Objekte zwischen weiteren Objekten einzufügen. Objekte können sich also nicht vordrängeln.
Soll ein Objekt eingefügt werden, so wird es immer an das Listenende eingefügt (enqueue). Es sei denn, die Liste ist leer. Möchte man ein Objekt aus einer Queue entnehmen, so wird immer das erste Listenelement entnommen (dequeue).
Oftmals wird auch hier eine Funktionalität für das Kopieren und das Durchlaufen einer Queue angeboten, um so nach bestimmten Objekten zu suchen.

queue.png
Abbildung: Eine Queue

Anwendungsbeispiel

Ein Anwendungsbeispiel für eine Queue ist die Verwaltung von mehreren Threads (Multithreading). Jeder erzeugte Thread wird in eine Queue eingefügt. Nun müssen die Threads ausgeführt werden. Das FIFO-Prinzip hilft hier weiter, denn es sollen idealerweise alle Threads in der Reihenfolge ausgeführt werden, wie sich auch eingefügt worden sind. Dafür greifen mehrere Prozesse auf dieselbe Datenstruktur zu.

CircularBuffer.png
Abbildung: Ringpuffer

Eine weitere Implementierung sind die Ringpuffer. Ein Ringpuffer hat im Gegensatz zu einer Queue eine feste Größe, also wie ein Array. Es gibt einen Pointer, der auf den ersten Index zeigt, sowie einen Pointer der auf den letzten Index zeigt. Hier kann allerdings ein Pufferüberlauf entstehen, wenn bspw. die einzufügenden Objekte größer als der Puffer sind.

Quelle
https://courses.cs.washington.edu/courses/cse373/06sp/handouts/lecture04.pdf, pp. 13 ff.
www.studytonight.com/data-structures/images/introduction-to-queue.png
www.megunolink.com/wp-content/uploads/2016/08/CircularBuffer.png

Sort:  

Steem on und weiter viel Erfolg...

Du hast ein kleines Upvote vom German-Steem-Bootcamp erhalten.

Du findest uns im Discord unter https://discord.gg/HVh2X9B

Aktueller Kurator ist @don-thomas

N E U SAMSTAGS findet jetzt bei uns ab 22 Uhr die Quasselstunde(n) statt wo du nicht nur mit uns reden kannst - es werden auch tolle Preise verlost
Du möchtest keine Upvotes (mehr) von uns erhalten? Eine kurze Mittelung unter diesen Kommentar reicht.
Dem Upvote von uns folgt ein Trail der weitere Upvotes von unseren Unterstützern beinhaltet. Hier kannst du sehen wer diese sind und auch erfahren wie auch du uns und somit die deutschsprachige Community unterstützen kannst.

Coin Marketplace

STEEM 0.30
TRX 0.12
JST 0.033
BTC 64534.17
ETH 3150.15
USDT 1.00
SBD 4.01