Skip to content

Datenstrukturen

Vorwort

Programm = Datenstruktur + Algorithmus. Wir haben gelernt, wie der CPU Befehle ausführt und wie das Betriebssystem Ressourcen verwaltet. Aber das zentrale Objekt, das Programme verarbeiten, sind Daten — Benutzerinformationen, Produktlisten, soziale Beziehungen... Wie diese Daten im Speicher organisiert sind, bestimmt direkt die Geschwindigkeit des Programms. Haben Sie sich schon gefragt, warum manche Programme Zehntausende von Datensätzen schnell verarbeiten, während andere schon bei Hunderten einfrieren? Die Antwort liegt meist in der Wahl der Datenstruktur.

Was werden Sie in diesem Artikel lernen?

Nach Abschluss dieses Kapitels werden Sie Folgendes gewonnen haben:

  • Intuitive Urteilskraft: Bei einem Requirement sofort wissen, welche Datenstruktur sich eignet
  • Performance-Analyse-Perspektive: Erkennen, ob ein Flaschenhals an der falschen Datenstruktur oder an einem ineffizienten Algorithmus liegt
  • Abwägungsdenken: Verstehen, dass man „Platz gegen Zeit" oder „Zeit gegen Platz" tauscht — es gibt keine perfekte Datenstruktur
  • Code-Lesekompetenz: Begriffe wie HashMap, Stack, Queue nicht mehr als fremd empfinden
  • Grundlage für Weiteres: Basis für Datenbankindizes, Caching-Systeme und Suchmaschinen
KapitelInhaltKernkonzepte
Kapitel 1ÜberblickVier Hauptkategorien, Klassifikationskriterien
Kapitel 2Lineare StrukturenArrays, verkettete Listen, Stapel, Warteschlangen
Kapitel 3HashtabellenHashfunktion, Kollisionsbehandlung, O(1)-Suche
Kapitel 4BaumstrukturenBinärbaum, Dateisystembaum, DOM-Baum
Kapitel 5GraphstrukturenGerichteter Graph, ungerichteter Graph, Traversierung
Kapitel 6Performance-VergleichZeitkomplexität, Platzkomplexität
Kapitel 7AuswahlleitfadenSzenarioanalyse, Entscheidungsprozess

1. Überblick: Was sind Datenstrukturen?

Stellen Sie sich vor, Sie müssen einen Stapel Bücher ordnen:

  • Auf dem Boden gestapelt: Jedes Buch einzeln durchsuchen — das ist die ursprünglichste Speicherung
  • Nummeriert ins Regal: Direkt zum entsprechenden Platz greifen — das ist ein Array
  • Nach Kategorie in Schränke: Erst den Schrank bestimmen, dann darin suchen — das ist eine Hashtabelle
  • Nach Titel sortiert auf Etagenregalen: Jedes Mal die Hälfte ausschließen — das ist ein Baum

Die Art der Ordnung macht einen enormen Unterschied bei der Effizienz. Eine Datenstruktur ist die „Ordnungsmethode" für Daten — sie bestimmt, wie Daten gespeichert, gefunden und geändert werden.

Data Structure OverviewChoose a data organization model for each scenario
Data structures are like ways to organize a room: clothes in a wardrobe, books on shelves, and small items in drawers.
📚
Linear structures
Data arranged in order, like a row of books
ArrayLinked listStackQueue
🗂️
Hash structures
Fast lookup through a key
Hash tableDictionarySet
🌳
Tree structures
Hierarchy, like a family tree
Binary treeB-treeHeap
🕸️
Graph structures
Complex relationship networks
Directed graphUndirected graphNetwork graph
📚Linear structures
Features
One-to-one relationship between elements
A clear before-and-after order
Can use contiguous storage or linked storage
Use Cases
📝
Arrays: list data
Store ordered data such as student scores or product prices
🔄
Stacks: undo operations
Text editor undo history, last in first out
🎫
Queues: task scheduling
Print queues and task queues, first in first out
Operation Complexity
OperationAverage time
Access elementO(1)
Insert/deleteO(n)
Everyday Analogy
Like train cars connected in order
To find car 5, count directly to it; to insert a new car, you need to break and reconnect links.

