![Page 1: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/1.jpg)
Institut für Kartographie und GeoinformationProf. Dr. Lutz Plümer
Diskrete Mathematik IVorlesung 5
11.11.99
-Listen-
![Page 2: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/2.jpg)
2
• letzte Stunde:
rekursive Definitionen und Methoden
• heute:
rekursive Datenstrukuren: Listen
Rekursion
![Page 3: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/3.jpg)
3
Übersicht
• Listen – ... als rekursive Struktur– ... als dynamische Datenstrukturen
• Die Klasse Element– ... mit Element-konstruktor
• Eine richtige kleine Liste• Ein UML-Diagramm für „Element“• Aber wie kommt man nun zu einer Liste?• Anfügen von Elementen - Beispiel
![Page 4: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/4.jpg)
4
Übersicht (Fortsetzung)
• Einfügen am Anfang einer Liste– Problem– Beispiel– Problem der bisherigen Lösung
• Die Klasse „Liste“ (UML-Diagramm)• Die Klasse Element (vollständig)• Die Klasse „Liste“
![Page 5: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/5.jpg)
5
Listen als rekursive Struktur
• Die leere Liste Null ist eine Liste. • Wenn E ein Element ist und L eine Liste, dann ist
E L eine Liste.• Beispiele:
– die leere Liste { }– {1}– {1,3,2,5}
• Graphik für die leere Liste:
![Page 6: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/6.jpg)
6
Listen als Dynamische Datenstrukturen
• flexible Datenstruktur ohne vorherige Festlegungauf die Größe
• Vorteile gegenüber Arrays– beliebige Größenänderungen– effiziente Umordnung der Elemente
• Nachteil gegenüber Arrays– kein direkter Zugriff auf einzelne Elemente
![Page 7: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/7.jpg)
7
class Element{ int wert; Element weiter;}
5
Element int
Zeiger auf ein Element
Die Klasse Element
![Page 8: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/8.jpg)
8
class Element { Element(int i) { wert = i; weiter = null;} int wert; Element weiter;}
... mit Element-konstruktor
Das ist neu
• Die Prozedur Element(int i)ist ein Konstruktor, der bei der Erzeugung eines Elements mit new Element(i) automatisch aufgerufen wird.
![Page 9: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/9.jpg)
9
5
Die leere Liste
3 7
Der Kopf der Liste
Der Rest der Liste
Eine richtige kleine Liste
![Page 10: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/10.jpg)
10
Ein UML-Diagramm für „Element“
Element
+Element(i : int)
-wert : int
weiter
0..1
Beachte:• „weiter“ ist kein Attribut, sondern eine Beziehung• eine (UML-) Beziehung wird (in Java) als Attribut einer
zugehörigen Klasse implementiert• eine UML-Beziehung kann auch rekursiv sein
Beziehung Konstruktor
Ein oderkein Nachfolger
0..1
![Page 11: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/11.jpg)
11
Aber wie kommt man nun zu einer Liste?
• Wir haben:– die Klasse Element
• Eine Liste entsteht durch Erzeugung und Verkettung von Objekten vom Typ Element– Erzeugen des ersten Elements
• mit dem Konstruktor „Element“– Anfügen eines Elemente
• zusätzliche Prozedur
![Page 12: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/12.jpg)
12
void FügeAn(int neuerWert){ Element lauf = this; while (lauf.weiter != null) lauf = lauf.weiter; lauf.weiter = new Element(neuerWert);}
Zeiger auf dasaufrufende Objekt
Sucht das letzte Element
fügt neues Element an
Anfügen von Elementen
![Page 13: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/13.jpg)
Element kopf;
class Element{ Element(int i) { wert = i; weiter = null; } int wert; Element weiter;}
kopf
![Page 14: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/14.jpg)
Element kopf;kopf = new Element(25);
class Element{ Element(int i) { wert = i; weiter = null; } int wert; Element weiter;}
kopf
![Page 15: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/15.jpg)
Element kopf;kopf = new Element(25);
class Element{ Element(int i) { wert = i; weiter = null; } int wert; Element weiter;}
kopf
25
![Page 16: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/16.jpg)
Element kopf;kopf = new Element(25);kopf.FügeAn(22);
void FügeAn(int neuerWert){ Element lauf = this; while (lauf.weiter != null) lauf = lauf.weiter; lauf.weiter = new Element(neuerWert);}
25
kopf
![Page 17: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/17.jpg)
Element kopf;kopf = new Element(25);kopf.FügeAn(22);
void FügeAn(int neuerWert){ Element lauf = this; while (lauf.weiter != null) lauf = lauf.weiter; lauf.weiter = new Element(neuerWert);}
lauf25
kopf
![Page 18: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/18.jpg)
Element kopf;kopf = new Element(25);kopf.FügeAn(22);
void FügeAn(int neuerWert){ Element lauf = this; while (lauf.weiter != null) lauf = lauf.weiter; lauf.weiter = new Element(neuerWert);}
25
kopf
22
![Page 19: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/19.jpg)
Element kopf;kopf = new Element(25);kopf.FügeAn(22);
void FügeAn(int neuerWert){ Element lauf = this; while (lauf.weiter != null) lauf = lauf.weiter; lauf.weiter = new Element(neuerWert);}
25
kopf
22
![Page 20: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/20.jpg)
Element kopf;kopf = new Element(25);kopf.FügeAn(22);kopf.FügeAn(28);
void FügeAn(int neuerWert){ Element lauf = this; while (lauf.weiter != null) lauf = lauf.weiter; lauf.weiter = new Element(neuerWert);}
22
25
kopf
![Page 21: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/21.jpg)
Element kopf;kopf = new Element(25);kopf.FügeAn(22);kopf.FügeAn(28);
void FügeAn(int neuerWert){ Element lauf = this; while (lauf.weiter != null) lauf = lauf.weiter; lauf.weiter = new Element(neuerWert);}
lauf
22
25
kopf
![Page 22: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/22.jpg)
Element kopf;kopf = new Element(25);kopf.FügeAn(22);kopf.FügeAn(28);
void FügeAn(int neuerWert){ Element lauf = this; while (lauf.weiter != null) lauf = lauf.weiter; lauf.weiter = new Element(neuerWert);}
22
25
kopf
lauf
![Page 23: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/23.jpg)
Element kopf;kopf = new Element(25);kopf.FügeAn(22);kopf.FügeAn(28);
void FügeAn(int neuerWert){ Element lauf = this; while (lauf.weiter != null) lauf = lauf.weiter; lauf.weiter = new Element(neuerWert);}
22
25
kopf
lauf
![Page 24: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/24.jpg)
Element kopf;kopf = new Element(25);kopf.FügeAn(22);kopf.FügeAn(28);
void FügeAn(int neuerWert){ Element lauf = this; while (lauf.weiter != null) lauf = lauf.weiter; lauf.weiter = new Element(neuerWert);}
kopf
22
25 28
lauf
![Page 25: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/25.jpg)
Element kopf;kopf = new Element(25);kopf.FügeAn(22);kopf.FügeAn(28);
void FügeAn(int neuerWert){ Element lauf = this; while (lauf.weiter != null) lauf = lauf.weiter; lauf.weiter = new Element(neuerWert);}
28
22
25
kopf
![Page 26: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/26.jpg)
Element kopf;kopf = new Element(25);kopf.FügeAn(22);kopf.FügeAn(28);
void FügeAn(int neuerWert){ Element lauf = this; while (lauf.weiter != null) lauf = lauf.weiter; lauf.weiter = new Element(neuerWert);}
28
22
25
kopf
![Page 27: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/27.jpg)
27
15 22 28
15 22 2817
kopf
kopf
Problem: Einfügen am Anfang einer Liste
• Problem: es gibt bislang nur die Klasse Element• die Operation Einfügen muß vom ersten Element aufgerufen
werden• Umsetzung der Referenz „kopf“ erforderlich• das Kopf-Element hat aber keinen Zugriff auf die Referenz „kopf“• Lösung: Umkopieren von Wert
![Page 28: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/28.jpg)
28
void FügeEin(int neuerWert){ Element neuesElement = new Element(wert); neuesElement.weiter = weiter; weiter = neuesElement; wert = neuerWert;}
Einfügen am Anfang einer Liste
![Page 29: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/29.jpg)
29
25 22 28kopf
void FügeEin(int neuerWert){ Element neuesElement = newElement(wert); neuesElement.weiter = weiter; weiter = neuesElement; wert = neuerWert;}
kopf.FügeEin(17)
Einfügen am Anfang einer Liste
![Page 30: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/30.jpg)
30
25 22 28kopf
void FügeEin(int neuerWert){ Element neuesElement = newElement(wert); neuesElement.weiter = weiter; weiter = neuesElement; wert = neuerWert;}
25neuesElement
Einfügen am Anfang einer Liste
![Page 31: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/31.jpg)
31
25 22 28kopf
void FügeEin(int neuerWert){ Element neuesElement = newElement(wert); neuesElement.weiter = weiter; weiter = neuesElement; wert = neuerWert;}
neuesElement
Einfügen am Anfang einer Liste
25
![Page 32: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/32.jpg)
32
25 22 28kopf
void FügeEin(int neuerWert){ Element neuesElement = newElement(wert); neuesElement.weiter = weiter; weiter = neuesElement; wert = neuerWert;}
Einfügen am Anfang einer Liste
25
![Page 33: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/33.jpg)
33
25 22 28kopf
void FügeEin(int neuerWert){ Element neuesElement = newElement(wert); neuesElement.weiter = weiter; weiter = neuesElement; wert = neuerWert;}
Einfügen am Anfang einer Liste
25
![Page 34: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/34.jpg)
34
25 22 28kopf
void FügeEin(int neuerWert){ Element neuesElement = newElement(wert); neuesElement.weiter = weiter; weiter = neuesElement; wert = neuerWert;}
25
Einfügen am Anfang einer Liste
![Page 35: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/35.jpg)
35
17 22 28kopf
void FügeEin(int neuerWert){ Element neuesElement = newElement(wert); neuesElement.weiter = weiter; weiter = neuesElement; wert = neuerWert;}
25
Einfügen am Anfang einer Liste
![Page 36: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/36.jpg)
36
17 22 28kopf
void FügeEin(int neuerWert){ Element neuesElement = newElement(wert); neuesElement.weiter = weiter; weiter = neuesElement; wert = neuerWert;}
25
Einfügen am Anfang einer Liste
![Page 37: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/37.jpg)
37
Problem der bisherigen Lösung
• Einfügen am Anfang mehr als umständlich• Einfügen am Ende ineffizient, insbesondere wenn die
Liste sehr lang ist• wo liegt das Problem?• bisheriges Modell
– wir haben zwar eine Klasse Element– aber keine Klasse Liste
• Lösung: Definition einer Klasse Liste– Verweis auf das erste Element– Verweis auf das letzte Element
![Page 38: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/38.jpg)
38
Liste0..1
kopf
0..1fuß
0..1
0..1Element
+Element(i : int)
-wert : intweiter
0..1
0..1
Die Klasse „Liste“
![Page 39: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/39.jpg)
39
class Element {private int wert; private Element weiter; Element(int i) { wert = i; weiter = null; }Element(int i, Element e) { wert = i; weiter = e; }void SetzeWert(int i) { wert = i; }int GibWert() { return wert; }void SetzeWeiter(Element e) { weiter = e; }Element GibWeiter() { return weiter; }
}
beachte:
• der Konstruktor Element kann sowohl ein- als auch zweistellig aufgerufen weden („Überladung“)
neu
Die Klasse Element (vollständig)
![Page 40: Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung 5 11.11.99 -Listen-](https://reader033.vdokument.com/reader033/viewer/2022042814/55204d6649795902118bbbb7/html5/thumbnails/40.jpg)
class Liste {Liste() { kopf = fuß = null; }Liste(int w) { kopf = fuß = new Element(w); }private Element kopf, fuß;void FügeAn(int an) {
Element neu = new Element(an);if (fuß != null) {
fuß.SetzeWeiter(neu);fuß = neu;
}else
kopf = fuß = neu;}void FügeEin(int ein) {
kopf = new Element(ein, kopf);if (fuß == null)
fuß = kopf;}
}beachte die Fallunterscheidung der leeren Liste! leere Liste
leere Liste
Die Klasse „Liste“