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

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

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

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

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

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

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

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

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

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

Vorlesung Datenstrukturen

Verkettete Datenstrukturen: Listen

7. Verkettete Strukturen: Listen

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

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

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

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

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

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

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

Datenstrukturen sind neben Algorithmen weitere wichtige Bausteine in 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

6. Verkettete Strukturen: Listen

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

Kapitel 12: Induktive

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

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

1. Rekursive Algorithmen 2. Rekursive (dynamische) Datenstrukturen

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2)

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

Vorlesung Datenstrukturen

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

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

Prüfung Algorithmen und Datenstrukturen I

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Repetitorium Informatik (Java)

3. Übungsblatt zu Algorithmen I im SoSe 2017

Einstieg in die Informatik mit Java

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

Fallstudie: Online-Statistik

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

C++ - Objektorientierte Programmierung Konstante und statische Elemente

Übungsaufgaben: 1. Objektorientierte Programmierung - Teil 1

12.3 Ein Datenmodell für Listen

Fakultät IV Elektrotechnik/Informatik

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

Implementieren von Klassen

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

Grundlagen der Informatik

Prüfung Algorithmen und Datenstrukturen I

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

Informatik Abitur Bayern 2017 / II - Lösung

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

Theoretische Informatik 1 WS 2007/2008. Prof. Dr. Rainer Lütticke

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

Anwendungsbeispiel MinHeap

Praktikum zu Einführung in die Informatik für LogWings und WiMas Wintersemester 2013/14

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

Programmieren in C. Rekursive Strukturen. Prof. Dr. Nikolaus Wulff

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

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

ADT: Verkettete Listen

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

ADT: Verkettete Listen

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

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

18. Natürliche Suchbäume

Informatik II Prüfungsvorbereitungskurs

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

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

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

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

Transkript:

EINI LogWing/ Einführung in die Informatik für Naturwissenschaftler und Ingenieure Vorlesung 2 SWS WS 17/18 Dr. Lars Hildebrand Fakultät für Informatik Technische Universität Dortmund lars.hildebrand@tu-dortmund.de http://ls14-www.cs.tu-dortmund.de Dr. Lars Hildebrand 1

Thema Listen Bäume Unterlagen Dißmann, Stefan und Ernst-Erich Doberkat: Einführung in die objektorientierte Programmierung mit Java, 2. Auflage. München [u.a.]: Oldenbourg, 2002. ( ZB oder Volltext aus Uninetz) Echtle, Klaus und Michael Goedicke: Lehrbuch der Programmierung mit Java. Heidelberg: dpunkt-verl, 2000. ( ZB) Dr. Lars Hildebrand 2

Übersicht Begriffe Spezifikationen, Algorithmen, formale Sprachen Programmiersprachenkonzepte Grundlagen der imperativen Programmierung Algorithmen und Felder Sortieren Rekursive (Baum, binärer Baum, Heap) Heapsort Objektorientierung Einführung Vererbung Anwendung Dr. Lars Hildebrand 3

Grundlagen dynamischer I : Strukturen, die je nach Bedarf und damit dynamisch wachsen und schrumpfen können. Felder/Arrays! Grundidee: bilden Mengen mit typischen Operationen ab. Einzelne Elemente speichern die zu speichernden/ verarbeitenden Daten. Einzelne Elemente werden durch dynamische verknüpft. Trennung von Datenstrukturierung & Nutzdaten Dr. Lars Hildebrand 4

Grundlagen dynamischer II Art der Elemente ist problemabhängig, variiert daher je nach Anwendung. Für die Verknüpfung existieren typische Muster: Listen, Bäume, Graphen,... Objektorientierte Sicht: sind durch die Art der Verknüpfung der Elemente und die Zugriffsmethoden charakterisiert. Dr. Lars Hildebrand 5

Grundlagen dynamischer III Wichtige dynamische : Listen lineare Listen doppelt verkettete Listen Bäume binäre Bäume binäre Suchbäume Graphen gerichtete Graphen ungerichtete Graphen Stack Schlangen Dr. Lars Hildebrand 6

Grundlagen dynamischer IV Fragen zur Organisation der : 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? Dr. Lars Hildebrand 7