Alle Datenstrukturen lassen sich in vier Hauptkategorien einteilen:

TypDatenbeziehungTypische VertreterAlltagsanalogie
Lineare StrukturEins-zu-eins, in einer ReiheArray, verkettete Liste, Stack, QueueEisenbahnwaggons, Warteschlange
Hash-StrukturSchlüssel→Wert-ZuordnungHashtabelle, Dictionary, SetBibliothekskatalogkarten
BaumstrukturEins-zu-viele, hierarchischBinärbaum, B-Baum, HeapStammbaum, Ordnerstruktur
GraphstrukturViele-zu-viele, netzwerkartigGerichteter Graph, ungerichteter GraphU-Bahn-Plan, Soziales Netzwerk

Warum so viele Arten lernen?

Weil es keine universelle Datenstruktur gibt. Jede Struktur ist ein Kompromiss zwischen „Suchgeschwindigkeit", „Einfügegeschwindigkeit" und „Speicherverbrauch". Wie Sie keinen Rucksack für Möbelumzüge und keinen Lastwagen für einen Brief verwenden — das richtige Werkzeug halbiert den Aufwand.


2. Lineare Strukturen: Die grundlegendste Organisationsform

Lineare Strukturen sind die intuitivste Art der Datenorganisation — Daten werden nacheinander angeordnet wie Eisenbahnwaggons. Aber die unterschiedliche Art der „Verknüpfung" und der „Zugriffsseite" erzeugt vier Varianten mit je eigenen Stärken.

Four Forms of Linear StructuresHow arrays, linked lists, stacks, and queues differ
ArrayContiguous memory, indexed access
0
10
1
25
2
33
3
47
4
59
5
62
✓ Contiguous memory | ✓ Fast access (O(1)) | ✗ Slow insert/delete (O(n))
Operation Comparison
Data structureAccessInsertDeleteFeature
📊 ArrayO(1) fastO(n) slowO(n) slowFixed size
🔗 Linked listO(n) slowO(1) fastO(1) fastVariable size
🥞 StackO(n)O(1) fastO(1) fastOne-end operations
🚶 QueueO(n)O(1) fastO(1) fastTwo-end operations
Real-World Uses
📋
List data
Student scores or product price lists
🖼️
Image processing
Pixel matrix storage
📈
Charts
Data ordered by time

2.1 Array vs. Verkettete Liste: Zwei grundlegend verschiedene Speicherarten

Arrays und verkettete Listen sind die beiden grundlegendsten linearen Strukturen. Ihr Kernunterschied liegt im Speicherlayout:

VergleichsdimensionArrayVerkettete Liste
SpeicherlayoutEin zusammenhängender BlockÜberall verstreut, mit Zeigern verkettet
Auf das n-te Element zugreifenAdresse direkt berechnen, O(1)Vom Anfang einzeln suchen, O(n)
In der Mitte einfügenAlle folgenden verschieben, O(n)Nur zwei Zeiger ändern, O(1)
GrößeBei Erstellung festgelegtJederzeit erweiterbar
AlltagsanalogieNummerierte SchließfachreiheSchnitzeljagd-Hinweiskette

Wann Array, wann verkettete Liste?

  • Datenmenge bekannt, häufiger Zugriff nach Position → Array (z. B. Schülernotenliste, Pixelmatrix)
  • Datenmenge unbekannt, häufiges Einfügen/Löschen → Verkettete Liste (z. B. Playlist, Rückgängig-Verlauf)
  • Unsicher? → Zuerst Array verwenden. In den meisten Szenarien überwiegt der Cache-freundliche Performance-Vorteil

2.2 Stack und Queue: Lineare Strukturen mit „Regeln"

Stacks und Queues sind im Grunde Arrays oder verkettete Listen mit eingeschränkten Operationen. Es sieht aus, als würden Funktionen wegfallen, aber genau diese Einschränkung gibt ihnen klare Einsatzgebiete:

