Dynamische Datenstrukturen

Werbung
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);
Herunterladen