Grundlagen dynamischer V Aufbau von dynamischen : Klassen enthalten Attribute (hier: weiter), die Referenzen auf Objekte der eigenen Klasse darstellen. Diese Attribute schaffen die Möglichkeit, ein weiteres Objekt der Klasse an eine Referenz zu binden. Die einzelnen Objekte sind in der Lage, gemeinsam eine komplexe Struktur durch aufeinander verweisende Referenzen zu bilden. class Element { Element weiter;... Dr. Lars Hildebrand 8

Grundlagen Artikel im EINI-Wiki: Datenstruktur Dr. Lars Hildebrand 9

Listen Listen definieren eine Reihenfolge von Elementen, die gemäß dieser Reihenfolge miteinander verknüpft sind. Typische Zugriffsmethoden: Anfügen eines neuen Elementes Einfügen eines neuen Elementes an einer bestimmten Position in der Liste Auslesen eines beliebigen Elementes der Liste Entfernen eines beliebigen Elementes der Liste Abfrage, ob die Liste leer ist Leeren der Liste Auch wenn nicht alle Methoden realisiert sind, wird die Struktur als Liste bezeichnet. Dr. Lars Hildebrand 10

Bestandteile einer Liste Element class Element { private int wert; private Element weiter; //Nutzinformation //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. Dr. Lars Hildebrand 11

Bestandteile einer Liste Woraus besteht eine Liste? aus Elementen, die in der Liste gespeichert werden aus der Liste selbst, 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 Konstruktor, parameterlos public Liste(int w) { kopf = new Element(w); Dr. Lars Hildebrand Konstruktor, 1 int-parameter 12

Konstruktion von Listen Eine lineare Liste kann auf verschiedene Arten konstruiert werden: Anhängen eines neuen Elementes an den Anfang, in die Mitte oder an das Ende einer bereits bestehenden Liste. Zugriff auf die Liste wird durch eine Referenz realisiert, die in der Klasse Liste realisiert ist und die auf das erste Element der Liste zeigt. Enthält eine Liste keine Elemente, zeigt die Referenz auf null. Dr. Lars Hildebrand 13

Schema der Klasse Lineare Liste Eine leere Liste erzeugen: Liste meineliste = new Liste(); Liste meineliste kopf Eine Liste mit einem Element erzeugen: Liste meineliste = new Liste(42); Liste Element meineliste kopf wert: 42 weiter Dr. Lars Hildebrand 14

Funktionalität einer Liste Was fehlt noch? Typische Zugriffsmethoden: Anfügen eines neuen Elementes Einfügen eines neuen Elementes an einer bestimmten Position in der Liste Auslesen eines beliebigen Elementes der Liste Entfernen eines beliebigen Elementes der Liste Abfrage, ob die Liste leer ist Leeren der Liste Dr. Lars Hildebrand 15

Klasse Element: Vollständige Implementierung I 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; Dr. Lars Hildebrand 16

Klasse Element: Vollständige Implementierung II Anmerkungen Es existiert ein zusätzlicher Konstruktor, der das neue Element vor ein bestehendes Element einreiht. Implementierung von Get- und Set-Methoden für den Zugriff auf die privaten Attribute: public void SetzeWert(int i) public int HoleWert() public void SetzeWeiter(Element e) public Element HoleWeiter() Dr. Lars Hildebrand 17

An den Anfang der Liste einfügen I class Liste {... public void FuegeEin(int neuerwert) { kopf = new Element(neuerWert, kopf); Liste meineliste = new Liste(42); Liste Element meineliste kopf wert: 42 weiter meineliste.fuegeein(73); meineliste Liste Element Element kopf wert: 42 wert: 73 weiter weiter Dr. Lars Hildebrand 18

An den Anfang der Liste einfügen II Anmerkungen zu FuegeEin() Ein neues Element wird erzeugt: kopf = new Element(neuerWert, kopf); neuerwert enthält die Nutzungsinformation. 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: Die Referenz auf das alte erste Element darf nicht verloren gehen! Dr. Lars Hildebrand 19

Ausgeben der Liste I 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 Dr. Lars Hildebrand 20

Ausgeben der Liste II 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: Der Wert des aktuellen Elementes wird ausgegeben: System.out.println( aktuelleselement.holewert()); Das aktuelle Element wird auf das nächste gesetzt: aktuelleselement = aktuelleselement.holeweiter(); Dr. Lars Hildebrand 21

An das Ende der Liste anfügen I public class Liste {... public void FuegeAn(int neuerwert) { Element aktelement = this.kopf; if (aktelement == null) FuegeEin(neuerWert); else { while (aktelement.holeweiter()!= null) { aktelement = aktelement.holeweiter(); aktelement.setzeweiter(new Element(neuerWert)); Liste meineliste = new Liste(42); meineliste.fuegean(73); meineliste Liste Element Element kopf wert: 42 wert: 73 weiter weiter Dr. Lars Hildebrand 22

An das Ende der Liste anfügen II Anmerkungen zu FuegeAn() Anzahl der Elemente variabel, daher Programmierung einer Schleife notwendig Start ist das Element, auf das kopf verweist: Element aktelement = 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 (aktelement.holeweiter()!= null) { aktelement = aktelement.holeweiter(); Dann kann dort das neue Element mit dem letzten Element verbunden werden: aktelement.setzeweiter(new Element(neuerWert)); Dr. Lars Hildebrand 23

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 Dr. Lars Hildebrand 24

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. Dr. Lars Hildebrand 25

Klasse EffizienteListe I Änderungen an den Attributen & Konstruktoren Neues Attribut fuss, das das letzte Element der Liste referenziert Setzen von fuss in die 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; Dr. Lars Hildebrand 26

Klasse EffizienteListe II Ä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 ist 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; Dr. Lars Hildebrand 27

Klasse EffizienteListe III Änderungen an der Methode ZeigeListe(): keine public void ZeigeListe() { Element aktuelleselement = this.kopf; while (aktuelleselement!= null) { System.out.println( aktuelleselement.holewert()); aktuelleselement = aktuelleselement.holeweiter(); Dr. Lars Hildebrand 28

Klasse EffizienteListe IV Änderungen an der Methode FuegeEin() Sonderfall: Nur falls noch kein Element in der Liste ist, muss die fuss-referenz berücksichtigt werden! public void FuegeEin(int neuerwert) { kopf = new Element(neuerWert, kopf); if (fuss == null) fuss = kopf; Dr. Lars Hildebrand 29

Klasse EffizienteListe V Änderungen an der Klasse Element keine Beobachtungen: Alle Änderungen betreffen die Verwaltungsinformationen der Klasse Liste. Die Klasse Element bleibt völlig unbeeinflusst. Die Methode fuegean() hat nun eine konstante Laufzeit. Dr. Lars Hildebrand 30

Einfügen in geordnete Liste I Problem: 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. Dr. Lars Hildebrand 31

Einfügen in geordnete Liste II 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 das letzte Element der Liste, ist x des neue Ende der Liste. Dr. Lars Hildebrand 32

Einfügen in geordnete Liste III 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 Methode Positioniere, die als Parameter den einzuordnenden Wert und eine Referenz auf den Anfang einer Teilliste übergeben bekommt. Als Ergebnis gibt Positioniere eine Referenz auf Element zurück, die auf die Teilliste verweist, in die x einsortiert ist. Dr. Lars Hildebrand 33

Einfügen in geordnete Liste IV Sei anfang die an Positioniere übergebene Teilliste und gelte: x < anfang.wert: Erzeuge ein neues Element und füge es am Anfang der bei anfang beginnenden Teilliste ein. x > anfang.wert: Füge x in die mit anfang.weiter beginnende Restliste ein, indem hierfür Positioniere mit den entsprechenden Parametern erneut aufgerufen wird. Dr. Lars Hildebrand 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; Dr. Lars Hildebrand 35

Durchlaufen einer Struktur In vielen Anwendungen, die auf dynamischen 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 Dr. Lars Hildebrand 36

Durchlaufen einer Liste I class Liste {... public void ZeigeListe() { Element aktelement = this.kopf; while (aktelement!= null) { System.out.println(aktElement.HoleWert()); aktelement = aktelement.holeweiter(); public void ZeigeListeRekursiv() { ZeigeListeRekursiv(kopf); private void ZeigeListeRekursiv(Element aktelement){ if (aktelement!= null) { System.out.println(aktElement.HoleWert()); ZeigeListeRekursiv(aktElement.HoleWeiter()); Dr. Lars Hildebrand 37

Durchlaufen einer Liste II 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? Dr. Lars Hildebrand 38

Durchlaufen einer Liste III Einsatz der rekursiven Variante analog zu ZeigeListeRekursiv() aber: rekursiver Aufruf und Ausgabe vertauscht public void ZeigeListeUmgekehrt() { ZeigeListeUmgekehrt(kopf); private void ZeigeListeUmgekehrt(Element aktelement) { if (aktelement!= null) { ZeigeListeUmgekehrt(aktElement.HoleWeiter()); System.out.println(aktElement.HoleWert()); private void ZeigeListeRekursiv(Element aktelement){ if (aktelement!= null) { System.out.println(aktElement.HoleWert()); ZeigeListeRekursiv(aktElement.HoleWeiter()); Dr. Lars Hildebrand 39

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 Dr. Lars Hildebrand 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. Aufgrund 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. Dr. Lars Hildebrand 41

Zusammenfassung können zur Laufzeit wachsen und schrumpfen. werden durch Nutzungsinformation und Verwaltungsinformation realisiert. Verwaltungsinformation ist eine Referenz auf eigene Klasse. Listen Einfache Listen Einfache Listen mit Referenz auf das letzte Element Sortierte Listen Doppelt verkettete Listen Wie geht es weiter? Dr. Lars Hildebrand 42

Listen Artikel im EINI-Wiki: Liste Dr. Lars Hildebrand 43

Übersicht Vielen Dank für Ihre Aufmerksamkeit! Nächste Termine Nächste Vorlesung 25.01.2018, 08:15 Nächste Vorlesung LogWing 26.01.2018, 08:15 Dr. Lars Hildebrand 44