Um die Beschreibung eines Stapels und einer Warteschlange zu vereinfachen, handelt es sich um dynamische Ketten von Informationselementen, auf die von einem Ende der Kette aus zugegriffen werden kann. Der einzige wirkliche Unterschied zwischen ihnen besteht in der Tatsache, dass:
bei der Arbeit mit einem Stapel
- Sie fügen Elemente an einem Ende der Kette ein und
- Sie rufen Elemente am selben Ende der Kette ab und / oder entfernen sie
während mit einer Warteschlange
- Sie fügen Elemente an einem Ende der Kette ein und
- Sie rufen sie am anderen Ende ab / entfernen sie
HINWEIS : Ich verwende in diesem Zusammenhang den abstrakten Wortlaut "Abrufen / Entfernen", da es Fälle gibt, in denen Sie das Element nur aus der Kette abrufen oder in gewisser Weise nur lesen oder auf seinen Wert zugreifen, aber auch Fälle, in denen Sie das Element aus entfernen die Kette und schließlich gibt es Fälle, in denen Sie beide Aktionen mit demselben Aufruf ausführen.
Das Wortelement wird auch absichtlich verwendet, um die imaginäre Kette so weit wie möglich zu abstrahieren und von bestimmten Begriffen der Programmiersprache zu entkoppeln. Diese abstrakte Informationsentität, die als Element bezeichnet wird, kann je nach Sprache ein Zeiger, ein Wert, eine Zeichenfolge oder Zeichen, ein Objekt usw. sein.
In den meisten Fällen handelt es sich jedoch entweder um einen Wert oder um einen Speicherort (dh einen Zeiger). Und der Rest versteckt diese Tatsache nur hinter dem Sprachjargon <
Eine Warteschlange kann hilfreich sein, wenn die Reihenfolge der Elemente wichtig ist und genau der Reihenfolge entsprechen muss, in der die Elemente zum ersten Mal in Ihr Programm aufgenommen wurden. Zum Beispiel, wenn Sie einen Audiostream verarbeiten oder wenn Sie Netzwerkdaten puffern. Oder wenn Sie irgendeine Art von Speicherung und Weiterleitung durchführen. In all diesen Fällen muss die Reihenfolge der Elemente in derselben Reihenfolge ausgegeben werden, in der sie in Ihr Programm eingegeben wurden. Andernfalls sind die Informationen möglicherweise nicht mehr sinnvoll. Sie können Ihr Programm also in einem Teil unterbrechen, der Daten von einer Eingabe liest, verarbeitet und in eine Warteschlange schreibt, und ein Teil, der Daten aus der Warteschlange abruft, verarbeitet und in einer anderen Warteschlange speichert, um die Daten weiter zu verarbeiten oder zu übertragen .
Ein Stapel kann hilfreich sein, wenn Sie ein Element vorübergehend speichern müssen, das in den unmittelbaren Schritten Ihres Programms verwendet werden soll. Beispielsweise verwenden Programmiersprachen normalerweise eine Stapelstruktur, um Variablen an Funktionen zu übergeben. Was sie tatsächlich tun, ist, die Funktionsargumente im Stapel zu speichern (oder zu pushen) und dann zu der Funktion zu springen, in der sie die gleiche Anzahl von Elementen aus dem Stapel entfernen und abrufen (oder einfügen). Auf diese Weise hängt die Größe des Stapels von der Anzahl der verschachtelten Funktionsaufrufe ab. Nachdem eine Funktion aufgerufen und beendet wurde, verlässt sie den Stapel in genau demselben Zustand wie vor dem Aufruf! Auf diese Weise kann jede Funktion mit dem Stapel arbeiten und ignoriert, wie andere Funktionen damit arbeiten.
Schließlich sollten Sie wissen, dass es andere Begriffe gibt, die für dieselben ähnlichen Konzepte verwendet werden. Zum Beispiel könnte ein Stapel als Heap bezeichnet werden. Es gibt auch Hybridversionen dieser Konzepte, z. B. kann sich eine Warteschlange mit zwei Enden gleichzeitig wie ein Stapel und eine Warteschlange verhalten, da von beiden Seiten gleichzeitig auf sie zugegriffen werden kann. Darüber hinaus bedeutet die Tatsache, dass Ihnen eine Datenstruktur als Stapel oder als Warteschlange zur Verfügung gestellt wird, nicht unbedingt, dass sie als solche implementiert ist. Es gibt Fälle, in denen eine Datenstruktur als alles implementiert und als spezifisch bereitgestellt werden kann Datenstruktur einfach, weil sie sich so verhalten kann. Mit anderen Worten, wenn Sie einer Datenstruktur eine Push- und Pop-Methode bereitstellen, werden sie auf magische Weise zu Stapeln!