Einführung in Dynamische Datenstrukturen
Datenstrukturen
Datenstrukturen wollen wir als Objekte auffassen, die eine externe und eine interne Repräsentation haben.
Während der Designphase kommt die externe Repräsentation und während der Implementationsphase die
interne Repräsentation zur Anwendung.
Was sind Dynamische Datenstrukturen ?
Datenstrukturen, deren Aufbau sich zur Laufzeit eines Programms ändert, heißen dynamisch.
Beispiel:
Liste
Einführung in Dynamische Datenstrukturen
Was ist eine Liste?
Eine Liste ist eine Menge von n Elementen mit n >= 0, X1, X2 ....., Xn und es gilt:
Wenn n > 0, dann ist X1 der erste Knoten.
Wenn 1 < k <n, dann ist Xn-1, der Vorgänger und Xn+1 der Nachfolger vom kten Knoten.
Xn ist der letzte Knoten.
! Operationen wie z.B. das Einfügen, Löschen usw. verändern die Struktur einer Liste!
Hinweis
In der Informatik hat sich ein Kern von Datenstrukturen ‚herausgeschält‘, die sich in verschiedenen
Verwendungszusammenhängen als nützlich und wieder verwendbar erwiesen haben.
Eine Auswahl von dynamische Datenstrukturen:
Stacks, Queue, Trees (Bäume), Graphen, .......
Einführung in Dynamische Datenstrukturen
Wir wollen (dynamische) Datenstrukturen aus vier Perspektiven behandeln:
1.
2.
3.
4.
Die Beschreibung von Datenstrukturen
Die Repräsentation von Datenstrukturen
Die Implementierung von Datenstrukturen
Die Anwendung von Datenstrukturen
Beschreibung von Datenstrukturen
Datenstrukturen definieren wir durch die auf sie ausführbaren Operationen und ihre Semantik.
Add: Füge ein Element am Anfang einer Liste ein.
Append: Füge ein Element an das Ende der List an.
ElementAt: Bestimme das Element an der Position i.
Length: Bestimme die Länge der Liste.
Delete: Lösche das Element an der Position i.
.....
....
Einführung in Dynamische Datenstrukturen
Repräsentation von Datenstrukturen
Die Repräsentation beschreibt die Anordnung der Elementen der Datenstruktur, unabhängig von einer
Implementierungssprache.
Bei Listen unterscheiden wir zwei Repräsentationen:
1. Die verkettete Repräsentation
Jedes Element besitzt einen Link (Referenz) auf seinen Nachbarn.
2. Die sequentielle Repräsentation
Bei der sequentiellen Repräsentation sind die Elemente räumlich nebeneinander angeordnet.
Einführung in Dynamische Datenstrukturen
Verkettete Repräsentation
Sequentielle Repräsentation
Vorteil
Nachteil
Implementierung von Datenstrukturen
Ausgehend von der Definition und der Repräsentationen einer Datenstruktur sollen diese in einer
Programmiersprache (Java) umgesetzt werden.
Idee
Die Operationen in ‚Interfaces‘ zu spezifizieren.
Die Repräsentationen durch zugehörigen Klassen zu implementieren.
Einführung in Dynamische Datenstrukturen
Vorteil
Bei der entsprechenden Programmierung kann beim der Änderung der Implementierung (Repräsentation)
das aufwendige Ändern des Codes vermieden werden.
List Interface
public interface List {
public void add(Object o);
public void append(Object o);
public Object elementAt(int index);
public int length ();
....
}
Einführung in Dynamische Datenstrukturen
Implementierung (verkettete Repräsentation)
class LLCell {
Object data;
LLCell next;
public LLCell(Object o) { data=o; }
}
public class LList implements List {
privat LLCell head=null, tail=null; privat int length=0;
public void add(Object o) {
LLCell n = new LLCell(o);
n.next = head;
head = n;
length ++;
}
public Object elementAt(int i) {
int j=0;
for (LLCell p = head; p!=null; p=p.next) {
if ( i==j ) return p.data; j++;}}
Einführung in Dynamische Datenstrukturen
Implementierung (sequentielle Repräsentation)
class ArrayList implements List{
private Object[] a; int length;
....
public add(Object Element) {
....
for (i=length; i >= 0; i--)
a [i+1] = a[i];
a[0] = Element;
....
}
public Object ElementAt(int index) {
return a[index];
}
}
Einführung in Dynamische Datenstrukturen
Anwendung
LList list = new LList();
list.add("Frank");
list.add("Zappa");
list.add(new Integer(4));
LList list = new LList();
list.add(...);
paySalaries(list);
public void paySalaries(List employees) {
for (int i=0; i <= temployees.length(); i++) {
Employee empl = employees.elementAt(i); .... }
}
ArrayList anotherList = new ArrayList();
anotherList.add(...);
paySalaries(anotherList);