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