www.wikidata.de-de.nina.az
Eine verkettete Liste ist eine dynamische Datenstruktur in der Datenelemente geordnet gespeichert sind Bei ihrer Erstellung braucht die maximale Anzahl der Elemente nicht festgelegt zu werden und die Anzahl darf wahrend der Laufzeit beliebig variieren Inhaltsverzeichnis 1 Einfach verkettete Listen 1 1 Anwendungen 2 Doppelt verkettete Liste 3 Weitere Formen 3 1 Listenkopf 3 2 Skip Liste 3 3 Adaptive Listen 3 4 Abstrakter Datentyp 3 5 Listen in der objektorientierten Programmierung 4 Beispiele 4 1 Neues Element in Liste einfugen 4 2 Element suchen 4 3 Element aus Liste loschen 4 4 Verwendung von Liste in objektorientierter Sprache 5 Siehe auch 6 Weblinks 7 Einzelnachweise und AnmerkungenEinfach verkettete Listen BearbeitenDer Datentyp L A displaystyle L A nbsp der einfach verketteten Listen mit Elementen vom Typ A displaystyle A nbsp ist rekursiv definiert als L N i l A L A displaystyle L operatorname mathit Nil mid A L A nbsp Die technische Realisierung erfolgt meistens durch einzelne Knoten die aus den Nettodaten selbst und einem Verweis auf den Nachfolgeknoten bestehen Im letzten Knoten ist als Nachfolgeknoten der sogenannte Null Zeiger angegeben der auch N i l displaystyle operatorname mathit Nil nbsp heisst 1 Elementare Listenoperationen sind das Erweitern der Liste um einen Knoten am Anfang und das Entfernen des ersten Knotens die in der Zeit O 1 displaystyle mathcal O 1 nbsp erfolgen konnen nbsp Einfach verkettete Liste mit drei WertenVorteile Wenn das Suchen erledigt und der Einfugepunkt gefunden ist ist der Aufwand fur das Einfugen an jeder Stelle O 1 displaystyle mathcal O 1 nbsp In einem Array O n displaystyle mathcal O n nbsp mussten hingegen Datensatze umkopiert werden Geringer zusatzlicher Speicherbedarf 1 Zeiger Nachteile Die Kosten furs Suchen sind O n displaystyle mathcal O n nbsp da ungunstigstenfalls uber jeden Knoten iteriert werden muss Anwendungen Bearbeiten Einfach verkettete Listen werden in hochdynamischen Umgebungen verwendet in denen mit Arrays nicht mehr sinnvoll gearbeitet werden kann da diese den Umgang mit syntaktischen Operationen enorm erschweren So ist die einfach verkettete Liste mit Datentyp L U N i l U L U displaystyle L U operatorname mathit Nil mid U L U nbsp mit U L U E displaystyle U L U mid E nbsp wobei E displaystyle E nbsp weitere elementare LISP Datentypen bezeichnet der zentrale Datentyp der Programmiersprache LISP Sogar LISP Programme sind selbst solche Listen Doppelt verkettete Liste Bearbeiten nbsp Doppelt verkettete Liste mit drei WertenIm Gegensatz zur einfach verketteten Liste hat jedes Element sowohl einen Zeiger auf das nachfolgende als auch auf das vorhergehende Element Der Vorganger Zeiger des ersten und der Nachfolger Zeiger des letzten Elementes zeigen auf den Wert NULL Dieses besondere Element dient zum Feststellen des Anfangs und des Endes einer doppelt verketteten Liste 1 Vorteile Das Entfernen eines Elements aus der Liste kann in O 1 displaystyle mathcal O 1 nbsp geschehen auch wenn die Ankunft beim Element uber keine der zwei Verkettungen geschah In diesem Fall musste bei der einfach verketteten Liste der Vorganger gesucht werden Uber die Liste kann von hinten nach vorne iteriert werden Nachteile Hoherer Speicherbedarf fur die zusatzlichen Zeiger Beim Loschen und Einfugen mussen auch die Vorganger Zeiger der nachfolgenden Listenelemente angepasst werden Weitere Formen BearbeitenListenkopf Bearbeiten Der Listenkopf oder Listenanker ist ein Datenfeld welches zusatzliche Informationen wie beispielsweise die Anzahl der Knoten in der Liste enthalten kann Er zeigt auf das erste Element Skip Liste Bearbeiten Wie bei verketteten Listen werden auch bei der Skipliste die Daten in Containern abgelegt Diese enthalten einen Schlussel und einen Zeiger auf den nachsten Container Allerdings konnen Container in Skiplisten auch Zeiger auf andere Container enthalten welche nicht direkt nachfolgen Es konnen also Schlussel ubersprungen werden Jeder Container hat eine bestimmte Hohe h textstyle h nbsp welche um 1 textstyle 1 nbsp kleiner ist als die Anzahl der Zeiger die ein Container enthalt Die Zeiger werden von 0 textstyle 0 nbsp bis h textstyle h nbsp nummeriert Grundsatzlich imitiert eine Skipliste also die Binare Suche auf einem Feld nbsp Bei den Skip Listen unterscheidet man drei Arten von Typen ausgeglichene SkipList unausgeglichene SkipList siehe Bild randomisierte SkipListBei allen Typen ist das mehrfache Auftreten des Inhaltes erlaubt Allerdings sind die aus und die unausgeglichene SkipList geordnet wohingegen die randomisierte SkipList nicht notwendigerweise geordnet sein muss Durch das Einfugen von Zwischenstationen welches den Aufwand der Implementierung erhoht kann die mittlere Zugriffszeit und damit verbunden die Komplexitat gesenkt werden Eine Erweiterung des SkipList Prinzip ist die Verknupfung mit dem Prinzip der doppelt verknupften Liste wodurch Rucksprunge ermoglicht werden Bei einer ausgeglichenen SkipList senkt dies allerdings nicht die Komplexitat wohingegen bei einer unausgeglichenen SkipList auf Zwischenstationen verzichtet werden kann welches dann wiederum den Zugriff auf Elemente in der Nahe der nachsten Zwischenstation erhoht Die Operationen Einfugen Suchen und Loschen haben jeweils eine erwartete Laufzeit von O log n displaystyle mathcal O log n nbsp Berechnung der ContainerhoheBei der randomisierten Skipliste erfolgt die Berechnung der Hohe h textstyle h nbsp nach dem Zufallsprinzip Die Wahrscheinlichkeit dass eine bestimmte Hohe erreicht wird kann folgendermassen ermittelt werden 1 2 2 h textstyle frac 1 2 cdot 2 h nbsp Bei nicht randomisierten Skiplisten wird die Hohe so bestimmt dass jeder Zeiger mit Zeigerhohe z textstyle z nbsp auf einen Container 2 z textstyle 2 z nbsp Positionen weiter hinten in der Liste zeigen kann also alle Container dazwischen eine geringere Hohe haben als der Zeiger Adaptive Listen Bearbeiten Da der Aufwand des Zugriffes auf ein Element einer einfach verknupften Liste mit der Entfernung vom Start pro Einzelschritt zunimmt kam man auf das Prinzip der adaptiven Listen Im Versuch diesen Aufwand im Mittel moglichst niedrig zu halten werden die Listenelemente nach ihrer Zugriffshaufigkeit sortiert Dabei gibt es drei grundsatzliche Strategien MoveToFront Bei jedem Zugriff auf ein Element wird dieses entfernt und am Anfang der Liste eingefugt Transpose Bei jedem Zugriff auf ein Element wird es mit seinem Vorganger vertauscht Sonderfall erstes Element Gratification Zu jedem Element wird dessen Zugriffshaufigkeit gespeichert In einem bestimmten Intervall wird anhand der Zugriffshaufigkeit die Liste neu sortiert Abstrakter Datentyp Bearbeiten Die Daten werden in einer Sequenz von Schlusseln in einer Liste gespeichert in der eine Struktur besteht die aus Zahler Zeiger und der Adresse zu einer Vergleichsfunktion besteht Der Datenknoten enthalt den Zeiger auf eine Datenstruktur und einen selbstreferenzierenden Zeiger der auf den nachsten Knoten in der Liste zeigt In C kann eine Liste wie folgt als abstrakter Datentyp definiert werden 2 struct Node void dataPointer Node link struct List int count Node head virtual int compare List amp other 0 Listen in der objektorientierten Programmierung Bearbeiten In der objektorientierten Programmierung zeichnen sich Listen gemass dem Prinzip der Datenkapselung durch eine Menge von Listenoperationen aus Intern konnen dabei unterschiedliche und durchaus auch kompliziertere Datenstrukturen wie binare Baume zum Einsatz kommen Aufgrund der internen Datenstruktur konnen dabei oft auch weitere Funktionen wie beispielsweise Sortierung sortiertes Einfugen Entfernen des grossten Elementes etc angeboten werden Je nach Einsatzzweck kann es sinnvoll sein zwischen konkreten Implementierungen der Schnittstelle Liste zu wahlen Wird beispielsweise hauptsachlich wahlfrei uber Index auf die Liste zugegriffen ware eine verkettete Liste eine schlechte Wahl da dort n Operationen notig sind um das n te Element zu adressieren Daher werden in objektorientierten Bibliotheken oft neben der Schnittstelle verschiedene konkrete Implementierungen angeboten Beispielsweise gibt es in der Programmiersprache Java als Schnittstelle java util List 3 und es werden unter anderem java util LinkedList 4 und java util ArrayList 5 als konkrete Implementierungen angeboten In C werden Listen und Vektoren in der Standardbibliothek implementiert Beispiele BearbeitenNachfolgende Beispiele sind in C verfasst Dafur wird ein Knoten definiert welcher eine Zahl und einen Nachfolgeknoten speichern kann class Knoten public int element 0 public Knoten folgeknoten null Neues Element in Liste einfugen Bearbeiten static void elementEinfuegen Knoten knoten int neuesElement while knoten folgeknoten null knoten knoten folgeknoten knoten folgeknoten new Knoten knoten folgeknoten element neuesElement Element suchen Bearbeiten static bool elementSuchen Knoten knoten int altesElement while knoten null if altesElement knoten element return true knoten knoten folgeknoten return false Element aus Liste loschen Bearbeiten static void elementLoeschen ref Knoten knoten int altesElement while knoten null amp amp altesElement knoten element knoten knoten folgeknoten Knoten aktuell knoten while aktuell null if aktuell folgeknoten null amp amp altesElement aktuell folgeknoten element aktuell folgeknoten aktuell folgeknoten folgeknoten else aktuell aktuell folgeknoten Verwendung von Liste in objektorientierter Sprache Bearbeiten Dieses Beispiel zeigt die Verwendungen einer Liste in C include lt algorithm gt include lt iostream gt include lt list gt using namespace std int main Initialisierung auto liste list lt int gt am Anfang einfugen liste push front 4 liste push front 3 am Ende anfugen liste push back 5 liste push back 6 die Liste enthalt 3 4 5 6 Durchlaufen der Liste for int element liste cout lt lt element lt lt Entfernen aller Zahlen grosser als 4 liste erase remove if liste begin liste end int x return x gt 4 liste end cout lt lt endl for int element liste cout lt lt element lt lt Sortieren liste sort Loschen liste clear Siehe auch BearbeitenFeld Datentyp List Ranking Stapelspeicher Warteschlange Datenstruktur Weblinks BearbeitenEinfuhrung in verkettete Listen englisch Tutorial zu verketteten Listen in C englisch Einzelnachweise und Anmerkungen Bearbeiten a b Der Einsatz eines Wachterzeigers oder Sentinels anstelle des Null Zeigers kann einen Vergleich in der Suchschleife sparen GeeksforGeeks Abstract Data Types java util List Java API Specification java util LinkedList Java API Specification java util ArrayList Java API SpecificationNormdaten Sachbegriff GND 4783888 7 lobid OGND AKS Abgerufen von https de wikipedia org w index php title Liste Datenstruktur amp oldid 237179258 Doppelt verkettete Liste