StrukturRegelOperationenAnalogieWo in Ihrem Code?
StackLIFO (Last In, First Out)push / popTellerstapelFunktionsaufruf-Stack, Browser-Zurück, Strg+Z Rückgängig
QueueFIFO (First In, First Out)enqueue / dequeueTicketschlangeAufgabenplanung, Nachrichtenwarteschlange, Druckwarteschlange

Warum ist „Einschränkung" gut?

Stellen Sie sich einen Stack vor, der nur „Teller drauflegen" und „Teller wegnehmen" erlaubt — Sie greifen nie in der falschen Reihenfolge. Einschränkung bringt Bestimmtheit, Bestimmtheit bringt Zuverlässigkeit. Der Funktionsaufruf-Stack garantiert durch LIFO, dass die zuletzt aufgerufene Funktion als Erstes zurückkehrt. Wenn man beliebig auf Funktionen in der Mitte zugreifen könnte, würde das Programm im Chaos enden.


3. Hashtabelle: Die schnellste Suche

Die Suche in linearen Strukturen ist nicht schnell genug — Array erfordert Traversierung O(n), selbst sortiert mit binärer Suche O(log n). Gibt es eine Struktur, die O(1) direkt findet? Ja, die Hashtabelle.

Hash Tables: Super-Fast LookupFind data directly through a key
📚
A hash table is like a library index card: instead of searching shelf by shelf, you use the index to find the book location directly.
Store data
Hashing process
Input key
apple
Hash function
hash(key) % 10
Array index
0
Hash table
0
apple: apple
1
Empty
2
Empty
3
Empty
4
Empty
5
Empty
6
orange: orange
7
Empty
8
Empty
9
banana: banana
Performance Comparison
Hash table lookup
O(1)
Found instantly
Array lookup
O(n)
Requires traversal
Binary search
O(log n)
Requires sorted data
Common Uses
👤
User table (user ID → profile)
🛒
Shopping cart (product ID → quantity)
📝
Cache system (URL → page content)
🔍
Dictionary (word → definition)

3.1 Kernidee der Hashtabelle

