EINI LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Ähnliche Dokumente
EINI LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 16/17

EINI LogWing/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 17/18

EINI LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

EINI LogWing/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 17/18

EINI LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

EINI I. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 10/11

Dr. Lars Hildebrand Fakultät für Informatik Technische Universität Dortmund

Dr. Lars Hildebrand Fakultät für Informatik Technische Universität Dortmund

EINI LW/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 16/17

EINI LogWing/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 17/18

Vorlesung Datenstrukturen

EINI WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Verkettete Datenstrukturen: Listen

7. Verkettete Strukturen: Listen

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen

EINI LW/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 15/16

Datenstrukturen sind neben Algorithmen weitere wichtige Bausteine in der Informatik

Dr. Lars Hildebrand Fakultät für Informatik Technische Universität Dortmund

EINI LW/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 16/17

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

7. Dynamische Datenstrukturen Bäume. Informatik II für Verkehrsingenieure

1. Rekursive Algorithmen 2. Rekursive (dynamische) Datenstrukturen

Vorlesung Datenstrukturen

Einführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen. Sebastian Küpper

6. Verkettete Strukturen: Listen

EINI LogWing/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 17/18

Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 18/19

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Städtisches Gymnasium Olpe Java Ht Informatik - Q1 Die Klasse List im Abitur Methoden und Beispielcode Hier alle wichtigen Methoden. Ein Beispielcode

Kapitel 12: Induktive

Repetitorium Informatik (Java)

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Aufbau eines "B-Baums" der Ordnung 3, Teil 1

Grundlagen der Informatik

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2)

Implementieren von Klassen

1. Aufgabe (6 Punkte): Java-Programmierung (Arrays)

Fakultät IV Elektrotechnik/Informatik

3. Übungsblatt zu Algorithmen I im SoSe 2017

Listen. Prof. Dr. Christian Böhm. in Zusammenarbeit mit Gefei Zhang. WS 07/08

Grundlagen der Informatik

Anwendungsbeispiel MinHeap

Einstieg in die Informatik mit Java

12.3 Ein Datenmodell für Listen

Institut für Programmierung und Reaktive Systeme. Java 6. Markus Reschke

Prüfung Algorithmen und Datenstrukturen I

Fallstudie: Online-Statistik

Übungsblatt 13. Abgabe / Besprechung in Absprache mit dem Tutor

Datum, Uhrzeit: , Uhr Semester: I1 Note:... Prof. Dr. G. Meixner

EINI WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Grundlagen der Informatik / Algorithmen und Datenstrukturen. Aufgabe 132

Einfache Arrays. Dr. Philipp Wendler. Zentralübung zur Vorlesung Einführung in die Informatik: Programmierung und Softwareentwicklung

C++ - Objektorientierte Programmierung Konstante und statische Elemente

Wiederholung. Bäume sind zyklenfrei. Rekursive Definition: Baum = Wurzelknoten + disjunkte Menge von Kindbäumen.

Aufgaben NF 11; Seite 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 14. Bäume. Bäume 1

Kapitel 8. Programmierkurs. Methoden. 8.1 Methoden

Probeklausur Java Einführung in die Informatik. Wintersemester 2014/2015

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 13. Bäume. Bäume 1

a) Für das vorgegebene Programmstück ergibt sich folgendes Referenzgeflecht:

Kapitel 9. Programmierkurs. Attribute von Klassen, Methoden und Variablen. 9.1 Attribute von Klassen, Methoden und Variablen

Dr. Lars Hildebrand Fakultät für Informatik Technische Universität Dortmund

FH D. Objektorientierte Programmierung in Java FH D FH D. Prof. Dr. Ing. André Stuhlsatz. Referenzen. Referenzen

55 Ring-Queue. size. push. clear. get. Reinhard Schiedermeier / Klaus Köhler, Das Java-Praktikum, dpunkt.verlag, ISBN

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 17/18. Kapitel 14. Bäume. Bäume 1

Prüfung Algorithmen und Datenstrukturen I

EINI LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 15/16

Prof. H. Herbstreith Fachbereich Informatik. Leistungsnachweis. Informatik 1 WS 2001/2002

