I Die rekursive Datenstruktur Liste

Ähnliche Dokumente
Abiturprüfung Informatik, Grundkurs

8 Baum in perfekter Komposition

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

1. Die rekursive Datenstruktur Liste

Listen. M. Jakob. Gymnasium Pegnitz. 20. September Hinführung: Wartenschlangen. Grundprinzip von Listen Rekursion

12.3 Ein Datenmodell für Listen

Lösung Arztpraxis. Die Klasse PATIENT: Anmerkungen: class PATIENT{ String name; String krankheit; PATIENT(String n){ name = n; }

Listen. M. Jakob. 20. September Gymnasium Pegnitz

Aufgaben NF 11; Seite 1

Abschnitt 10: Datenstrukturen

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

Grundlagen der Informatik

1. Die rekursive Datenstruktur Liste

Grundlagen der Informatik

Vorlesung Datenstrukturen

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen

3. Die Datenstruktur Graph

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

Informatik Abitur Bayern 2017 / II - Lösung

1 Abstrakte Datentypen

Teil 8: Dynamische Speicherverwaltung. Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden

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

Begriffe 1 (Wiederholung)

Verkettete Datenstrukturen: Listen

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

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

Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der Größe

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

HSR Rapperswil 2001 Markus Rigling. Programmieren: Vererbung. 1 Variante 2

7. Verkettete Strukturen: Listen

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

12. Dynamische Datenstrukturen

Einfache Liste: Ein Stapel (Stack) Ansatz. Schaubild. Vorlesung 1. Handout S. 2. Die einfachste Form einer Liste ist ein Stapel (stack).

1 Klassen und Objekte

Studentische Lösung zum Übungsblatt Nr. 7

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

Konkatenation zweier Listen mit concat

Übungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit

Schlussendlich geben wir die Listen aus. Es kommt zu folgender Ausgabe:

Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus: Modellierung und Implementierung von Datenstrukturen mit Java

Wiederholung: Zusammenfassung Felder. Algorithmen und Datenstrukturen (für ET/IT) Definition Abstrakter Datentyp. Programm heute

4.2 Daten und Datenstrukturen

Datenstrukturen Teil 1. Arrays, Listen, Stapel und Warteschlange. Arrays. Arrays. Array

Sommersemester Implementierung I: Struktur

13. Bäume: effektives Suchen und Sortieren

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

13. Bäume: effektives Suchen und Sortieren

13. Dynamische Datenstrukturen

Übungsaufgaben: 1. Objektorientierte Programmierung - Teil 1

Ein erstes "Hello world!" Programm

Software Entwicklung 1. Fallstudie: Arithmetische Ausdrücke. Rekursive Klassen. Überblick. Annette Bieniusa / Arnd Poetzsch-Heffter

Einstieg in die Informatik mit Java

Fallstudie: Online-Statistik

Kapitel 12: Induktive

Algorithmen und Datenstrukturen (für ET/IT)

Verkettete Listen. DVG Verkettete Listen 1

C- Kurs 09 Dynamische Datenstrukturen

Technische Universität Wien Institut für Computergraphik und Algorithmen Arbeitsbereich für Algorithmen und Datenstrukturen

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2)

1. Die rekursive Datenstruktur Liste

Graphdurchmusterung, Breiten- und Tiefensuche

16. Dynamische Datenstrukturen

Informatik 11 Kapitel 2 - Rekursive Datenstrukturen

Software Entwicklung 1

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

Einstieg in die Informatik mit Java

Spezielle Datenstrukturen

Einführung in die Informatik

Datentypen. strukturierte. elementare. skalare reelle statische dynamische int. list. real float. set. record. inhomogen. homogen

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

Datenstrukturen sind neben Algorithmen weitere wichtige Bausteine in der Informatik

Repetitorium Informatik (Java)

Informatik II Übung 5

Unterrichtsmaterialien in digitaler und in gedruckter Form. Auszug aus: Modellierung und Implementierung von Datenstrukturen mit Java

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

Bäume und der Sequence ADT

K Ergänzungen zur Einführung in C

Klausur Software-Entwicklung März 01

Informatik II: Algorithmen und Datenstrukturen SS 2013

Algorithmen und Datenstrukturen (für ET/IT) Wiederholung: Ziele der Vorlesung. Wintersemester 2012/13. Dr. Tobias Lasser

ALP II Dynamische Datenmengen Datenabstraktion

Objekte. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 5. 1 Modulübersicht 3

Prinzipien der objektorientierten Programmierung (OOP)

Tutoraufgabe 1 (Listen):

7. Objektorientierung. Informatik II für Verkehrsingenieure

6. Verkettete Strukturen: Listen

