Liste
Eine Liste ist eine Datenstruktur, die mehrere Daten enthält, die fortlaufend durchnummeriert sind.
Motivation
Oft kommt es vor, dass man zwar mehrere Daten speichern muss, aber zum Zeitpunkt der Programmierung noch nicht weiß, wie viele genau. Nehmen wir an, ich wollte eine Schulklasse mit einem Programm modellieren. Dann könnte ich für jedes Schüly eine eigene Variable anlegen:
schuely1 = "Babbage, Charles"
schuely2 = "Hopper, Grace"
schuely3 = "Turing, Alan"
schuely4 = "Lovelace, Ada"
# ...
Hieraus ergeben sich eine Reihe von Problemen:
- Wie viele dieser Variablen soll ich anlegen?
- Wenn ich 30 Variablen anlege und nur 24 Schülys in der Klasse sind, was mache ich dann mit den sechs überzähligen Variablen?
- Oder umgekehrt: wenn ich plötzlich ein 31. Schüly in die Klasse gesteckt kriege, was dann?
- Wie kann ich diese Variablen alle systematisch bearbeiten? Sie sind ja nicht zu einer Datenstruktur zusammengefasst.
Eine mögliche Lösung ist, die Daten zu einer nummerierten Liste zusammenzufassen. Diese Liste kann ich in ihrer Länge an meinen Bedarf anpassen und mithilfe von Kontrollstrukturen wie der Wiederholung mit Laufvariable kann ich die Daten auch systematisch bearbeiten.
Implementierung
Dabei gibt es verschiedene Möglichkeiten, Listen zu implementieren. Jede davon hat ihre Vor- und Nachteile, die in den einzelnen Artikeln näher erörtert werden. In der Praxis werden darum häufig Misch-Implementierungen eingesetzt, die versuchen, diese Vor- und Nachteile auszugleichen.
| Art | Vorteile | Nachteile |
|---|---|---|
| Array | sehr schneller Zugriff | fixierte Länge |
| Verkettete Liste | langsamer Zugriff | flexible Länge |
| Hash-Tabelle | schneller Zugriff bei wenigen Daten | langsamer Zugriff bei vielen Daten |
Programmierung
Visuelle Programmierung
In Scratch gibt es eine Block-Kategorie Listen. Listen können wie Variablen angelegt werden und sind dann ebenfalls über runde Blöcke abrufbar. Sobald man eine Liste angelegt hat, erscheinen die Blöcke mit den dazugehörigen Operationen wie füge () zu [Liste v] hinzu, lösche () aus [Liste v], (Länge von [Liste v]) oder (Element () von [Liste v]). Diese Blöcke sind dunkelorange.
Im AppInventor gibt es ebenfalls Blöcke für Listenoperationen. Diese Blöcke sind hellblau.
Textuelle Programmierung
In sehr vielen Programmiersprachen werden eckige Klammern [] genutzt, um Listen und Listenelemente zu kennzeichnen. Der Zugriff auf das Element, das in der Liste liste an Position 0 steht, wird häufig so geschrieben: liste[0]. Dies ist z.B. in Python, Java, JavaScript, Lua und vielen anderen Sprachen so.
In den meisten Sprachen werden die Positionen der Listeneinträge nicht von 1 an aufwärts gezählt, sondern von 0!
Damit enden die Gemeinsamkeiten, denn ansonsten unterscheiden sich die Sprachen in vieler Hinsicht: Die Länge einer Liste l fragt man in Python mit len(l) ab, in Java mit l.length oder mit l.size(), je nachdem, welche Art von Liste man implementiert hat.
