ADT: Verkettete Listen

Ähnliche Dokumente
ALP II Dynamische Datenmengen

Innere Klassen. Innere Klassen. Page 1. Lernziele: innere Klassen, statische geschachtelte Klassen, anonyme Klassen.

Einstieg in die Informatik mit Java

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

Vorlesung Datenstrukturen

1 Abstrakte Klassen, finale Klassen und Interfaces

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

12. Dynamische Datenstrukturen

Einführung in die Informatik 2

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2)

Effiziente verkettete Listen

Vererbung & Schnittstellen in C#

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 3 - Objektorientierung

Objektorientierte Programmierung

Praxis der Programmierung

Hochschule Augsburg, Fakultät für Informatik Name:... Prüfung "Programmieren 1", IN1bac, WS 10/11 Seite 1 von 6

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

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

Einstieg in die Informatik mit Java

Einfach verkettete Liste

Kapitel 3: Datentyp Liste

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Probeklausur: Programmierung WS04/05

3 Objektorientierte Konzepte in Java

Folge 19 - Bäume Binärbäume - Allgemeines. Grundlagen: Ulrich Helmich: Informatik 2 mit BlueJ - Ein Kurs für die Stufe 12


Java Einführung Klassendefinitionen

Java I Vorlesung Collections

Algorithmen und Datenstrukturen

Java Einführung Methoden in Klassen

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

Einstieg in die Informatik mit Java

Factory Method (Virtual Constructor)

Schnittstellen, Stack und Queue

Prof. Dr. Uwe Schmidt. 21.August Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (BInf 211, BTInf 211, BMInf 211, BWInf 211)

Typumwandlungen bei Referenztypen

Nachname: Vorname: Matr.-Nr.: Punkte: 1. Aufgabe: ( / 25 Pkt.) Gegeben ist das folgende Struktogramm zur Berechnung von sin(x) mit Hilfe einer Reihe.

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

Objektorientierte Programmierung

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

Große Übung Praktische Informatik 1

PIWIN 1 Übung Blatt 5

Inhaltsverzeichnis. Praktikum Algoritmen und Datenstrukturen WS2004/2005 Paul Litzbarski Stefan Nottorf. Druckmanager allgemein 2.

1 Polymorphie (Vielgestaltigkeit)

Algorithmen und Datenstrukturen (ESE) Entwurf, Analyse und Umsetzung von Algorithmen (IEMS) WS 2014 / Vorlesung 10, Donnerstag 8.

Polymorphie/Späte Bindung Abstrakte Klassen Interfaces. Polymorphie/Späte Bindung Abstrakte Klassen Interfaces

Innere Klassen. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java

Objektorientierte Programmierung

Theorie zu Übung 8 Implementierung in Java

5.14 Generics. Xiaoyi Jiang Informatik I Grundlagen der Programmierung

Einführung in die Informatik Reference Variables

Repetitorium Informatik (Java)

Programmieren 2 Java Überblick

In C und Java müssen Variablen und Methodenergebnisse durch Typangaben erläutert werden. Welche der folgenden Aussagen sind korrekt und welche nicht:

Programmieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik

Kapitel 9: Klassen und höhere Datentypen. Selektoren

Geordnete Binärbäume

Programmieren II. Abstrakte Klassen, Interfaces Heusch 13.8, 13.9 Ratz Institut für Angewandte Informatik

Programmieren in Java

Verkettete Listen. Implementierung von einfach verketteten Listen. Implementierung von doppelt verketteten Listen

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

Probeklausur: Programmierung WS04/05

Suchbäume. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Datenstrukturen und Abstrakte Datentypen

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

Prinzipien Objektorientierter Programmierung

Programmierkurs Java

4.4.1 Implementierung vollständiger Bäume mit Feldern. Reguläre Struktur: Nachfolger des Knoten i sind die Knoten 2*i und 2*i+1.

Softwaretechnik WS 16/17. Übungsblatt 01

Einstieg in die Informatik mit Java

1. Typen und Literale (6 Punkte) 2. Zuweisungen (6 = Punkte)

