Datenstrukturen I Flashcards
Datenstruktur
- Art, Daten im Computer zu speichern/verwalten
- statisch, dynamisch, abstrakt
- Beispiele:
- Arrays
- Listen
- Kellerspeicher
- Warteschlange
- Bäume etc.
Arrays - Eigenschaften
- statische Datenstruktur
- Zusammenhängender Speicherbereich (SB)
- Größe SB zur Laufzeit nicht veränderbar
- Direktzugriff über Speicheradresse
⇒ Problem, dass # der zu speichernden Objekte selten bekannt (→ dynamische DS)
Dynamische Datenstrukturen
- werden mithilfe von statischen DS implementiert
- Knoten/nodes: zusätzliche Verwaltungsstruktur
- Referenz/pointers: Knoten aneinander gehängt
⇒ Nachteil: kein direkter Zugriff (Auswirkung Laufzeit)
-
Soll (1-3 minimal, 4 + Konkatenation [Zusammenfügen von Listen] zusätzlich):
- schreiben
- löschen
- lesen
- suchen (Traversierung der DS → Ablaufen mittels Iterator = Hilfsobjekt zum seq. Ablaufen)
Dynamische Datenstrukturen - Grundoperationen
- add (Object o)
- remove (Object o)
- boolean contains (Object o)
Statisch vs. Dynamische Datentypen
Abstrakter Datentyp (ADT)
- besteht aus
- Menge M von Objekten
- Menge O von Operationen auf M
- Beschreibung der Semantik (“Bedeutung”) der Operationen
⇒ ADTen eignen sich gut, um DS zu beschreiben
Auswahl der Datenstruktur
- stark von Anwendungsfall abhägig
- erwartete Datenmenge
- Häufigkeit/Wahrscheinlichkeit/Reihenfolge von Operationen
- Semantik der Daten
- Adressierung der Daten beim Lesen und Schreiben
⇒ geringere Komplexitätsklasse ≠ bessere Laufzeit, da u.U. zusätzlicher Mehraufwand für Verwaltungsstrukturen
Aufbau
- Verwaltungselement: Organisation der Datenstruktur
- Datenelement: enthält zu speichernden Wert
Wohlgeformte Klammerausdrücke - WKA
- (), {} und [] sind WKAs
- w1, w2 = WKA → w1w2 = WKA
- w1 = WKA → (w1), {w1} und [w1] = WKAs
Aufbau Liste
aus zwei Sorten Verwaltungselementen:
- Knoten als Verwaltungselemente kennen jeweils ihren Nachfolger und ein Datenelement
- Ein Listen-Element kennt den ersten Knoten
Methoden Liste
- get(int index) liefert Knoten zu index, Zugriff auf Inhalt dann mit getData
- add(int index, Objekt o) fügt an angegebener Stelle das Objekt o ein
- remove(Node n) löscht den Knoten
- remove(objekt o) löscht Knoten mit Inhalt o
Verkettete Liste
- Nachteil bei Datensortierung (Traversierung)
- Vorteil bei Verwaltung nach Reihenfolge (LIFO - Keller / FIFO - Schlange)
einfach/doppelt verkettete Liste
- doppelt: nodes haben Zeiger auf Vorgänger = prev.
⇒ Zeigeroperationen werden einfacher, da Reihenfolge auch rückwärts
- Vorteil einfach: weniger Speicherplatz
- Nachteil einfach: Laufzeitnachteile, da Finden Vorgänger muss Liste von vorne duchsucht werden
Keller
≈ Tellerstapel
- LIFO-Prinzip
- kann WKAs erkennen
- Operationen
- push(Object o): Anfügen an Ende
- pop( ): Ansehen & Entfernen am gleichen Ende
- peek( ): Ansehen ohne Entfernen
- Implementierung:
- verkettete Liste
- Array
Schlange
≈ Supermarkt
- FIFO
- Operationen:
- dequenue( ): Erstes Element wird entfernt
- enquenue( ): Neues Element wird hinten angefügt
- front( ): Liefert Anfangselement ohne Entfernen
- Implementierung:
- verkettete Liste (Zeiger auf letztes Element)
- zirkulärem Array