Umsetzung einer Klassenkarte in einer Programmiersprache

Struktur am Beispiel einer Liste

Wuerfel - augenzahl: int + Wuerfel() + wuerfeln() + gibaugenzahl(): int

Assoziationen in Java

Universität Augsburg, Institut für Informatik Sommersemester 2001 Prof. Dr. Martin Ester 16. Juli Klausur

Kapitel 9 Das Labyrinth

Praxis der Programmierung

C++ - Objektorientierte Programmierung Vererbung

Algorithmen I. Tutorium 1-3. Sitzung. Dennis Felsing

Transkript:

I Die rekursive Datenstruktur Liste 1 Einführung der Datenstruktur Schlange Aus dem Vorjahr ist das Feld vertraut als eine Datenstruktur, mit der mehrere gleichartige Objekte verwaltet werden können. In diesem Kapitel wird eine neue Datenstruktur vorgestellt, die in vielen Anwendungssituationen einfacher und besser geeignet ist. Die Klasse FELD In der etwas altmodischen Zahnarztpraxis von Frau Dr. Krankl mussten die Patienten bisher selbst darauf achten, wann sie an der Reihe waren. Dazu sollte sich der jeweils letzte Patient den Neuankömmling einprägen. Wenn der am längsten wartende Patient ins Behandlungszimmer gebeten wurde, informierte er die Arzthelfer, wen sie als Nächstes zur Behandlung rufen mussten. Diese Regelung führte aber immer wieder zu Missverständnissen. Aus diesem Grund sollen die Arzthelfer das Aufrufen der Patienten künftig mithilfe der EDV regeln. Sie sollen die neu hinzukommenden Patienten erfassen und den jeweils ersten Patienten auffordern, ins Behandlungszimmer zu gehen. Aus informatischer Sicht geht es hier um die Verwaltung vieler gleichartiger Objekte der Klasse PATIENT in einer Warteschlange. Dafür wurde im Vorjahr die Klasse FELD als Möglichkeit zur Realisierung der 1:n- Beziehung eingeführt. Mit einem Feld lässt sich beispielsweise eine Menge von Zahlen verwalten, ein Spielfeld fester Größe, auch zweidimensional, oder jede beliebige beschränkte Anzahl von Objekten einer bestimmten Klasse. letzte Patientin erster Patient Die zunächst naheliegende Problemlösung über ein Feld erweist sich jedoch aus mehreren Gründen als unbefriedigend: Durch die Länge des Feldes ist die maximale Anzahl der Elemente vorgegeben. Auch wenn man die Feldgröße sehr hoch wählt, ist man nicht davor gefeit, dass bei vielen eintreffenden Patienten der Speicherplatz irgendwann einmal nicht mehr ausreicht. Dann kann es zu Programmfehlern kommen (Abbildung 2, rechter Teil). Im Feld gibt es fast immer freie Plätze, die ohne Not Speicher verschwenden. Für das Aufrücken der Patienten und für das Einfügen neuer Patienten in das Feld sind komplexe Methoden erforderlich: Beim Aufrücken muss jeder Patient einzeln um jeweils eine Position nach vorne gerückt werden; beim Einfügen eines neuen Patienten muss das Feld so lange durchsucht werden, bis der erste freie Platz gefunden ist. Dabei legt das im Wartezimmer praktizierte Prinzip Hinten anstellen, vorne zum Arzt gehen eine einfachere Lösung nahe! 1 Von der Realität zum Objektdiagramm 5