Kapitel 6. Vererbung

Dr. Monika Meiler. Inhalt

C# - Einführung in die Programmiersprache Arrays, Enumeration und Collections. Leibniz Universität IT Services Anja Aue

JAVA KURS COLLECTION

368 4 Algorithmen und Datenstrukturen

Kapitel 6. Vererbung

Musterlösung Stand: 5. Februar 2009

Einführung Datentypen Verzweigung Schleifen Funktionen Dynamische Datenstrukturen. Java Crashkurs. Kim-Manuel Klein

Teil V. Generics und Kollektionen in Java

Java Einführung Collections

185.A Software-Entwurfsmuster 1 OOP. Software-Entwurfsmuster

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes

Objektorientierte Programmierung. Kapitel 12: Interfaces

Programmieren II. Innere Klassen. Heusch 10, Ratz 5.2.1, Institut für Angewandte Informatik

16. Dezember 2004 Dr. M. Schneider, P. Ziewer

C# im Vergleich zu Java

Informatik II, SS 2014

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Javakurs für Anfänger

Kapitel 6. Vererbung

3. Übungsblatt zu Algorithmen I im SoSe 2017

C- Kurs 09 Dynamische Datenstrukturen

Java Reflection. Meta-Programmierung mit der java.lang.reflection API. Prof. Dr. Nikolaus Wulff

Sichtbarkeit & statische Methoden. Einsatz von Sichtbarkeit Einsatz statischer Methoden programmatische Realisierung 2 Beispielaufgaben

Statische und Nichtstatische Methoden Properties/ Eigenschaften

3 Objektorientierte Konzepte in Java

Neue Features in C# 2.0

3. Konzepte der objektorientierten Programmierung

13. Bäume: effektives Suchen und Sortieren

Transkript:

ADT: Verkettete Listen

Abstrakter typ - Definition public class Bruch int zaehler, nenner; public Bruch(int zaehler, int nenner) this.zaehler = zaehler; this.nenner = nenner; Konstruktor zum Initialisieren der Werte Ausgabe des Bruches public void show() System.out.println(zaehler + "/" + nenner);

Abstrakter typ - Definition Zusammenfassung von und Operationen über diesen Implementierung der strukturen und Operationen ist außerhalb des Objektes nicht sichtbar Zugriff auf nur über Operationen (get, set und andere) Vorteile: Klar definierte Schnittstellen unterstützen arbeitsteilige Programmentwicklung Implementierungsdetails nur innerhalb des Objektes sichtbar -> Implementierung kann ohne Anpassung der übrigen Programmteile geändert werden (bei gleicher Signatur) Erleichtert Debugging, da Fehler besser lokalisierbar

Motivation I public class Bruch int zaehler, nenner; public Bruch(int zaehler, int nenner) this.zaehler = zaehler; this.nenner = nenner; Konstruktor zum Initialisieren der Werte Ausgabe des Bruches public void show() System.out.println(zaehler + "/" + nenner);

Motivation II public class List private Bruch[] liste; private int count; Array von Bruchinstanzen (objekten) Anzahl der Brüche public List() liste = new Bruch[10]; count = 0;.. Initialisierung im Konstruktor: - Max. 10 Brüche - 0 Brüche aktuell

Motivation III public void fill() liste[0] = new Bruch(3,4); liste[1] = new Bruch(2,7); count = 2; public void show() for (int i=0; i < count; i++) liste[i].show(); public void showadress() for (int i=0; i < 10; i++) System.out.println(liste[i]); Erstellen von zwei(willkürlich) neuen Brüchen Ausgabe aller Brüche Ausgabe aller Adressen der Instanzen der Bruchklasse: Objekte werden willkürlich im Speicher abgelegt!

Einfache und doppelt verkettete Liste Folge von Elementen Spezialfall: leere Liste Länge der Liste: Anzahl der Elemente Listen sind geordnet Elemente können doppelt vorkommen Zugriff über Index Jedes Element besitzt eine Referenz auf seinen Nachfolger: Einfach verkettete Liste Jedes Element besitzt eine Referenz auf seinen Nachfolger und seinen Vorgänger: Doppelt verkettete Liste