Lineare Liste. struct list_element { float f; /* weitere Elemente */ struct list_element *next; /* Zeiger auf Nachfolger-Element */ }; Peter Sobe

5.5 Prioritätswarteschlangen

Informatik Abitur Bayern 2017 / II - Lösung

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Übungsaufgaben: 1. Objektorientierte Programmierung - Teil 1

Algorithmen und Datenstrukturen

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

18. Natürliche Suchbäume

Datenstrukturen Teil 2. Bäume. Definition. Definition. Definition. Bäume sind verallgemeinerte Listen. Sie sind weiter spezielle Graphen

Transkript:

EINI LW Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 11/12 Fakultät für Informatik Technische Universität Dortmund lars.hildebrand@udo.edu http://ls1-www.cs.uni-dortmund.de EINI Kap. 8 Dynamische Datenstrukturen 1

EINI Kap. 8 Dynamische Datenstrukturen 2 Thema Kapitel 8 Dynamische Datenstrukturen Listen Bäume Unterlagen Echtle, Goedicke: Einführung in die objektorientierte Programmierung mit Java, dpunkt-verlag. Doberkat, Dissmann: Einführung in die objektorientierte Programmierung mit Java, Oldenbourg-Verlag, 2. Auflage

EINI Kap. 6 Objektorientierte Programmierung - Einführung 3 Übersicht Begriffe Spezifikationen, Algorithmen, formale Sprachen, Grammatik Programmiersprachenkonzepte Grundlagen der Programmierung Algorithmen und Datenstrukturen Felder Sortieren Rekursive Datenstrukturen (Baum, binärer Baum, Heap) Heapsort Objektorientierung Einführung Vererbung Anwendung

EINI Kap. 8 Dynamische Datenstrukturen 4 Grundlagen dynamischer Datenstrukturen Dynamische Datenstrukturen Strukturen, die je nach Bedarf und damit dynamisch wachsen und schrumpfen können Unterschied zu Feldern/Arrays! Grundidee Dynamische Datenstrukturen bilden Mengen mit typischen Operationen ab Einzelne Elemente speichern die zu speichernden / zu verarbeitenden Daten Einzelne Elemente werden durch dynamische Datenstrukturen verknüpft also: Trennung von Datenstrukturierung & Nutzdaten

EINI Kap. 8 Dynamische Datenstrukturen 5 Grundlagen dynamischer Datenstrukturen Art der Elemente ist problemabhängig, variiert je nach Anwendung Für die Verknüpfung existieren typische Muster: Listen, Bäume, Graphen,... Objektorientierte Sicht Dynamische Datenstrukturen sind durch die Art der Verknüpfung der Elemente und die Zugriffsmethoden charakterisiert

EINI Kap. 8 Dynamische Datenstrukturen 6 Grundlagen dynamischer Datenstrukturen Wichtige dynamische Datenstrukturen Listen lineare Listen doppelt verkettete Listen Bäume binäre Bäume binäre Suchbäume Graphen gerichtete Graphen ungerichtete Graphen Stack Schlangen Mengen

EINI Kap. 8 Dynamische Datenstrukturen 7 Grundlagen dynamischer Datenstrukturen Fragen zur Organisation der Datenstrukturen Funktionen Wie wird eine Instanz der Struktur initialisiert? Wie werden Daten eingefügt, modifiziert, entfernt? Wie wird in den Strukturen navigiert? Wie werden einzelne Werte in einer Struktur wiedergefunden? Wie werden alle in einer Struktur abgelegten Werte besucht?

