Datenstruktur: Unterschied zwischen den Versionen
Sn (Diskussion | Beiträge) (→Stack) |
Sn (Diskussion | Beiträge) (→Queue: Bilder und Dictionary) |
||
Zeile 13: | Zeile 13: | ||
== Verkettete Liste == | == Verkettete Liste == | ||
[[Datei:Linked list.JPG|mini|Eine verkettete Liste]] | |||
Siehe auch [[Verkettete Liste]] | Siehe auch [[Verkettete Liste]] | ||
Zeile 29: | Zeile 30: | ||
== Menge == | == Menge == | ||
[[Datei:Example of a set.svg|mini|Eine Menge von geometrischen Formen]] | |||
Siehe auch [[Menge]] | Siehe auch [[Menge]] | ||
Zeile 36: | Zeile 38: | ||
== Stack == | == Stack == | ||
[[Datei:Data stack.svg|mini|Ein Stack]] | |||
Siehe auch [[Stack]] | Siehe auch [[Stack]] | ||
Auch bekannt als ''Stapel'' oder ''Kellerspeicher''. Ein Kellerspeicher funktioniert wie ein vollgerümpelter Keller: man kann nur auf das zuoberst liegende Objekt zugreifen und weitere Objekte werden oben auf dem Stack abgelegt. Dieses Prinzip heißt ''Last-in-first-out'' (LIFO). | Auch bekannt als ''Stapel'' oder ''Kellerspeicher''. Ein Kellerspeicher funktioniert wie ein vollgerümpelter Keller: man kann nur auf das zuoberst liegende Objekt zugreifen (<code>pop</code>) und weitere Objekte werden oben auf dem Stack abgelegt (<code>push</code>). Dieses Prinzip heißt ''Last-in-first-out'' (LIFO). | ||
Stacks bilden die Grundlage des Arbeitsspeichers bei der [[Assemblersprache|Assembler]]-Programmierung und sind außerdem die einzige Datenstruktur in der Programmiersprache [[Shakespeare Programming Language|Shakespeare]]. | Stacks bilden die Grundlage des Arbeitsspeichers bei der [[Assemblersprache|Assembler]]-Programmierung und sind außerdem die einzige Datenstruktur in der Programmiersprache [[Shakespeare Programming Language|Shakespeare]]. | ||
== Queue == | == Queue == | ||
[[Datei:Data Queue.svg|mini|Eine Warteschlange]] | |||
Siehe auch [[Warteschlange]] | Siehe auch [[Warteschlange]] | ||
In Warteschlangen gilt, egal ob in der Programmierung oder an der Kasse: Wer zuerst kommt, ist auch zuerst dran. Dieses Prinzip heißt ''First-in-first-out'' (FIFO). Warteschlangen können zum Beispiel bei der [[Breitensuche]] verwendet werden, um die Reihenfolge zu speichern, in der die Knoten eines Graphen betrachtet werden sollen. | In Warteschlangen gilt, egal ob in der Programmierung oder an der Kasse: Wer zuerst kommt, ist auch zuerst dran. Dieses Prinzip heißt ''First-in-first-out'' (FIFO). Warteschlangen können zum Beispiel bei der [[Breitensuche]] verwendet werden, um die Reihenfolge zu speichern, in der die Knoten eines Graphen betrachtet werden sollen. | ||
Eine besondere Form der Warteschlange ist die Prioritätswarteschlange (''Priority Queue''), in der jedem Element eine Priorität zugewiesen wird und die Elemente nach Priorität sortiert der Liste entnommen werden. | |||
== Schlüssel-Wert-Paare == | == Schlüssel-Wert-Paare == | ||
[[Datei:G.Schambach Wörterbuch nd.Mundart4.JPG|mini|Ein Wörterbuch ist eine analoge Schlüssel-Wert-Datenstruktur]] | |||
Siehe auch [[Schlüssel-Wert-Datenstruktur]] | Siehe auch [[Schlüssel-Wert-Datenstruktur]] | ||
Auch bekannt als ''Assoziatives Array, | Auch bekannt als ''Assoziatives Array, Wörterbuch, Dictionary, Map (in Java) oder Hash (in [[Perl]])'' | ||
In einer Schlüssel-Wert-Datenstruktur werden Paare von Daten gespeichert, wobei eines der Daten als Suchschlüssel dient. Mit diesem Schlüssel können die Daten sehr effizient gefunden werden. Das Prinzip ist dasselbe wie bei einem Wörterbuch: wenn ich in einem lateinisch-deutschen Wörterbuch die deutsche Bedeutung von ''<span lang="la" dir="ltr">pathicus</span>'' herausfinden möchte, geht das sehr schnell. Andersherum ist es sehr aufwändig, die lateinische Bedeutung von einem deutschen Wort herauszufinden. | |||
== Baum == | == Baum == |
Version vom 30. April 2024, 05:53 Uhr
Sobald Daten eine komplexere Form annehmen als eine einzelne Variable verarbeiten kann, müssen sie in speziellen Datenstrukturen organisiert werden.
Diese Datenstrukturen unterscheiden sich im Hinblick auf die Zugriffsmöglichkeiten, die sie auf die Daten bieten, sowie auf die Zeit, die dafür nötig ist.
In diesem Artikel oder Abschnitt fehlen noch folgende wichtige Informationen:
Hilf dem KGS-Wiki, indem du sie recherchierst und einfügst.
Array
Siehe auch Array
Ein Array, in der deutschsprachigen Literatur auch Feld genannt, ist eine der einfachsten Datenstrukturen. Ursprünglich ist ein Array eine Reihe von hintereinander liegenden Speicherzellen. Bei der Erstellung des Arrays wird ein Block an Speicherzellen mit einer festen Größe reserviert. Deswegen muss man z.B. in C oder Java immer noch bei der Initialisierung eines Arrays dessen Größe angeben und kann diese nachträglich nicht mehr verändern.
Auf die Werte eines Arrays wird mit einem Index zugegriffen, der typischerweise bei 0 beginnt.
Verkettete Liste
Siehe auch Verkettete Liste
Eine verkettete Liste (engl. linked list) ist eine Datenstruktur, die beliebig viele Elemente in linearer Form speichern kann, d.h. zu jedem Element außer dem letzten existiert genau ein Nachfolger und zu jedem Element außer dem ersten existiert genau ein Vorgänger.
Praktisch an verketteten Listen ist, dass man mit relativ geringem Aufwand mittendrin Elemente löschen oder einfügen kann, ohne dass Lücken entstehen oder potenziell größere Datenmengen verschoben werden müssen. Auch für die Implementierung von Stacks oder Queues sind sie geeeignet.
Nachteilig ist, dass Operationen wie Suchen eine Laufzeit in aufweisen.
Tupel
Siehe auch Tupel
Als Tupel werden verschiedene Datenstrukturen bezeichnet. In Python werden als Tupel unveränderter Listen von fester Länge bezeichnet. Diese Tupel können gut genutzt werden, um eine Funktion mehrere Daten auf einmal zurückgeben zu lassen, da die Elemente eines Tupels direkt als Variablen gespeichert werden können.
Tupel im mathematischen Sinne sind die Einträge in relationalen Datenbanken wie SQL
Menge
Siehe auch Menge
Der Mathematiker Georg Cantor definierte 1895 eine Menge wie folgt:
„Unter einer ‚Menge‘ verstehen wir jede Zusammenfassung von bestimmten wohlunterschiedenen Objekten m unserer Anschauung oder unseres Denkens (welche die ‚Elemente‘ von M genannt werden) zu einem Ganzen.“[1]
Wohlunterschieden meint hier, dass jedes Element einer Menge einzigartig ist, d.h. eine Menge kann nicht zweimal dasselbe Element enthalten.
In Python werden Mengen mit geschweiften Klammern notiert, in Java müssen dafür Klassen wie HashSet
oder TreeSet
benutzt werden.
Stack
Siehe auch Stack
Auch bekannt als Stapel oder Kellerspeicher. Ein Kellerspeicher funktioniert wie ein vollgerümpelter Keller: man kann nur auf das zuoberst liegende Objekt zugreifen (pop
) und weitere Objekte werden oben auf dem Stack abgelegt (push
). Dieses Prinzip heißt Last-in-first-out (LIFO).
Stacks bilden die Grundlage des Arbeitsspeichers bei der Assembler-Programmierung und sind außerdem die einzige Datenstruktur in der Programmiersprache Shakespeare.
Queue
Siehe auch Warteschlange
In Warteschlangen gilt, egal ob in der Programmierung oder an der Kasse: Wer zuerst kommt, ist auch zuerst dran. Dieses Prinzip heißt First-in-first-out (FIFO). Warteschlangen können zum Beispiel bei der Breitensuche verwendet werden, um die Reihenfolge zu speichern, in der die Knoten eines Graphen betrachtet werden sollen.
Eine besondere Form der Warteschlange ist die Prioritätswarteschlange (Priority Queue), in der jedem Element eine Priorität zugewiesen wird und die Elemente nach Priorität sortiert der Liste entnommen werden.
Schlüssel-Wert-Paare
Siehe auch Schlüssel-Wert-Datenstruktur
Auch bekannt als Assoziatives Array, Wörterbuch, Dictionary, Map (in Java) oder Hash (in Perl)
In einer Schlüssel-Wert-Datenstruktur werden Paare von Daten gespeichert, wobei eines der Daten als Suchschlüssel dient. Mit diesem Schlüssel können die Daten sehr effizient gefunden werden. Das Prinzip ist dasselbe wie bei einem Wörterbuch: wenn ich in einem lateinisch-deutschen Wörterbuch die deutsche Bedeutung von pathicus herausfinden möchte, geht das sehr schnell. Andersherum ist es sehr aufwändig, die lateinische Bedeutung von einem deutschen Wort herauszufinden.
Baum
Siehe auch Baum
Heap
Siehe auch Heap
Graph
Siehe auch Graph
- ↑ Georg Cantor: Beiträge zur Begründung der transfiniten Mengenlehre. In: Mathematische Annalen. Band 46, S. 481.