Das Prinzip ist eigentlich sehr einfach:

  1. Sie geben einen Schlüssel (z. B. „apple")
  2. Die Hashfunktion berechnet daraus eine Zahl (z. B. hash("apple") = 3)
  3. Direkt an Position 3 des Arrays nachschauen — keine Traversierung, ein Schritt

Wie das Indexsystem einer Bibliothek: Man muss nicht Regal für Regal durchsuchen, man schlägt im Katalog nach und findet direkt den Standort.

3.2 Hash-Kollision: Was tun, wenn zwei Schlüssel kollidieren?

Zwei verschiedene Schlüssel können denselben Index berechnen — das nennt man Hash-Kollision. Wie zwei Bücher mit derselben Katalognummer, die auf denselben Platz zeigen.

LösungPrinzipAnalogie
VerkettungMehrere Werte am selben Ort in einer Liste speichernMehrere Bücher im selben Schließfach
Offene AdressierungBei Kollision den nächsten freien Platz suchenSchließfach voll → ins Nachbarfach legen

3.3 Performance der Hashtabelle

OperationDurchschnittWorst Case (alles kollidiert)
SuchenO(1)O(n)
EinfügenO(1)O(n)
LöschenO(1)O(n)

Wann tritt Degradation auf?

Wenn alle Schlüssel auf denselben Index abgebildet werden, degeneriert die Hashtabelle zu einer verketteten Liste — alle Operationen werden O(n). Abhilfe: Gute Hashfunktion wählen + dynamisches Resizing (bei Überschreitung des Lastfaktors erweitern).

Hashtabellen sind überall in Ihrem Code

  • JavaScript {}-Objekte und Map → Hashtabelle
  • Python dict → Hashtabelle
  • Java HashMap → Hashtabelle
  • Datenbankindizes → nutzen intern auch Hash

Jedes Mal, wenn Sie user["name"] oder map.get("key") schreiben, arbeitet im Hintergrund eine Hashtabelle.


4. Baumstrukturen: Hierarchische Beziehungen ausdrücken

Hashtabellen suchen schnell, aber die Daten sind unsortiert. Wenn Sie sowohl schnell suchen als auch Daten sortiert halten müssen, sind Baumstrukturen die Wahl.

Kernmerkmal des Baums: Jeder Knoten kann mehrere „Kinder" haben, aber nur einen „Elternteil" (außer der Wurzel). Diese eins-zu-viele-Hierarchiebeziehung ist in der Realität allgegenwärtig.

Tree Structures: Representing HierarchiesAn organization model like a family tree
Choose a tree type:
50307020406080
Tree Structure Features
🌲
Hierarchy
Nodes have one-to-many parent-child relationships
🎯
Single root node
Except for the root, each node has exactly one parent
🔍
Efficient lookup
Binary search tree lookup is O(log n)
🔄
Multiple traversals
Preorder, inorder, postorder, and level-order traversal
Use Cases
📁
File systems
Hierarchical organization of folders and files
🌐
HTML DOM
Nested structure of web page elements
🏢
Organization charts
Company management hierarchy
🌲
Decision trees
Classification algorithms in machine learning

4.1 Binärer Suchbaum: Ein sortierter Baum

Der binäre Suchbaum hat eine einfache, aber mächtige Regel: Links klein, rechts groß.

  • Alle Werte im linken Teilbaum < Wurzelknoten
  • Alle Werte im rechten Teilbaum > Wurzelknoten

Bei der Suche wird bei jedem Vergleich die Hälfte der Knoten ausgeschlossen — Zeitkomplexität O(log n). Wie beim Zahlenraten: „Größer oder kleiner als 50?" → „Größer." „Größer oder kleiner als 75?" → Jedes Mal die Hälfte ausschließen.

4.2 Ausbalancierte Bäume: Degeneration verhindern

Der binäre Suchbaum hat ein Problem: Wenn Daten sortiert eingefügt werden (1, 2, 3, 4, 5), degeneriert der Baum zu einer linearen Kette — die Suche wird wieder O(n). Ausbalancierte Bäume vermeiden dieses Problem durch automatische Strukturanpassung:

TypBalancierungsstrategieMerkmaleTypische Anwendung
AVL-BaumStrikte Balance (Höhendifferenz ≤ 1)Schnellste Suche, Einfügen/Löschen etwas langsamerHäufige Suchszenarien
Rot-Schwarz-BaumAnnähernde BalanceGute GesamtleistungJava TreeMap, Linux-Kernel
B-BaumMehrwege-Balance, mehrere Werte pro KnotenReduziert Festplatten-I/ODatenbankindizes

Wo sind Bäume in Ihrem Code?

  • Dateisystem: Verschachtelte Ordner sind Baumstrukturen
  • HTML-DOM: <html><body><div><p> ist ein Baum
  • Datenbankindizes: B+-Bäume benötigen nur 3-4 Festplattenlesezugriffe für die Suche in Millionen von Datensätzen
  • JSON/XML: Verschachtelte Datenformate sind im Kern Bäume

5. Graphstrukturen: Netzwerke komplexer Beziehungen

Bäume können nur „eins-zu-viele"-Hierarchiebeziehungen darstellen. Aber in der Realität sind viele Beziehungen „viele-zu-viele" — Ihre Freunde haben auch Freunde, zwischen Städten gibt es mehrere Wege. Eine Struktur, in der beliebige Knoten miteinander verbunden sein können, ist ein Graph.

Graph Structures: Representing Complex RelationshipsA network of nodes and edges
ABCDE
Graph properties
Vertices (V)
5
Edges (E)
6
Degree
2.4
Use Cases
🗺️Map navigation (shortest path)
👥Social networks (friend relationships)
🌐Web links (PageRank)
🔗Dependencies (package management)

5.1 Drei Formen von Graphen

TypMerkmaleAnalogieTypische Anwendung
Ungerichteter GraphKanten ohne Richtung, A→B gleich B→AWeChat-Freunde (gegenseitig)Soziale Netzwerke, Kommunikationsnetze
Gerichteter GraphKanten mit Richtung, A→B ≠ B→AWeibo-Follow (einseitig)Webseiten-Links, Abhängigkeiten
Gewichteter GraphKanten mit Gewicht (Entfernung, Kosten etc.)Straßen zwischen Städten (mit Kilometern)Karten-Navigation, Kürzeste Wege

5.2 Graphtraversierung

Die Traversierung von Graphen ist komplexer als bei linearen Strukturen, da Zyklen möglich sind (A→B→C→A). Bereits „besuchte" Knoten müssen markiert werden:

TraversierungsartStrategieAnalogieAnwendung
BFS (Breitensuche)Zuerst alle Nachbarn besuchen, dann deren NachbarnWellenausbreitungKürzeste Wege, Ebenentraversierung
DFS (Tiefensuche)Einen Weg bis zum Ende gehen, bei Sackgasse umkehrenLabyrinthPfadsuche, Zusammenhangsprüfung

Graphen in der Praxis

  • Kartennavigation: Städte sind Knoten, Straßen sind Kanten, Navigation findet den kürzesten Pfad im Graph
  • Soziale Netzwerke: Nutzer sind Knoten, Follow/Freunde sind Kanten, „Personen, die Sie kennen könnten" werden durch Graph-Algorithmen empfohlen
  • Paketmanager: npm/pip-Abhängigkeiten sind gerichtete Graphen, npm install ist eine topologische Sortierung

6. Performance-Vergleich: Alle Datenstrukturen auf einen Blick

So viele Datenstrukturen gelernt — wie groß sind die Performance-Unterschiede? Die folgende interaktive Vergleichstabelle hilft beim Aufbau einer Intuition:

Data Structures: Containers for DataChoose different storage models for different scenarios
ArrayContiguous memory and fast indexed access
010
120
230
340
450
560
670
780
Access arr[2] = O(1), insert/delete = O(n)
Time Complexity Comparison
OperationArrayLinked listHash tableTree
AccessO(1)O(n)O(1)O(log n)
SearchO(n)O(n)O(1)O(log n)
InsertO(n)O(1)O(1)O(log n)
DeleteO(n)O(1)O(1)O(log n)
Core idea:Data structures are containers for data. Different containers have different tradeoffs. Choosing the right data structure can improve program efficiency by orders of magnitude.

Kern-Performance-Vergleichstabelle:

DatenstrukturZugriffSucheEinfügenLöschenPlatz
ArrayO(1)O(n)O(n)O(n)O(n)
Verkettete ListeO(n)O(n)O(1)O(1)O(n)
Stack/QueueO(n)O(n)O(1)O(1)O(n)
HashtabelleO(1)O(1)O(1)O(n)
Binärer SuchbaumO(log n)O(log n)O(log n)O(n)
GraphO(V+E)O(1)O(E)O(V+E)

Wie liest man diese Tabelle?

  • O(1): Unabhängig von der Datenmenge konstante Operationszeit — am schnellsten
  • O(log n): Datenmenge verdoppelt sich, Zeit wächst nur um einen Schritt — sehr schnell
  • O(n): Datenmenge verdoppelt sich, Zeit verdoppelt sich — durchschnittlich
  • O(V+E): Abhängig von Knoten- und Kantenzahl — Graph-spezifische Darstellung

Hinweis: Dies sind alles Durchschnittswerte. Im schlimmsten Fall degeneriert die Hashtabelle zu O(n) und der binäre Suchbaum ebenfalls.


7. Auswahlleitfaden: Welche Datenstruktur verwenden?

Mit all diesen Datenstrukturen — wie wählen Sie bei echten Anforderungen? Der Schlüssel ist, vom Bedarf auszugehen und sich folgende Fragen zu stellen:

  1. Welche Operation ist am häufigsten? Suchen? Einfügen? Löschen? Traversieren?
  2. Welche Beziehung haben die Daten? Eins-zu-eins? Eins-zu-viele? Viele-zu-viele?
  3. Wie groß ist die Datenmenge? Bei wenigen Dutzend und bei Millionen kann die optimale Wahl völlig unterschiedlich sein
  4. Muss sortiert sein? Ob die Daten in einer bestimmten Reihenfolge traversiert werden müssen
How Do You Choose the Right Data Structure?Make the best choice based on scenario needs
What is your use case?
🔍
Fast lookup
Find matching data quickly by key
📊
Preserve order
Data must stay in insertion order or a specific order
🥞
Last in, first out
The most recent item is processed first
🚶
First in, first out
Earlier items are processed first
🌳
Hierarchy
Data has parent-child relationships
🕸️
Complex relationships
Data has many-to-many connections
Quick Reference
Scenario needRecommended structureTime complexity
Random accessArrayO(1)
Fast lookupHash tableO(1)
Ordered lookupBinary search treeO(log n)
Frequent insertion/deletionLinked listO(1)
Undo operationsStackO(1)
Task schedulingQueueO(1)
Decision Flow
Need fast element access?
Yes
Array / Hash table
No
Need frequent insertion and deletion?
Yes
Linked list
No
Need to preserve order?
Yes
Stack / Queue
No
Tree / Graph

Schnell-Entscheidungsfluss:

Ihr BedarfEmpfohlene StrukturBegründung
Schneller Zugriff nach PositionArrayO(1) wahlfreier Zugriff
Häufiges Einfügen/Löschen in der MitteVerkettete ListeO(1) Einfügen/Löschen, keine Elementverschiebung
LIFO (Rückgängig, Rekursion)StackLIFO-Semantik passt natürlich
FIFO (Aufgabenwarteschlange)QueueFIFO-Semantik passt natürlich
Schnelle Suche nach SchlüsselHashtabelleO(1) durchschnittliche Suche
Sortierte Daten + schnelle SucheBinärer SuchbaumO(log n) Suche und sortiert
Komplexe Viele-zu-Viele-BeziehungenGraphKann beliebige Verbindungen zwischen Knoten ausdrücken

Erfahrungsregeln in der Praxis

  • In 80 % der Fälle reichen Arrays und Hashtabellen
  • Wenn Sortierung nötig ist, Bäume in Betracht ziehen
  • Bei komplexen Beziehungen, Graphen in Betracht ziehen
  • Unsicher? Einfachste zuerst, bei Performance-Problemen wechseln. Vorzeitige Optimierung ist die Wurzel allen Übels

Zusammenfassung

Datenstrukturen sind das Skelett des Programms. Arrays sind wie eine nummerierte Schließfachreihe — am schnellsten nach Position; Verkettete Listen wie eine Schnitzeljagd-Hinweiskette — am flexibelsten beim Einfügen/Löschen; Hashtabellen wie ein Bibliothekskatalog — am schnellsten beim Suchen nach Namen; Bäume wie ein Stammbaum — drücken Hierarchien aus und bleiben sortiert; Graphen wie ein U-Bahn-Plan — stellen beliebige komplexe Netzwerkbeziehungen dar. Es gibt keine beste Datenstruktur, nur die passende — entscheidend ist, die Stärken und Kosten jeder Struktur zu verstehen und basierend auf den tatsächlichen Anforderungen abzuwägen.


Weiterführende Literatur

ThemaEmpfohlene Ressource
Datenstruktur-VisualisierungVisuAlgo — Animierte Demonstrationen verschiedener Datenstrukturen und Algorithmen
Algorithmen und Datenstrukturen„Grokking Algorithms" — Aditya Bhargava, anschaulich und einsteigerfreundlich
Tieferes Verständnis„Datenstrukturen und Algorithmen" — Mark Allen Weiss
ÜbungenLeetCode — Übung nach Datenstruktur-Kategorien

Nächste Schritte

Nun haben Sie die Kernkonzepte von Datenstrukturen gemeistert. Als Nächstes können Sie lernen:

  • Algorithmisches Denken: Lernen Sie, Probleme mit Sortierung, Suche, Rekursion und dynamischer Programmierung zu lösen
  • Programmiersprachen: Verstehen Sie, wie verschiedene Sprachen diese Datenstrukturen implementieren