EINI Kap. 8 Dynamische Datenstrukturen 8 Grundlagen dynamischer Datenstrukturen Grundlage für den Aufbau dynamischer Datenstrukturen Klassen enthalten Attribute (hier weiter), die Referenzen auf Objekte der eigenen Klasse darstellen Diese Attribute schaffen die Möglichkeit, an eine Referenz ein weiteres Objekt der Klasse zu binden Die einzelnen Objekte sind in der Lage, gemeinsam eine komplexe Struktur durch aufeinander verweisende Referenzen zu bilden class Element { Element weiter;...

EINI Kap. 8 Dynamische Datenstrukturen 9 Listen Listen definieren eine Reihenfolge von Elementen, die gemäß dieser Reihenfolge miteinander verknüpft sind Typische Zugriffsmethoden: Einfügen am Anfang, Einfügen an bestimmter Stelle Anfügen (d.h. Einfügen am Ende) Ermittlung der Länge, Prüfen, ob die Liste leer ist Prüfen, ob Element in Liste vorkommt Ermittlung der Position eines Elements Ermittlung des ersten Elements Liefern der Liste ohne erstes Element Nicht immer sind alle Methoden realisiert, aber man redet dennoch von Listen.

Bestandteile einer Liste class Element { private int wert; // Nutzinformation private Element weiter; //Verwaltungsinformation public Element(int i) { wert = i; weiter = null; Deklaration einer Klasse Element mit zwei privaten Attributen und einem Konstruktor Ein Objekt vom Typ Element enthält als Attribute eine ganze Zahl und eine Referenz auf ein weiteres Objekt des Typs Element Jedes Objekt vom Typ Element besitzt eine Referenz auf ein weiteres Element, man kann sie miteinander verketten EINI Kap. 8 Dynamische Datenstrukturen 10

Bestandteile einer Liste Woraus besteht eine Liste? Elementen, die in der Liste gespeichert werden Liste selber, die existiert, auch wenn kein Element gespeichert ist. public class Liste { private Element kopf; public Liste() { kopf = null; Klasse Liste Attribut kopf vom Typ Element public Liste(int w) { kopf = new Element(w); Konstruktor, parameterlos Konstruktor, 1 int Parameter EINI Kap. 8 Dynamische Datenstrukturen 11

EINI Kap. 8 Dynamische Datenstrukturen 12 Konstruktion von Listen Eine lineare Liste kann auf verschiedene Arten konstruiert werden Neues Element an den Anfang, in die Mitte oder an das Ende einer bereits bestehenden Liste anhängen Zugriff auf die Liste wird durch eine Referenz realisiert, die in der Klasse Liste realisiert ist, die auf das erste Element der Liste zeigt. Enthält eine Liste keine Elemente, zeigt die Referenz auf null.

Schema der Klasse lineare Liste Was können wir an diesem Punkt mit der Liste tun? Eine leere Liste erzeugen: Liste meineliste = new Liste(); meineliste Liste kopf Eine Liste mit einem Element erzeugen: Liste meineliste = new Liste(42); meineliste Liste kopf Element wert: 42 weiter

EINI Kap. 8 Dynamische Datenstrukturen 14 Funktionalität einer Liste Was fehlt noch? Typische Zugriffsmethoden: Einfügen am Anfang, Einfügen an bestimmter Stelle Anfügen (d.h. Einfügen am Ende) Ermittlung der Länge, Prüfen, ob die Liste leer ist Prüfen, ob Element in Liste vorkommt Ermittlung der Position eines Elements Ermittlung des ersten Elements Liefern der Liste ohne erstes Element

Klasse Element: Vollständig Notwendige Ergänzungen an der Klasse Element class Element { private int wert; private Element weiter; public Element(int i) { wert = i; weiter = null; public Element(int i, Element e) { wert = i; weiter = e; public void SetzeWert(int i) { wert = i; public int HoleWert() { return wert; public void SetzeWeiter(Element e) { weiter = e; public Element HoleWeiter() { return weiter; EINI Kap. 8 Dynamische Datenstrukturen 15

EINI Kap. 8 Dynamische Datenstrukturen 16 Klasse Element: Vollständig Anmerkungen zu den Ergänzungen zusätzlicher Konstruktor, der das neue Element vor ein bestehendes Element einreiht Get- und Set-methoden zum Zugriff auf die privaten Attribute public void SetzeWert(int i) public int HoleWert() public void SetzeWeiter(Element e) public Element HoleWeiter()

EINI Kap. 8 Dynamische Datenstrukturen 17 An den Anfang der Liste einfügen class Liste {... public void FuegeEin(int neuerwert) { kopf = new Element(neuerWert, kopf); Liste meineliste = new Liste(42); meineliste Liste kopf Element wert: 42 weiter meineliste.fuegeein(73); meineliste Liste Element Element kopf wert: 42 wert: 73 weiter weiter

EINI Kap. 8 Dynamische Datenstrukturen 18 An den Anfang der Liste einfügen Anmerkungen zu FuegeEin() Ein neues Element wird erzeugt kopf = new Element(neuerWert, kopf); neuerwert enthält die Nutzinformation kopf enthält die Referenz auf das alte erste Element das neue Element referenziert das alte erste Element Das neue Element wird zum neuen Kopf der Liste kopf = new Element(neuerWert, kopf); Wichtig ist, dass die Referenz auf das alte erste Element nicht verloren geht

Ausgeben der Liste public class Liste {... public void ZeigeListe() { Element aktuelleselement = this.kopf; while (aktuelleselement!= null) { System.out.println( aktuelleselement.holewert()); aktuelleselement = aktuelleselement.holeweiter(); Liste meineliste = new Liste(42); meineliste.fuegeein(73); meineliste.zeigeliste(); > run TestListe 73 42 EINI Kap. 8 Dynamische Datenstrukturen 19

EINI Kap. 8 Dynamische Datenstrukturen 20 Ausgeben der Liste Anmerkungen zu ZeigeListe() Anzahl der Elemente variabel, daher Programmierung einer Schleife notwendig Start ist das Element auf das kopf verweist Element aktuelleselement = this.kopf; Ist kein Element in der Liste gespeichert, verweist kopf auf null Solange das aktuelle Element!= null gilt wird der Wert des aktuellen Elementes ausgegeben System.out.println( aktuelleselement.holewert()); das aktuelle Element auf das nächste Element gesetzt aktuelleselement = aktuelleselement.holeweiter();

EINI Kap. 8 Dynamische Datenstrukturen 21 An das Ende der Liste anfügen public class Liste {... public void FuegeAn(int neuerwert) { Element aktuelleselement = this.kopf; if (aktuelleselement == null) FuegeEin(neuerWert); else { while (aktuelleselement.holeweiter()!= null) { aktuelleselement = aktuelleselement.holeweiter(); aktuelleselement.setzeweiter(new Element(neuerWert)); Liste meineliste = new Liste(42); meineliste.fuegean(73); Liste Element meineliste kopf wert: 42 weiter meineliste Liste Element Element kopf wert: 42 wert: 73 weiter weiter

An das Ende der Liste anfügen Anmerkungen zu FuegeAn() Anzahl der Elemente variabel, daher Programmierung einer Schleife notwendig Start ist das Element auf das kopf verweist Element aktuelleselement = this.kopf; Ist kein Element in der Liste gespeichert, kann das neue Element mit FuegeEin() eingetragen werden Ansonsten muss das Ende der Liste gesucht werden while (aktuelleselement.holeweiter()!= null) { aktuelleselement = aktuelleselement.holeweiter(); Dann kann dort das neue Element mit dem letzten Element verbunden werden. aktuelleselement.setzeweiter(new Element(neuerWert)); EINI Kap. 8 Dynamische Datenstrukturen 22

Etwas testen public class TestListe { public static void main(string[] args) { Liste meineliste = new Liste(42); meineliste.fuegeein(73); meineliste.zeigeliste(); meineliste = new Liste(); meineliste.zeigeliste(); meineliste.fuegeein(42); meineliste.fuegean(73); meineliste.zeigeliste(); > run TestListe 73 42 42 73 EINI Kap. 8 Dynamische Datenstrukturen 23

Effizienz der Klasse lineare Liste Aufwand Erzeugen einer Liste eine Instanziierung FuegeEin() unabhängig von der Anzahl der gespeicherten Elemente ZeigeListe() abhängig von der Anzahl der gespeicherten Elemente FuegeAn() Erfordert bei jedem Aufruf ein vollständiges Durchlaufen der Liste Eine sehr viel effizientere Realisierung dieser Listenoperation wäre möglich, wenn neben dem ersten Element auch das letzte Element der Liste unmittelbar erreichbar wäre EINI Kap. 8 Dynamische Datenstrukturen 24

Klasse EffizienteList Änderungen an den Attributen & Konstruktoren Neues Attribut fuss, das das letzte Element der Liste referenziert Setzen von fuss in den Konstruktoren public class EffizienteListe { private Element kopf; private Element fuss; public EffizienteListe() { kopf = null; fuss = null; public EffizienteListe(int w) { kopf = new Element(w); fuss = kopf; EINI Kap. 8 Dynamische Datenstrukturen 25

Klasse EffizienteList Änderungen an der Methode FuegeAn() kein Suchen nach dem Ende der Liste das letzte Element der Liste ist immer in fuss gespeichert direkter Zugriff auf das letzte Element möglich public void FuegeAn(int neuerwert) { Element neueselement = new Element(neuerWert); if (fuss == null) { kopf = neueselement; fuss = neueselement; else { fuss.setzeweiter(neueselement); fuss = neueselement; EINI Kap. 8 Dynamische Datenstrukturen 26

Klasse EffizienteList Änderungen an der Methode FuegeEin() Sonderfall, falls noch kein Element in der Liste ist da nur dann die fuss-referenz berücksichtigt werden muss public void FuegeEin(int neuerwert) { kopf = new Element(neuerWert, kopf); if (fuss == null) fuss = kopf; EINI Kap. 8 Dynamische Datenstrukturen 27

Klasse EffizienteList Änderungen an der Methode ZeigeListe() keine public void ZeigeListe() { Element aktuelleselement = this.kopf; while (aktuelleselement!= null) { System.out.println( aktuelleselement.holewert()); aktuelleselement = aktuelleselement.holeweiter(); EINI Kap. 8 Dynamische Datenstrukturen 28

EINI Kap. 8 Dynamische Datenstrukturen 29 Klasse EffizienteList Änderungen an der Klasse Element keine Alle Änderungen betreffen die Verwaltungsinformationen der Klasse Liste Die Klasse Element bleibt völlig unbeeinflusst Die Methode fuegean() hat aber nun eine konstante Laufzeit Die Laufzeit der Methode fuegean() der alten, ineffizienten Variante war abhängig von der Anzahl der bereits gespeicherten Elemente.

Einfügen in geordnete Liste Einordnen eines Werts in eine aufsteigend geordnete Liste Keine zwei Elemente haben die identische Belegung des Attributs wert Der Algorithmus ist auf natürliche Weise rekursiv Idee: Sei x der einzufügende Wert 1. Fall: x kleiner als 1. Element => Einfügen am Anfang 2. Fall: x größer als 1. Element: Suche passende Position in der Liste Trenne Liste in Anfangs- und Endteil auf Setze Element an den Anfang des Endteils und verbinde Teillisten Falls x größer als letztes Element der Liste, ist x der Endteil. EINI Kap. 8 Dynamische Datenstrukturen 30

EINI Kap. 8 Dynamische Datenstrukturen 31 Einfügen in geordnete Liste Beispiel

EINI Kap. 8 Dynamische Datenstrukturen 32 Einfügen in geordnete Liste Präzisierung des Algorithmus: Folgende Fälle sind zu unterscheiden: kopf == null Einen Sonderfall bildet die Situation, dass die Liste leer ist, also noch kein Element enthält. Es muss ein erstes Element angelegt werden, das sicherlich eine geordnete, einelementige Liste bildet. kopf!= null: Wir definieren eine private MethodePositioniere, die als Parameter den einzuordnenden Wert und eine Referenz auf den Anfang einer Teilliste übergeben bekommt. Als Ergebnis gibtpositioniere eine Referenz aufelement zurück, die auf die Teilliste verweist, in die x einsortiert ist.

Einfügen in geordnete Liste Seianfang die anpositioniere übergebene Teilliste und gelte: x < anfang.wert: Erzeuge ein neues Element und füge es am Anfang der beianfang beginnenden Teilliste ein. x > anfang.wert: Füge x in die mitanfang.weiter beginnende Restliste ein, indem hierfür Positioniere mit den entsprechenden Parametern erneut aufgerufen wird. EINI Kap. 8 Dynamische Datenstrukturen 33

EINI Kap. 8 Dynamische Datenstrukturen 34 Einordnen mit Hilfe von Positioniere class Liste {... void OrdneEin(int i) { kopf = Positioniere(kopf, i); private Element Positioniere(Element einelement, int i) { if (einelement == null) einelement = new Element(i); else { if (i < einelement.holewert()) { einelement = new Element(i, einelement); if (i > einelement.holewert()) einelement.setzeweiter( Positioniere(einElement.HoleWeiter(), i)); return einelement;

EINI Kap. 8 Dynamische Datenstrukturen 35 Durchlaufen einer Struktur In vielen Anwendungen, die auf dynamischen Datenstrukturen basieren, besteht die Notwendigkeit, alle Elemente der Struktur genau einmal zu besuchen Dies gilt für Listen wie für andere dynamische Strukturen Dieses möglichst nur einmalige Besuchen aller Elemente nennt man Durchlaufen einer Struktur Anwendungsbeispiele: Prüfen auf Vorhandensein, Einsortieren, aber auch Ausgabe

Durchlaufen einer Liste class Liste {... public void ZeigeListe() { Element aktuelleselement = this.kopf; while (aktuelleselement!= null) { System.out.println(aktuellesElement.HoleWert()); aktuelleselement = aktuelleselement.holeweiter(); public void ZeigeListeRekursiv() { ZeigeListeRekursiv(kopf); private void ZeigeListeRekursiv(Element aktuelleselement) { if (aktuelleselement!= null) { System.out.println(aktuellesElement.HoleWert()); ZeigeListeRekursiv(aktuellesElement.HoleWeiter()); EINI Kap. 8 Dynamische Datenstrukturen 36

EINI Kap. 8 Dynamische Datenstrukturen 37 Durchlaufen einer Liste Durchlauf einer Liste in umgekehrter Reihenfolge: Referenz fuss verweist zwar auf das letzte Element einer Liste, kann jedoch nicht von dort zum vorletzten Element gelangen Für eine umgekehrte Ausgabe müssen alle Listenelemente gemerkt werden, während die Liste vom Anfang zum Ende durchläuft Erst nach einmaligem Durchlaufen kann vom letzten bis zum ersten Element gedruckt werden Großer Aufwand?

EINI Kap. 8 Dynamische Datenstrukturen 38 Durchlaufen einer Liste Einsatz der rekursiven Variante analog zu ZeigeListeRekursiv() aber: rekursiver Aufruf und Ausgabe vertauscht public void ZeigeListeUmgekehrt() { ZeigeListeUmgekehrt(kopf); private void ZeigeListeUmgekehrt(Element aktuelleselement) { if (aktuelleselement!= null) { ZeigeListeUmgekehrt(aktuellesElement.HoleWeiter()); System.out.println(aktuellesElement.HoleWert());

Etwas testen public class TestListe { public static void main(string[] args) { Liste meineliste = new Liste(42); meineliste.ordneein(7); meineliste.ordneein(73); meineliste.ordneein(1); meineliste.ordneein(50); meineliste.zeigelisterekursiv(); meineliste.zeigelisteumgekehrt(); > run TestListe 1 7 42 50 73 73 50 42 7 1 EINI Kap. 8 Dynamische Datenstrukturen 39

EINI Kap. 8 Dynamische Datenstrukturen 40 Doppelt verkettete Listen Wird der Durchlauf vom Ende einer Liste zu ihrem Anfang häufig benötigt, dann ist die lineare Verkettung von vorne nach hinten nicht der ideale Navigationspfad Besser wäre es dann, auch eine Rückwärtsverkettung zu haben Auf Grund dieser Überlegung kommt man zur doppelt verketteten Liste Die lokale Klasse Element enthält eine zweite Referenz voran, die genau entgegengesetzt zu weiter gerichtet ist und somit für jedes Element innerhalb der Liste auf seinen direkten Vorgänger verweist.

Zusammenfassung Dynamische Datenstrukturen können zur Laufzeit wachsen und schrumpfen werden durch Nutzinformation und Verwaltungsinformation realisiert Verwaltungsinformation ist Referenz auf eigene Klasse Listen Einfache Listen Einfache Listen mit Referenz auf das letzte Element Sortierte Listen Doppelt verkettete Listen Wie geht es weiter? EINI Kap. 8 Dynamische Datenstrukturen 41

EINI Kap. 8 Dynamische Datenstrukturen 42 EINI sagt Danke! Vielen Dank für Ihre Aufmerksamkeit! Nächste Termine Letzte Vorlesung 3.2.2012, 08:30 Campus Nord EF50, HS 1