I Die rekursive Datenstruktur Liste 2 Warteschlangenverwaltung mit Problem bei der Verwendung eines Feldes Exception in thread AWT-EventQueue-O java.lang.arrayindexoutofboundsexception: 5 at WARTESCHLANGE.Einfuegen(WARTESCHLANGE.java:15) Anforderungen an eine besser geeignete Datenstruktur Welche Eigenschaften soll eine Datenstruktur haben, die die oben beschriebenen Probleme nicht aufweist? Eine zur Realisierung des Wartezimmers besser geeignete Datenstruktur soll die folgenden Merkmale aufweisen: Die Anzahl der verwalteten Elemente soll prinzipiell unbeschränkt sein. Die Anzahl der reservierten, aber unbesetzten Speicherplätze soll möglichst gering sein. Optimal ist es, wenn es keinen unbesetzten Platz gibt. Da diese beiden Forderungen nicht durch einen vorab festgelegten Speicherumfang realisiert werden können, ist es notwendig, dass der Speicher zur Laufzeit dynamisch an die Erfordernisse angepasst wird. Die Umsetzung des Wartezimmers soll auf möglichst einfache Weise das Einfügen neuer Elemente am Ende und das Entfernen des vordersten Elements als Methoden bereitstellen. Weitere Aufgaben, wie der Zugriff auf Elemente in der Mitte der Wartezimmer- Datenstruktur, sind hier nicht erforderlich. Um die Reihenfolge der Elemente abzubilden, müssen die Elemente geeignet geordnet werden. Die Ordnung kann dadurch hergestellt werden, dass jedes Element seinen Nachfolger kennt. Die Beziehung zwischen einem Element und seinem Nachfolger bleibt auch erhalten, wenn weiter vorne ein Patient die Warteschlange verlässt. So lassen sich aufwendige Methoden zum Aufrücken, wie bei der Verwendung eines Feldes, vermeiden. Die Datenstruktur Schlange (auch: Warteschlange, Queue, Puffer), die nachfolgend vorgestellt wird, erfüllt genau diese Voraussetzungen. Schlangen werden vielfältig genutzt. Sie sind immer sinnvoll, wenn Erzeuger Aufträge geben, die von Verbrauchern abgearbeitet werden müssen. Ein Erzeuger legt einen Auftrag am Ende der Schlange ab. Auch wenn die Verbraucher den Auftrag noch nicht abgearbeitet haben, können neue Aufträge hinzugefügt werden. Die Verbraucher holen sich zu einem späteren Zeitpunkt die Aufträge der Reihe nach ab. Schlangen werden bei vielen Anwendungen verwendet: Die Verwaltung der Anrufer in einem Callcenter kann über die Datenstruktur Schlange realisiert werden. Von verschiedenen Programmen können Druckaufträge an eine Druckerwarteschlange gesendet werden. Der Druckertreiber, der die Interaktion mit dem Drucker regelt, holt dort die Aufträge der Reihe nach ab. Datenbankserver haben einen Puffer für Abfragen, die auf ihre Abarbeitung warten. 6

Modellierung der Schlange Welche Objekte werden in der neuen Datenstruktur benötigt? Welche Beziehungen bestehen zwischen ihnen? Wie lassen sich die Objekte klassifizieren? Bei Dr. Krankl besteht die Warteschlange aus Patienten. Jeder Patient trägt seine spezifischen Informationen. Im Beispiel soll dies nur der Name sein; in der Realität könnten hier viele weitere Patientendaten, wie die Krankenkasse oder gespeicherte Behandlungsdaten, hinzukommen. Jeder Patient merkt sich außerdem seinen Nachfolger. Die Arzthelfer greifen über die Warteschlange nur auf den ersten und den letzten Patienten zu. Im Objektdiagramm lassen sich diese Zusammenhänge folgendermaßen veranschaulichen: 3 Objektdiagramm der Warteschlange Die Warteschlange hat zwei Beziehungen zu Patienten: Sie verwaltet eine Referenz auf den ersten und auf den letzten Patienten. Ein Patient hat als Nachfolger keinen oder einen Patienten. Zwischen zwei Patienten gibt es also die hat als Nachfolger -Beziehung. Eine solche selbstbezügliche Beziehung nennt man rekursive Beziehung. Auf diese Weise kann eine beliebige und prinzipiell unbeschränkte Anzahl an Patienten verwaltet werden. Die Warteschlange bildet insgesamt eine rekursive Struktur. lat. recurrere: zurückkehren Nach Klärung des grundsätzlichen Aufbaus und des Zusammenhangs der Daten kann nun die Funktionalität über die Methoden genauer eingegrenzt werden: Die Warteschlange muss in der Lage sein, einen neuen Patienten hinten einzufügen sowie den vordersten Patienten zu entfernen und auszugeben, zum Beispiel zur Weiterleitung an den Arzt im Behandlungszimmer. Dafür benötigt die Klasse WARTESCHLANGE die Methoden Einfuegen und Entfernen. 4 Beziehungen im Klassendiagramm 5 Einfuegen und Entfernen von Patienten 7

