Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Verkettete Listen

Nach dieser Lektion: Ich kann eine verkettete Liste aufbauen und durchlaufen.

Lektion, 50 Min.2 BefehleLab für Compilerbau und Rechnerarchitektur: gcc, flex, bison und RISC-V in einer VM

Was ist eine verkettete Liste?

Eine verkettete Liste besteht aus Knoten, und jeder Knoten kennt nur seinen Nachfolger. Damit fügen Sie mitten in einer Folge Werte ein oder löschen sie, ohne andere Werte zu verschieben.

Denken Sie an eine Schnitzeljagd: Jeder Zettel nennt nur den Ort des nächsten. Ein Zettel lässt sich leicht dazwischenlegen. Zettel Nummer 50 finden Sie aber nur über alle davor.

Am Ende dieser Lektion

Notiz

Ich kann eine verkettete Liste aufbauen und durchlaufen.

Schlüsselwörter

BegriffWas er bedeutet
Knotenein Stück der Liste mit einem Wert und einem Verweis
Verweisdie Angabe, welcher Knoten als Nächstes kommt
Kopfder erste Knoten der Liste
Nonekein Knoten, also das Ende der Liste
DurchlaufenKnoten für Knoten dem Verweis folgen

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein Knoten hält einen Wert und einen Verweis

Wir bauen einen Knoten als Wörterbuch (dictionary) mit zwei Einträgen: wert und weiter. weiter zeigt auf den nächsten Knoten. Beim letzten Knoten ist es None, also kein Knoten. Die Liste kennt nur ihren Kopf. Alle anderen Knoten erreichen Sie über die Verweise.

Knoten bauen und durchlaufen

Code: python
# Drei Knoten von hinten nach vorn bauen und dann durchlaufen.
c = {"wert": 8, "weiter": None}
b = {"wert": 5, "weiter": c}
a = {"wert": 3, "weiter": b}
kopf = a
aktuell = kopf
while aktuell is not None:
    print(aktuell["wert"])
    aktuell = aktuell["weiter"]
# Aendern Sie den Wert von c auf 9 und fuehren Sie erneut aus.

Verweisen von Hand folgen

Der Befehl baut dieselben drei Knoten in einer Zeile. Dann folgt er von a aus zweimal dem Verweis weiter und gibt den Wert dort aus. Der zweite Befehl hängt an einen Knoten einen Nachfolger an.

Zweimal dem Verweis folgen

Befehl
python3 -c "c = {'wert': 8, 'weiter': None}; b = {'wert': 5, 'weiter': c}; a = {'wert': 3, 'weiter': b}; print(a['weiter']['weiter']['wert'])"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Einen Nachfolger anhängen

Befehl
python3 -c "k = {'wert': 1, 'weiter': None}; k['weiter'] = {'wert': 2, 'weiter': None}; print(k['weiter']['wert'])"

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Einfügen ändert nur zwei Verweise

Um nach dem Knoten b einen neuen Knoten n einzufügen, setzen Sie zwei Verweise. Zuerst zeigt n auf den Nachfolger von b. Dann zeigt b auf n. Die Reihenfolge ist wichtig, sonst geht der Rest der Liste verloren. Das Löschen von n setzt nur den Verweis davor um.

Beispiel: die 6 zwischen 5 und 8

SchrittVerweisKette danach
StartKeiner3, 5, 8
1n zeigt auf den Nachfolger von b (die 8)3, 5, 8 und 6 zeigt auf 8
2b zeigt auf n3, 5, 6, 8

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Einen Knoten dazwischen einhängen

Code: python
# Die 6 hinter den Knoten b einhaengen.
c = {"wert": 8, "weiter": None}
b = {"wert": 5, "weiter": c}
kopf = {"wert": 3, "weiter": b}

n = {"wert": 6, "weiter": None}
n["weiter"] = b["weiter"]   # zuerst den Rest merken
b["weiter"] = n             # dann den neuen Knoten einhaengen

aktuell = kopf
while aktuell is not None:
    print(aktuell["wert"])
    aktuell = aktuell["weiter"]
# Loeschen Sie die Zeile mit der Notiz zuerst den Rest merken und fuehren Sie aus.

Array und verkettete Liste im Vergleich

AufgabeArrayVerkettete Liste
Wert mit Nummer i lesenEin Schritti Schritte
Einfügen an bekannter StelleViele Werte verschiebenZwei Verweise ändern
Einfügen am AnfangAlle Werte verschiebenNeuer Kopf
SpeicherPlätze direkt nebeneinanderKnoten verstreut, Verweise kosten Platz

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Umdrehen biegt jeden Verweis um

Zum Umdrehen laufen Sie einmal durch die Liste. Bei jedem Knoten biegen Sie den Verweis nach hinten. Dafür brauchen Sie drei Namen: vorher, aktuell und naechster. Sie merken sich den Nachfolger, biegen den Verweis um und rücken weiter. Am Ende ist vorher der neue Kopf.

Beispiel: 3, 5, 8 umdrehen

RundeKnotenVerweis danachKette bis hier
13Zeigt auf None3
25Zeigt auf 35, 3
38Zeigt auf 58, 5, 3

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein häufiger Fehler

Warnung

Viele denken, beim Einfügen genüge es, b auf n zeigen zu lassen. Dann verliert die Liste alles hinter b, denn niemand kennt die 8 mehr. Setzen Sie zuerst den Verweis des neuen Knotens und danach den des Vorgängers.

Über dieses Lab und seinen Quellcode: Lab für Compilerbau und Rechnerarchitektur: gcc, flex, bison und RISC-V in einer VM

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.