Liste (Datenstruktur)

Verkettete Listen gehören zu den dynamischen Datenstrukturen, die eine Speicherung von einer im Vorhinein nicht bestimmten Anzahl von miteinander in Beziehung stehenden Werten einfacher oder zusammengesetzter Datentypen erlauben. Sie werden durch Zeiger auf die jeweils folgende(n) Knoten oder Speicherzellen des Arbeitsspeichers realisiert.

Inhaltsverzeichnis

Vergleich mit anderen Datenstrukturen

Im Gegensatz zu Arrays müssen die einzelnen Speicherzellen nicht nacheinander im Speicher abgelegt sein, es kann also nicht mit einfacher Adress-Arithmetik gearbeitet werden, sondern die Speicherorte müssen absolut referenziert werden. Im Gegensatz zu Bäumen sind Listen linear, d.h. ein Element hat genau einen Nachfolger und einen Vorgänger.

Knoten

Ein Knoten (engl. node) bezeichnet ein Element der Liste, welches die Daten und einen Zeiger auf seinen Nachfolger enthält.

Bild: Knoten _(Informatik).png

Typen

Man unterscheidet grundsätzlich zwischen einfach und mehrfach oder doppelt verketteten Listen.

Einfach verkettete Liste

Sie ist die einfachste Form der verketteten Liste, da sie neben den einzelnen Knoten nur einen "Start"-Zeiger besitzt. Letzterer zeigt auf den ersten Knoten in der Liste (roter Pfeil). Der letzte Knoten in der Liste zeigt auf den Nullwert (hier NIL).

Verbale Definition: Eine Liste ist entweder leer oder sie besteht aus einem Kopf und einem Zeiger, der wiederum eine Liste ist.

Bild: Einfach_verkettete_Liste.png

Vorteile

Nachteile

Erweiterungen Da sich die zuvor erwähnte Variante als zu umständlich (siehe Nachteile) erwiesen hat, wird oft eine der hier nachstehenden Erweiterungen verwendet.

Vorteile:
  • Über die Liste kann von hinten nach vorne iteriert werden; es gibt weniger Sonderfälle beim einfügen, entfernen und sortieren.
Nachteile:
  • Unbedeutend mehr Speicherbedarf

Doppelt (mehrfach) verkettete Liste

thumb|Verkettete Liste Hier hat jedes Element der Liste nicht nur einen Zeiger auf das nachfolgende, sondern auch einen zusätzlichen zweiten auf das Vorgänger-Element.

Der Vorgänger-Zeiger des ersten Elementes zeigt auf ein Dummy-Element, wie auch der Nachfolger-Zeiger des letzten Elementes. Dieses besondere Element dient zum Auffinden des Anfangs und des Endes der doppelt verketteten Liste.

Nachteile

Vorteile

Weitere Formen

Liste mit Listenkopf: Der Listenkopf ist ein spezieller Knoten am Anfang der Liste, der zusätzliche Informationen, wie z.B. die Anzahl der Knoten in der Liste, enthält. Der wesentlichste Vorteil ist, dass es wie bei der Liste mit Ende'-Zeiger weniger Sonderfälle wie z.B. beim Einfügen des 1. Elements gibt.

Listen in der objektorientierten Programmierung

In der objektorientierten Programmierung zeichnen sich Listen gemäß dem Prinzip der Kapselung durch eine Menge von Listenoperationen aus. Intern können dabei unterschiedliche und durchaus auch kompliziertere Datenstrukturen, wie binäre Bäume zum Einsatz kommen. Aufgrund der internen Datenstruktur können dabei oft auch weitere Funktionen, wie z.B. Sortierung, sortiertes Einfügen, Entfernen des größten Elementes, etc. angeboten werden.

Je nach Einsatzzweck kann es sinnvoll sein, zwischen konkreten Implementierungen der Schnittstelle Liste zu wählen. Wird beispielsweise hauptsächlich wahlfrei über Index auf die List zugegriffen, wäre eine verkettete Liste eine schlechte Wahl, da dort n Operation nötig sind, um das nte Element zu adressieren.

Daher werden in objektorientierten Bibliotheken oft neben der Schnittstelle verschiedene konkrete Implementierungen angeboten. Beipielsweise gibt es in der Progammiersprache Java als Schnittstelle java.util.List und als konkrete Implementierungen java.util.LinkedList und java.util.ArrayList.

Listen in der Programmiersprache LISP

Listen sind neben den Einzelwerten (Atomen) die Basisdatenstruktur der Programmiersprache LISP. Programme sind Listen von Listen.

See also: Liste (Datenstruktur), Arbeitsspeicher, Array, Baum (Graphentheorie), Binärer Baum, Datenstruktur, Datentyp, Java (Programmiersprache), LISP, Linear