Motivation Es war einmal...

Darstellung: Einfach verkettete Liste Knoten Kopf NULL public class Node private Object content; private Node nextnode; bel. Inhalt möglich! Gleicher typ wie Klasse= Verweis auf nächstes Objekt der Klasse!

Klasse Node I public Node(Object content, Node nextnode) this.content = content; this.nextnode = nextnode; public Node getnextnode() return nextnode; Setzen des Inhaltes und dem Nachfolger Liefert den Nachfolger zurück Jede Klasse, auch die Klasse Knoten, ist Unterklasse von Object. Dies bedeutet, dass sich der Typ der Variablen content zur Laufzeit spezialisieren lässt (z.b. als int!)

Klasse Node II public void setnextnode (Node nextnode) this.nextnode = nextnode; public Object getcontent() return content; Setzt den Nachfolger Liefert den Inhalt zurück

Klasse Node III

Klasse SinglyLinkedList I public class SinglyLinkedList Node head; public SinglyLinkedList() head = new Node(null,null);.. Knotenobjekt für den Listenbeginn Setzen der Werte für den Kopf=Listenbeginn Inhalt: null, Verweis auf Nachfolger: null

Klasse SinglyLinkedList II public void add (Object object2add) Node actnode = head; while(actnode.getnextnode()!= null) actnode = actnode.getnextnode(); Node node2add = new Node(object2Add,null); actnode.setnextnode(node2add); Der des aktuellen Knotens=letzte Knoten wird auf den neuen Knoten gesetzt Temporäre Variable wird auf den Listenkopf gesetzt Solange ein Nachfolger existiert: Mache den aktuellen Knoten zum Nachfolgerknoten; Wenn der Nachfolder nicht mehr exist., sind wir beim letzten Knoten angelangt Erstelle ein neues Objekt mit dem Inhalt object2add und keinem Nachfolger

Klasse SinglyLinkedList III public void add (Object object2add) Node actnode = head; while(actnode.getnextnode()!= null) actnode = actnode.getnextnode(); Kopie von Head: actnode head null Node node2add = new Node(object2Add,null); actnode.setnextnode(node2add); Es wird eine Kopie von head Variable erstellt, die auf den Listenanfang zeigt(kein new!): Man kann nun diese Kopie ändern(um die Liste durchlaufen)

Klasse SinglyLinkedList IV public void add (Object object2add) Node actnode = head; actnode while(actnode.getnextnode()!= null) actnode = actnode.getnextnode(); head null Node node2add = new Node(object2Add,null); actnode.setnextnode(node2add); Alle Knoten durchlaufen, bis der auf null zeigt: Wir sind am Listenende!

Klasse SinglyLinkedList V public void add (Object object2add) Node actnode = head; actnode while(actnode.getnextnode()!= null) actnode = actnode.getnextnode(); head null Node node2add = new Node(object2Add,null); node2add null actnode.setnextnode(node2add); Es wird ein neuer Knoten mit den gewünschten erzeugt, der keinen Nachfolder hat

Klasse SinglyLinkedList VI public void add (Object object2add) Node actnode = head; actnode while(actnode.getnextnode()!= null) actnode = actnode.getnextnode(); head Node node2add = new Node(object2Add,null); node2add null actnode.setnextnode(node2add); auf das neue Listenelement setzen

Klasse SinglyLinkedList VII public class SinglyLinkedListTest Neues Objekt erstellen public static void main (String args[]) SinglyLinkedList mylist = new SinglyLinkedList(); mylist.add("peter"); mylist.add("paul"); mylist.add("hava"); Element hinzufügen

Klasse SinglyLinkedList VIII

Darstellung: Doppelt verkettete Liste Knoten head next prev next prev next prev tail Verweis auf nächstes und letztes Objekt der Klasse! public class CdNode private Object content; private CdNode next; private CdNode prev; bel. Inhalt möglich! next prev