Kurs:Algorithmen und Datenstrukturen/Vorlesung/Lineare Datenstrukturen



Lineare Datenstrukturen

Bearbeiten

In diesem Kapitel behandeln wir die linearen Datenstrukturen.

Definition

Bearbeiten

Eine lineare Datenstruktur L ist eine Sequenz  . Die lineare Datenstruktur ordnet Elemente (entweder primitive Datentypen oder komplexere Datenstrukturen) in einer linearen Anordnung an.

Beispiel

Bearbeiten

Zahlenfolgen

1 2 3 4 5 6

Strings

L I N E A R

Array und Listen

Bearbeiten

Es gibt zwei Möglichkeiten lineare Datenstrukturen zu realisieren. Entweder Arrays oder (verlinkte) Listen. Arrays belegen einen zusammenhängenden Bereich im Speicher. Elemente einer verlinkten Liste können beliebig verteilt sein. Ob zur Realisierung einer linearen Datenstruktur ein Array oder eine Liste verwendet wird, hängt von der Anwendung ab. Arrays werden meist für statische Datenstrukturen verwendet, d.h. wenn die Länge des Arrays nicht verändert wird. Listen werden meist für dynamische Datenstrukturen verwendet, d.h. wenn die Länge variabel ist. Zu den positiven Eigenschaften von Arrays zählen der schneller Zugriff auf Einzelelemente durch den Index. Zu den negativen Eigenschaften von Arrays zählen das sehr aufwändige Einfügen der Elemente. Zu den positiven Eigenschaften von Listen zählen die relativ effiziente Manipulation, zu den negativen Eigenschaften der ineffiziente Direktzugriff.

Matrizen

Bearbeiten

Enthalten die Elemente einer linearen Datenstrukturen weitere lineare Datenstrukturen, spricht man von einer Matrix. Durch weitere Verschachtelung können beliebige hochdimensionale Matrizen realisiert werden.

1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 17 18
19 20 21 22 23 24

Anwendungen

Bearbeiten

Matritzen benutzt man um Elementen zu Gruppieren oder Anzuordnen. Des weiteren dienen sie der Implementierung jeglicher Art von Tabellen. Matrizen können auch als Adjazenmatrizen genutzt werden, um Graphen darzustellen

Atomare Operationen auf lineare Datenstrukturen

Bearbeiten

Zu den Operationen gehören Lesen mit

  • get(i): Element an Position i lesen
  • first(): erstes Element lesen
  • last(): letztes Element lesen
  • next(e): Element nach Element e lesen

und Schreiben mit

  • set(i,e): Element an Position i auf e setzen
  • add(i,e): Element e an Position i einfügen
  • del(i): Element an Position i löschen

Typische Problemstellungen

Bearbeiten
  • Sortieren
5 4 6 1 3 2

 

1 2 3 4 5 6
  • Suchen
9 17 28 32 45 56

Wo befindet sich 34?

  • Textsuche
T G C G T A

Wo befindet sich "CG"?

  • Textvergleiche
L E H R E N
L E H R E N

Sind beide ähnlich?

Suchen und Sortieren

Bearbeiten

Suchen und Sortieren sind voneinander abhängige Operationen. Dabei gibt es zwei Ansätze: Wenn Elemente nie sortiert sind, dann ist die Suche sehr aufwändig. Wenn die Elemente sortiert sind, wird die Suche erleichtert, jedoch kann das Sortieren an sich sehr aufwändig sein. Wenn Elemente hinzugefügt oder gelöscht werden ist diese Problematik noch sichtbarer. Nur ein unsortiertes Element macht die Suche aufwändig, doch bei jeder Einfügung oder Löschung zu sortieren ist ebenfalls sehr aufwändig. Spezielle dynamische Datenstrukturen erlauben eine automatische und effiziente Sortierung bei Einfügung oder Löschung.

Lineare Datenstruktur in Java

Bearbeiten
  • Arrays:
int[] arr = new int[10];
arr[1] = 4;
  • Listen:
List<Integer> myList = new LinkedList<Integer>();! myList.add(5);!
  • Neben LinkedList unterstützt Java eine Reihe weiterer Listenimplementierungen mit unterschiedlichen Vor- und Nachteilen
  • Schnittstelle List<Type> beinhaltet die gemeinsamen Methoden

Literatur

Bearbeiten

Da die Vorlesungsinhalte auf dem Buch Algorithmen und Datenstrukturen: Eine Einführung mit Java von Gunter Saake und Kai-Uwe Sattler aufbauen, empfiehlt sich dieses Buch um das hier vorgestellte Wissen zu vertiefen. Die auf dieser Seite behandelten Inhalte sind in Kapitel 2.3.5 und 13 zu finden.