Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Grundlagen der Programmierung: Datenstrukturen

Queues

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Queues sind First In First Out(FIFO)-Datenstrukturen. Vergleichbar sind Queues mit Warteschlangen bei Druckern, über die der erste an den Drucker geschickte Auftrag auch der erste ist, der verarbeitet wird.

Transkript

Der Hauptunterschied zwischen einem Stack und einer Queue: Stacks sind Last in, first out, also LIFO. Queues sind First in, first out, also FIFO. Etwas freier übersetzt: Wer zuerst kommt, mahlt zuerst. Denken Sie an eine Schlange beim Supermarkt. Wir können eine beliebige Anzahl an Menschen an die Schlange anfügen. Wenn wir aber jemanden aus der Schlange abfertigen wollen, sollte die Person vom Anfang der Schlange genommen werden. Einer wird rausgenommen und die anderen folgen, schließen auf und der nächste kommt dran. Solche Schlangen – Queues – sind in der Programmierung sehr beliebt. Denken Sie an Aufträge, die an einen Drucker geschickt werden. Der Drucker kann nur einen Druckauftrag nach dem anderen verarbeiten. Er hat eine eingebaute Warteschlange. Sie schicken unterschiedliche Druckaufträge hinein und die werten dann der Reihe nach in dieser Warteschlange abgearbeitet. First in, first out. Queues sind beim Multithreading sehr beliebt, weil man da gut mitverfolgen kann, welche Aufgaben noch warten, um ausgeführt zu werden, und um auch sicherzustellen, dass sie in der richtigen Reihenfolge ausgeführt werden. Wie beim Stack ist die Idee der Queue als abstrakter Datentyp die, dass wir uns nicht um die aktuelle Verarbeitung dieser Datenstruktur unter der Oberfläche kümmern müssen. Ob das jetzt verlinkte Listen sind oder dynamische Arrays oder was auch immer. Wir müssen uns nicht damit beschäftigen. Alles, was wir damit tun können und tun wollen, ist, ein Element am Ende der Queue dranhängen und am Beginn ein Element verarbeiten. Und wie bei Stacks denken wir nicht mal ansatzweise an numerische Indices. Wie kann ich ein Element aus der Mitte nehmen? Da sollten Sie sich nach einer anderen Datenstruktur umsehen. Mit der Terminologie ist es jetzt etwas anders als bei den Stacks. Bei den Stacks gab's sehr einfach und zentral push, pop und peek. Die Begriffe, um die Queue zu verarbeiten, sind etwas mehr verstreut. Wie auch bei den Arrays gibt's jetzt unterschiedliche Worte, die für diese Idee verwendet werden, um bei einer Queue etwas anzufügen, zu entnehmen, was auch immer. Das Kernverhalten ist immer absolut gleich. Alle Queues sind First-in-first-out-Datenstrukturen. Sehen wir uns mal eine Handvoll Beispiele an. Wir haben da zum Beispiel C#. Bei C# handelt es sich um eine Klasse. Diese Klasse arbeitet mit diversen Methoden und das, was uns dabei interessiert, sind die Methoden enqueue und dequeue. Enqueue fügt am Ende was hinzu, dequeue nimmt am Anfang etwas weg. Bei Java ist die Sache schon ein ganz klein wenig komplizierter, weil es sich hier um ein Interface handelt. Also um eine Schnittstelle. Sie können also kein Queue-Objekt erzeugen. Dafür gibt's eine ganze Menge spezialisierter Klassen, die hauptsächlich für Multithreading und Concurrency-Situationen verwendet werden. Wenn Sie ein klassisches Queue-Verhalten haben wollen, dann ist wieder die LinkedList mit ihren Möglichkeiten Ihre Wahl. Und die Terminologie, die jetzt verwendet wird, ist eben add und remove. Schauen wir weiter zu Python. Python hat eine eigene Queue-Klasse. Diese Queue-Klasse verwendet hauptsächlich put und get für die Idee des Hinzufügens und Entfernens von der Queue. Die Python-Klasse ist auf das Arbeiten mit Threading ausgerichtet, was bei Queues übrigens generell sehr verbreitet ist. Natürlich können Sie sie auch einfach anders verwenden. Aber Sie werden jede Menge Terminologien finden, die von Thread-Synchronisation oder von Prozess-Synchronisation sprechen. Genau so ist es mit Ruby. Ruby hat eine Queue-Klasse, aber sie wird nur dazu verwendet, die Kommunikation zwischen den einzelnen Threads zu synchronisieren. Wenn Sie Standard-Queue-Verhalten wollen, das nicht auf Multithreading ausgerichtet ist, können Sie eine ganz normale Array-Klasse, und die Methode push zum Hinzufügen am Ende des Arrays verwenden, wie wir's ja schon kennen. Aber anstatt pop in Ruby zu verwenden, das ein Element vom Ende des Arrays entfernen sollte, wie bei einem Stack, können wir die Methode shift verwenden. Shift würde umgekehrt reagieren und das Element vom Array-Anfang nehmen. Eigentlich vom Start der Queue und es würden alle anderen Elemente nachrücken. Um jetzt zurück zu unserer Liste zu kommen: in Objective C ist keine eingearbeitete Queue-Datenstruktur vorhanden. Auch wenn wir selbstverständlich NSMutableArray für dieses nur am Ende Hinzufügen oder Entfernen vom Anfang verwenden können. Und in C++ gibt es einen Queue-Container in der Standardbibliothek, wo wir die Methoden push_back und pop_front verwenden können. Alles in allem ist eine Queue eine sehr beliebte Datenstruktur, vor allem, wenn's ums Threading geht.

Grundlagen der Programmierung: Datenstrukturen

Erhalten Sieeinen klaren Eindruck von Datenstrukturen und deren Eigenheiten und verstehen, wie Sie diese am besten einsetzen können – ganz unabhängig von den einzelnen Programmiersprachen.

2 Std. 51 min (29 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!