Was genau unterscheidet Listen von Queues und stacks in Python?

3 Antworten

Queue (Schlange)

Das ist eine Queue (Schlange):

Bild zum Beitrag

Quelle: ACBahnWarteschlange EisdieleCC BY 3.0

Eine Queue basiert (nach klassischer Definition) auf dem FIFO-Prinzip (First In – First Out). Das sieht man schön an obiger Warteschlange: Die erste Person, die in der Schlange steht, bekommt auch zuerst ihr Eis. Bei einer Queue existieren folgende Operationen:

  • Anstellen eines neuen Elements an das Ende der Queue
  • Abrufen des vordersten Elements („Kopf“) der Queue
  • Entfernen des vordersten Elements der Queue

Die Elemente in der Mitte spielen keine Rolle und können nicht abgerufen werden. Der Verkäufer kann immer nur den vordersten Kunden bedienen, nicht irgendeinen anderen.

Stack (Stapel)

Das sind Stacks (Stapel):

Bild zum Beitrag

Quelle: congerdesign, plate, CC0

Ein Stack basiert auf dem LIFO-Prinzip (Last In – First Out). Das sieht man gut an einem Tellerstapel: Der Teller, den du als letztes auf den Stapel gelegt hast, ist auch derjenige, den du zuerst wieder nimmst. Bei einem Stack existieren folgende Operationen:

  • Legen eines neuen Elements auf den Stapel
  • Abrufen des obersten Elements des Stapels
  • Entfernen des obersten Elements des Stapels

Die Elemente in der Mitte spielen keine Rolle und können nicht abgerufen werden. Du kannst immer nur den obersten Teller entnehmen, nicht irgendeinen. Dazu musst du erst alle Teller darüber entfernen.

Liste

Das ist eine Liste:

Bild zum Beitrag

Quelle: PrattfloraIce cube trayCC BY-SA 3.0

Eine Liste basiert weder auf dem FIFO- noch auf dem LIFO-Prinzip, sondern ist wesentlich flexibler. Das sieht man an obiger Eiswürfelbox: Es kann jederzeit jeder Eiswürfel entnommen werden bzw. ein Eiswürfel an beliebiger Stelle eingesetzt werden. Bei einer Liste existieren folgende Operationen:

  • Einfügen eines Elements am Ende der Liste oder an einer beliebigen Position
  • Abrufen eines Elements an einer beliebigen Position
  • Entfernen eines Elements an einer beliebigen Position
Wann verwende ich welche dynamische Datenstruktur?

Es kommt immer auf den Kontext an. Eine Queue ist sinnvoll, wenn man etwas Warteschlangen-ähnliches (FIFO) hat. Ein Stack ergibt Sinn, falls immer nur das oberste Element interessant ist (LIFO). Ansonsten empfiehlt sich eine Liste, falls größere Flexibilität erforderlich ist.

 - (Computer, Technik, programmieren)  - (Computer, Technik, programmieren)  - (Computer, Technik, programmieren)
willi55  24.12.2018, 14:10

Das ist eine besonders schöne und anschauliche Antwort. Gefällt mir sehr!

1

List, Queue und Stack sind dynamische Datenstrukturen.

Bei Listen kannst Du auf jedes belibige Element der LIste zugreifen. Stacks sind Stapel und zeichnen sich durch das LIFO Prinzip aus (Last In First Out). Beim Stack kannst Du immer nur auf das oberste Element zugreifen. Queues sind Schlangen und arbeiten nach dem FIFO Prinzip (First In First Out). Das Element, das Du als erstes in die Queue packst, auf das greifst Du auch als erstes zu.

Woher ich das weiß:Studium / Ausbildung

List (dt. Liste) ist optimiert auf feste Längen. Queues im Gegenzug auf variable Längen. Weißt du also nicht, wie viele Elemente du speichern möchtest, dann solltest du eher eine Queue verwenden.
Stacks sind ein komplett anderer Ansatz.
Queue und List arbeiten beide FIFO (First in first out, also wie z.B. eine Supermarktschlange) während der Stack (Stapel) LIFO (Last in first out, also wie z.B. ein Bücherstapel) arbeitet.