I Die rekursive Datenstruktur Liste Ein Patient muss festlegen und ausgeben können, wer sein Nachfolger ist, damit klar ist, wer nach ihm an der Reihe ist. Die Klasse PATIENT muss dafür die Methoden NachfolgerSetzen und NachfolgerGeben bereitstellen. Da es manchmal erforderlich ist, nur den Namen des vordersten Patienten herauszufinden, ohne ihn schon aus der Liste zu entfernen, wird sowohl bei der Warteschlange als auch beim Patienten eine Methode InformationAusgeben benötigt. Damit lassen sich die Klassen mit ihren Beziehungen identifizieren und in einem ersten erweiterten Klassendiagramm veranschaulichen. 6 Klassendiagramm zur Warteschlange Implementierung der Schlange Zur Realisierung der Beziehungen zwischen Warteschlange und Patient benötigt man in der Klasse WARTESCHLANGE die Referenzattribute anfang und ende vom Typ PATIENT. In der Klasse PATIENT braucht man das Referenzattribut nachfolger des gleichen Typs zur Umsetzung der rekursiven Beziehung hat als Nachfolger. WARTESCHLANGE PATIENT anfang PATIENT ende WARTESCHLANGE() void Einfuegen(PATIENT) PATIENT Entfernen() void InformationAusgeben() PATIENT String name PATIENT nachfolger PATIENT(String) void NachfolgerSetzen(PATIENT) PATIENT NachfolgerGeben() void InformationAusgeben() 7 Erweiterte Klassendiagramme für WARTE- SCHLANGE und PATIENT Die verschiedenen Methoden der Klasse PATIENT sind einfach zu implementieren: Der Konstruktor PATIENT erwartet als Eingabe den Namen des Patienten, setzt das Attribut name auf den entsprechenden Wert und nachfolger auf null. Die Methode NachfolgerSetzen erhält als Parameter eine Referenz auf ein Objekt der Klasse PATIENT und weist diese Referenz dem Attribut nachfolger zu. Die Funktion NachfolgerGeben gibt den Wert des Referenzattributs nachfolger aus. InformationAusgeben sorgt für die Ausgabe des Wertes von name über ein Ausgabefenster. Die Methoden der Klasse WARTESCHLANGE lassen sich folgendermaßen beschreiben: Der Konstruktor erzeugt eine leere Warteschlange. Der Methode Einfuegen wird ein Patient übergeben. Zunächst muss für den Patienten, der bisher als ende geführt wurde, die Methode NachfolgerSetzen mit dem neuen Patienten aufgerufen werden. Danach kann der neue Patient als ende registriert werden. Dabei muss darauf geachtet werden, dass die Warteschlange zuvor nicht leer war. 8

Die Methode Entfernen gibt eine Referenz auf den ersten Patienten aus, damit ihn die Arzthelferin ansprechen kann. Außerdem wird vom ersten Patienten durch Aufruf von NachfolgerGeben der Nachfolger geholt; dieser wird als neuer anfang gesetzt. Auch hier muss darauf geachtet werden, dass die Warteschlange nicht leer ist. Die Methode InformationAusgeben der Klasse WARTESCHLANGE ruft ihrerseits die gleichnamige Methode des ersten Patienten auf. Wieder muss darauf geachtet werden, dass die Warteschlange nicht leer ist. Klasse WARTESCHLANGE Methode Einfuegen(PATIENT patientneu) wenn (ende!= null) ende.nachfolgersetzen(patientneu) sonst anfang = patientneu ende = patientneu 8 Pseudocode zu Einfuegen Klasse WARTESCHLANGE Methode PATIENT Entfernen() PATIENT p p = anfang wenn (anfang!= null) anfang = anfang.nachfolgergeben() wenn (anfang == null) ende = null return p 9 Pseudocode zu Entfernen Die Datenstruktur Schlange stellt eine Möglichkeit zur Realisierung einer 1:n-Beziehung mit unbeschränktem Wert für n dar. Über die Klasse WARTESCHLANGE ist das Einfügen von Elementen am Ende und das Entfernen am Anfang der Schlange möglich. Eine Beziehung zwischen Objekten der gleichen Klasse nennt man rekursive Beziehung. Zwischen den Elementen der Warteschlange besteht die rekursive Beziehung hat als Nachfolger. Zur Realisierung der Beziehung im Programm muss die Klasse der verwalteten Objekte ein Referenzattribut für den Nachfolger bereitstellen. Dadurch werden die Objekte verkettet. Aufgaben 1 Grundwissen Beziehungen a Erläutern Sie an selbst gewählten Beispielen: Wie können Beziehungen zwischen Objekten realisiert werden? In welchen Fällen eignet sich dabei die Klasse FELD? b Welche Syntax stellt die von Ihnen verwendete Programmiersprache für die Umsetzung von Beziehungen durch Referenzattribute oder Felder zur Verfügung? 2 Feld oder Schlange was ist besser? a Die Patientenverwaltung in einer Arztpraxis kann über ein Feld oder über eine Schlange erfolgen. Erörtern Sie Vor- und Nachteile der beiden Lösungsansätze. Entscheiden und begründen Sie bei den folgenden vier Teilaufgaben, ob ein Feld oder eine Schlange für die Problemlösung besser geeignet ist. b System zur Festlegung der Startreihenfolge bei einem Ski-Weltcuplauf c System zur Erfassung der Ergebnisse bei einem Ski-Weltcuplauf 9