Informatik 11 Datenstrukturen und Softwareentwicklung 1 Die rekursive




![Methode hinten. Anstellen(Taxi t): Belegung: taxi 3 taxi 8 taxi 5 null Index: [0] Methode hinten. Anstellen(Taxi t): Belegung: taxi 3 taxi 8 taxi 5 null Index: [0]](https://slidetodoc.com/presentation_image_h2/74aacbe6740277070b201697b5678176/image-5.jpg)













- Slides: 18
Informatik 11 Datenstrukturen und Softwareentwicklung
1. Die rekursive Datenstruktur Liste 1. 1 Die Datenstruktur Warteschlange In einer Warteschlange (französisch: Queue) an einer Kasse im Supermarkt geschieht das Verlassen und Einreihen nach dem Prinzip “First In, First Out“ (FIFO): Wer sich zuerst in die Schlange einreiht, verlässt sie auch als erster wieder. Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 1 Die Datenstruktur Warteschlange 2
Andere Beispiele, bei denen das Prinzip FIFO möglich (aber nicht zwingend) ist: • Autos an einer Zapfsäule • Taxis an einem Taxistand • Patienten im Wartezimmer • Prozesse in einem Computerbetriebssystem Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 1 Die Datenstruktur Warteschlange 3
Die Situation „Warteschlange mit Taxis“ soll mithilfe eines Feldes (Array) modelliert und implementiert werden. Erweitertes Klassendiagramm: Hinweis: Im Klassendiagramm kann ähnlich wie in JAVA der Datentyp, die Referenzklasse und der Rückgabebezeichner zuerst stehen int taxi. Anzahl Taxi[] taxischlange void hinten. Anstellen(Taxi). . . Aggregation, d. h. ein Objekt von Taxi. Warteschlange referenziert mehrere Objekte von Taxi. Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 1 Die Datenstruktur Warteschlange 4
Methode hinten. Anstellen(Taxi t): Belegung: taxi 3 taxi 8 taxi 5 null Index: [0] (vorne) [1] [2] [3] [4] [5] Es gibt mehr Taxis als Plätze. Die Belegung im Beispiel ist willkürlich gewählt. Belegung: taxi 3 taxi 8 taxi 5 taxi 2 null Index: [0] [1] [2] [3] [4] [5] Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 1 Die Datenstruktur Warteschlange 5
Methode Taxi vorne. Abfahren(): Belegung: taxi 3 taxi 8 taxi 5 taxi 2 null Index: [0] [1] [2] [3] [4] [5] return taxi 3 Belegung: taxi 8 taxi 5 taxi 2 null Index: [0] [1] [2] [3] [4] [5] Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 1 Die Datenstruktur Warteschlange 6
Übung 1 Implementieren einer Warteschlange als Array Implementiere nach dem Klassendiagramm die beiden Klassen Taxi und Taxischlange. Alle Attribute haben den Sichtbarkeitsmodifikator private. Im Konstruktor von Taxi. Warteschlange wird ein leeres Feld mit 6 Plätzen erzeugt, für Taxi genügt der Standardkonstruktor. Die Methode schlange. Ausgeben() listet in einer Zeile die Taxikennzeichen auf. Erzeuge einige Objekte und teste dein Programm ausführlich. Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 1 Die Datenstruktur Warteschlange 7
Probleme bei der Modellierung als Feld (Array): • Die Anzahl der Feldlänge ist nicht variabel. • Nicht benötigte Feldplätze beanspruchen Speicherplatz. • Die Umsortierung (z. B. bei remove) der Referenzen auf die Feldplätze kann unnötig komplex werden. • Modellierung nicht ganz korrekt, da es Referenzen auf alle Elemente gibt. (eigentlich benötigt man nur den Anfang und evt. das Ende der Schlange) Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 1 Die Datenstruktur Warteschlange 8
Modellierung der Situation „Patienten im Wartezimmer“ als Warteschlange: hat als Nachfolger > hat als Anfang > Warteschlange hat als Ende > 0. . 1 Patient 0. . 1 „hat als Nachfolger“ ist eine rekursive Beziehung. Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 1 Die Datenstruktur Warteschlange 9
Objektdiagramm: Warteschlange als einfach verkettete Liste Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 2 Trennung von Struktur und Inhalt 10
Objektdiagramm: Einfügen am Ende der Liste Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 2 Trennung von Struktur und Inhalt 11
Objektdiagramm: Entfernen am Anfang der Liste Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 2 Trennung von Struktur und Inhalt 12
Übung 2 Implementieren einer Warteschlange a) Implementiere nach dem Klassendiagramm die beiden Klassen Warteschlange und Patient. Die Methode information. Ausgeben() von Warteschlange soll die Methode information. Ausgeben() des ersten Patienten in der Schlange aufrufen. Erzeuge einige Objekte und teste dein Programm ausführlich. Ergänze die Klasse Warteschlange um eine Methode alle. Informationen. Ausgeben(), die Namen aller Patienten in der Schlange in ihrer Reihenfolge ausgibt. Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 1 Die Datenstruktur Warteschlange 13
Übung 2 Implementieren einer Warteschlange – Beschreibung der Klassen Klasse Patient String name (eindeutiger) Nachname des Patienten Patient nachfolger Referenz auf den Nachfolger in der Warteschlange Patient(String name) Konstruktor mit dem Übergabeparameter name. Der Nachfolger ist noch unbestimmt und wird auf null gesetzt. void nachfolger. Setzen(Patient nf) Setzt den Nachfolger des Patienten in der Warteschlange fest. Patient nachfolger. Geben() Sondierende Methode, die den Nachfolger des Patienten zurückgibt. void information. Ausgeben() Schreibt den Namen des Patienten in ein Textfenster. Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 1 Die Datenstruktur Warteschlange 14
Übung 2 Implementieren einer Warteschlange – Beschreibung der Klassen Klasse Warteschlange Patient anfang, ende Referenzen auf den Anfang und auf das Ende der Warteschlange. Die Referenz auf das Ende ist dabei nicht zwingend notwendig. (Übung 2 c) Warteschlange() Konstruktor; anfang und ende werden auf null gesetzt. void einfuegen(Patient patient. Neu) Fügt die Referenz auf einen neuen Patienten am Ende der Wartschlange ein. Ist die Warteschlange nicht leer, erhält ende patient. Neu als neuen Nachfolger. Ist die Warteschlange leer, werden anfang und ende auf patient. Neu gesetzt. Patient entfernen() Entfernt den ersten Patienten in der Warteschlange und gibt ihn zurück. Ist die Warteschlange nicht leer, so wird anfang neu gesetzt und zwar auf seinen Nachfolger. Für den Fall, dass nur ein Patient vor dem Entfernen in der Schlange war, muss ende auf null gesetzt werden. void information. Ausgeben() Ruft die Methode information. Ausgeben() des ersten Patienten in der Schlange auf. void alle. Informationen. Ausgeben() Ruft der Reihe nach jeweils die Methode information. Ausgeben() des Patienten in der Schlange auf. Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 1 Die Datenstruktur Warteschlange 15
Übung 2 Testen der Implementierung b) Erzeuge einige Objekte von Patient, ein Objekt von Warteschlange und teste deine Methoden. Überprüfe auch die Sonderfälle leere Schlange und Schlange mit einem Patienten. Der folgende Sonderfall kann zu einem Fehler in der Schlange führen: Der aus der Schlange entfernte Patient reiht sich gleich wieder ein. Was passiert dann beim Aufruf der Methode alle. Informationen. Ausgeben() ? Wie lässt sich dieser Fehler leicht beheben? Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 1 Die Datenstruktur Warteschlange 16
Übung 2 Ändern der Modellierung, Implementierung c) Das Verwalten des Endes der Warteschlange ist nicht zwingend notwendig. Das Klassendiagramm zeigt die geänderte Modellierung. Die Methode ende. Geben() durchläuft die Schlange solange bis der Nachfolger des aktuellen Elements null ist. Passe die Implementierung an die neue Modellierung an und teste ausführlich. Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 1 Die Datenstruktur Warteschlange 17
Übung 2 Ändern der Modellierung, Implementierung d)* Die Liste erhält weitere Methoden zum Einfügen und Entfernen von Patienten: void vorne. Einfuegen(Patient p. Neu) fügt einen neuen Patienten am Anfang der Liste ein. Patient ende. Entfernen() entfernt den letzten Patienten der Liste. Die Liste ist damit nicht mehr als Warteschlange modelliert. Um Verwechslungen zu vermeiden, wurden die ehemaligen Methoden einfuegen und entfernen in hinten. Einfuegen und vorne. Entfernen umbenannt. Hinweis: Für die Methode ende. Entfernen() benötigt man den vorletzten Patienten in der Liste. Informatik 11 - 1. Die rekursive Datenstruktur Liste - 1. 1 Die Datenstruktur Warteschlange 18