DVG2 - 03 - Verkettete Listen Verkettete Listen. DVG2 - 03 - Verkettete Listen 2 Primitive Datentypen Vorteile: –werden direkt vom Prozessor unterstützt.

Slides:



Advertisements
Ähnliche Präsentationen
Collision Detection in Java3D Hristo Matev WS 02/03.
Advertisements

Klassen - Verkettete Liste -
DVG Einfache Klassen Einfache Klassen. DVG Einfache Klassen 2 Strukturen Beispiel: Personendaten bestehen aus –String name –String vorname.
Anwendungen des OODM auf die ADB / NDB
PKJ 2005/1 Stefan Dissmann Vorwoche - Klasse public class Studierende { private String name, vorname, studiengang; private int matNr, semester; private.
Kapitel 3: Listen Lineare Liste: endliche Folge von Elementen eines Grundtyps (n>=0), leere Liste falls n=0 Listenelemente besitzen.
Datenstrukturen Look-Up Tabellen, Zufallszahlen, Listen, Speichermanagement und Dateiverwaltung.
Objektrelationales Mapping mit JPA Entity Mapping Jonas Bandi Simon Martinelli.
Gliederung Motivation / Grundlagen Sortierverfahren
Binäre Bäume Richard Göbel.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Listen Richard Göbel.
Indirekte Adressierung
Java: Referenzen und Zeichenketten
Java: Grundlagen der Objektorientierung
Polymorphie (Vielgestaltigkeit)
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (07 - Skiplisten) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
M a r c – o l i v e r p a h l Die ObjektOrientierte Mühle Das Beispiel soll noch einmal das Konzept der Objektorientiertheit erläutern. Dabei werden außerdem.

Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Listen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
Die Methode public Knoten einfuegenVor (Datenelement dNeu, Datenelement dVergleich) public Knoten einfuegenVor(Datenelement dNeu, Datenelement dVergleich){
Packages Vortrag : Cornelia Hardt 23. November 1999.
DVG Interfaces. DVG mehrfache Vererbung 4 Mehrfache Vererbung ist die Ableitung einer Klassen von mehreren anderen Klassen. –farbigerPunkt.
DVG Klassen und Objekte
DVG Einfache Klassen 1 Einfache Klassen. 2DVG Einfache KlassenStrukturen Beispiel: Personendaten bestehen aus String name String name.
Einführung in die Programmierung Datensammlung
Informatikunterricht mit Java
© 2002 Dr. Cavelius - Ley - Pohlig - Taulien Programmierung im Netz und Internet: Einführung in die Programmiersprache Java Teil I 1 Klassen Objekte von.
Seite 1 Interface - Konzept Ein Interface führt einen neuen Datentyp ein: interface Frau {... } Das Interface enthält Deklarationen ( keine Definitionen.
Einfach verkettete Listen
Einfach verkettete Listen (OOP)
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
OO implementieren Teil IV Objekte erzeugen. © René ProbstModul 226IV - 2 Von der Klasse zum Objekt Plan Bau Objekt Klasse Instanzierung Objekt Das Objekt.
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Entity Mapping Persistente Domänenmodelle mit JPA 2.0 und Bean Validation.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Algorithmen und Datenstrukturen Übungsmodul 6
1.5 Das Entwurfsmuster Kompositum
Equals, Hashcode und CompareTo Micha Kessler
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Thomas Hilpold: Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Grundlagen der Algorithmen und Datenstrukturen Kapitel
Beispielanwendung von Java Threads
Java-Kurs - 8. Übung Besprechung der Hausaufgabe.
2 Datenabstraktion Geheimnisprinzip:
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
M a r c – o l i v e r p a h l Informatik II – Kapitel 12 „Sortier-Algorithmen“ Zusammenfassung des Kapitel 12 Küchlin, Weber, Einführung in die Informatik,
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
1 // Verkettete Liste 2 // demonstriert verkettete Listen und // Rekursion // (Einfügen am "Fuß") // #include struct Liste { int Element; Liste *weiter;
Java Programme nur ein bisschen objektorientiert.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Objektorientierung Gliederung von Daten und Funktionen zu Objekten
verkettete Strukturen
Felder in der Informatik
Grundkurs Informatik 11-13
1. Die rekursive Datenstruktur Liste 1
 Präsentation transkript:

DVG Verkettete Listen Verkettete Listen

DVG Verkettete Listen 2 Primitive Datentypen Vorteile: –werden direkt vom Prozessor unterstützt –schneller Zugriff –schnelle Verarbeitung Nachteile: –kleine Datenmenge –feste Struktur –unflexibel

DVG Verkettete Listen 3 Objekte Zusammenfassung einfacher Objekte bzw. primitiver Daten zu komplexen Datentypen Vorteile: –flexibel, da beliebige Strukturen definiert werden können –schneller Zugriff, da Adressen der Komponenten vom Compiler berechnet werden können Nachteile: –relativ kleine Datenmenge –feste Datenmenge

DVG Verkettete Listen 4 Felder Zusammenfassung einer beliebigen aber festen Anzahl von Elementen gleichen Typs (primitive Datentypen oder Referenzen) Vorteile: –einfache Handhabung –große Datenmenge –alle Elemente werden zusammenhängend gespeichert –schneller Zugriff : Addr[i]=Addr[0]+ i*Elementlänge –Feldelement können Referenzen auf beliebige Objekte sein Nachteile: –feste Datenmenge –Feldelemente können nicht hinzugefügt bzw. entfernt werden

DVG Verkettete Listen 5 Listen Ziele: –Zusammenfassung verschiedener Objekte –flexible Datenstruktur –einfaches Einfügen, Hinzufügen, Entfernen und Umsortieren von Elementen –einfacher Zugriff für den Nutzer Eigenschaften: –Elemente können nicht zusammenhängend gespeichert werden –Auf Elemente kann nicht über einen Index zugegriffen werden. –Es ist keine schnelle Berechnung der Adressen möglich

DVG Verkettete Listen 6 Organisation von Listen nextDatennextDatennextDatennullDatennextDatenfirstactuallast

DVG Verkettete Listen 7 Listenelemente Listenelement besteht aus –Referenz auf Daten –Verkettungsinformation (Referenz auf das nächste Element) Definition des Listenelements enthält das interne Wissen über die Struktur der Liste. Dieses sollte nicht allgemein zugänglich sein. ==> interne private Klasse, private Attribute private class ListenElement { private Object data = null; private ListenElement nextElement = null; private ListenElement(Object data, ListenElement nextElement) { this.data=data; this.nextElement=nextElement; }

DVG Verkettete Listen 8 private void setNext (ListenElement nextElement) { this.nextElement=nextElement; } private Object getData() { return data; } private ListenElement getNext() { return nextElement; } }

DVG Verkettete Listen 9 Attribute Interne Referenzen private ListenElement firstElement = null; private ListenElement lastElement = null; private ListenElement actualElement = null; Interne Zähler speichert die Anzahl der Elemente der Liste private int numberOfElements = 0;

DVG Verkettete Listen 10 Listenelemente hinzufügen nextDatennextDaten nextDaten nextDaten nextDaten nullDaten first actual last firstElement= new ListenElement (data,firstElement)

DVG Verkettete Listen 11 nextDatennextDaten nextDaten nextDaten nextDaten nullDaten first actual last at.setNext( new ListenElement( data,at.getNext()) )

DVG Verkettete Listen 12 Einfügen eines Listenelementes nach einem vorgegebenen Wenn at==null ist, wird das Listenelement am Anfang der Liste eingefügt. private void insertAt(ListenElement at, Object data) { if (at==null) { firstElement=new ListenElement(data,firstElement); if (lastElement==null) lastElement=firstElement; } else { at.setNext(new ListenElement(data,at.getNext())); if (lastElement==at) lastElement=at.getNext(); } numberOfElements++; }

DVG Verkettete Listen 13 Die Methode insertAt benutzt internes Wissen: –ListenElement Methode ist private Zur Nutzung durch den Anwender werden Methoden angeboten, die dieses Wissen nicht benötigen. public void insertFirst(Object data) { insertAt(null, data); } public void insert(Object data) { insertAt(actualElement, data); } public void append(Object data) { insertAt(lastElement, data); }

DVG Verkettete Listen 14 public void insertBefore(Object data) { if ( (actualElement == null) || (actualElement == firstElement) ) { insertAt(null, data); return; } ListenElement le = firstElement; while ( le.getNext() != actualElement) le=le.getNext(); insertAt(le, data); }

DVG Verkettete Listen 15 Mehrere Listenelemente hinzufügen public void insertFirst(Object [] data) { if (data==null) return; insertAt(null,data[0]); ListenElement le = firstElement; for (int i=1;i<data.length;i++) { insertAt(le, data[i]); le=le.getNext(); } }

DVG Verkettete Listen 16 public void insert(Object [] data) { if (data==null) return; ListenElement le = actualElement; for (int i=0;i<data.length;i++) { insertAt(le, data[i]); le=le.getNext(); } } public void append(Object [] data) { if (data != null) for (int i=0;i<data.length;i++) append(data[i]); }

DVG Verkettete Listen 17 public void insertBefore(Object [] data) { if (data==null) return; if ( (actualElement == null) || (actualElement == firstElement) ) { insertFirst(data); return; } ListenElement le = firstElement; while ( le.getNext() != actualElement) le=le.getNext(); for (int i=0;i<data.length;i++) { insertAt(le, data[i]); le=le.getNext(); } }

DVG Verkettete Listen 18 Konstruktoren Leerer Konstruktor erzeugt eine leere Liste public Liste() { } Konstruktor mit einem Datenobjekt erzeugt Liste mit einem Element public Liste(Object data) { append(data); }

DVG Verkettete Listen 19 Konstruktor mit mehreren Daten erzeugt Liste mit mehreren Elementen public Liste(Object [] data) { append(data); }

DVG Verkettete Listen 20 Beispiel Liste l = new Liste("Element 0"); String [] s = {"Element 1","Element 2","Element 3","Element 4"}; l.append(s); l.append("Element 5"); System.out.println("first = "+ (String)l.getFirst()); System.out.println("last = "+ (String)l.getLast()); String element; l.reset(); while ( (element=(String)l.getNext()) != null) { System.out. println(element); }

DVG Verkettete Listen 21 Daten lesen Lesen des ersten Listenelements: getFirst Lesen des letzten Listenelements: getLast getLast und getFirst modifizieren nicht die Referenz auf das aktuelle Element Lesen des aktuellen Elementes: getNext getNext positioniert vor dem Lesen der Daten auf das nach dem aktuellen Element liegende Element, d.h. actualElement zeigt auf das zuletzt gelesene Listenelement toArray gibt alle Elemente der Liste als Array von Objekten aus toString gibt eine Zeichenkette aus, die toString von jedem Objekt der Liste enthält length gibt die Anzahl der Listenelemente aus

DVG Verkettete Listen 22 public Object getFirst() { if ( firstElement == null ) return null; return firstElement.getData(); } public Object getLast() { if ( lastElement == null ) return null; return lastElement.getData(); } public void reset() { actualElement = null; } public Object getNext() { if (actualElement==null) actualElement = firstElement; else actualElement = actualElement.getNext(); if (actualElement==null) return null; return actualElement.getData(); }

DVG Verkettete Listen 23 public Object [] toArray() { Object [] data = new Object [numberOfElements]; ListenElement l = firstElement; for (int i=0;i<numberOfElements;i++) { data[i]=l.getData(); l=l.getNext(); } return data; }

DVG Verkettete Listen 24 public String toString() { String s = "Liste={"; ListenElement le = firstElement; while (le != null) { s+=le.getData(); le=le.getNext(); if (le!=null) s+=";"; } s+="}"; return s; } public int length() { return numberOfElements; }

DVG Verkettete Listen 25 Beispiel Liste l = new Liste("Element 0"); String [] s = {"Element 1","Element 2","Element 3","Element 4"}; l.append(s); l.append("Element 5"); System.out.println("first = "+ (String)l.getFirst()); System.out.println("last = "+ (String)l.getLast()); System.out.println( "Anzahl der Listenelemente = "+l.length()+ "\nInhalt der Liste\n"+l); Object [] o = l.toArray(); for (int i=0;i<o.length;i++)System.out.println(o[i]);

DVG Verkettete Listen 26 Entfernen von Listenelementen nextDaten nextDaten nextDaten nextDaten nullDaten first actual last

DVG Verkettete Listen 27 nextDaten nextDaten nextDaten nextDaten nullDaten first actual last

DVG Verkettete Listen 28 private void removeAt(ListenElement at) { if (at==null) return; if (at==firstElement) { if (at==actualElement) actualElement=null; firstElement=firstElement.getNext(); if (firstElement==null) lastElement=null; } else { ListenElement prev = firstElement; while (prev.getNext() != at) prev=prev.getNext(); if (at==actualElement) actualElement=prev; if (at==lastElement) lastElement=prev; prev.setNext(at.getNext()); } numberOfElements--; }

DVG Verkettete Listen 29 Wie beim Hinzufügen von Listenelementen wird Methode removeAt als private definiert. Dem Anwender werden spezialisierte Methode angeboten. public void remove() { removeAt(actualElement); } public void removeFirst() { removeAt(firstElement); } public void removeLast() { removeAt(lastElement); } public void removeTail() { removeAt(actualElement); if (actualElement != null) while (actualElement.getNext()!=null) removeAt(actualElement.getNext()); }

DVG Verkettete Listen 30 Beispiel l.removeFirst(); System.out.println("Liste nach Entfernung des ersten Elements"); System.out.println("Anzahl der Listenelemente = "+ l.length()+"\nInhalt der Liste\n"+l); l.removeLast(); System.out.println ("Liste nach Entfernung des letzten Elements"); System.out.println("Anzahl der Listenelemente = "+ l.length()+"\nInhalt der Liste\n"+l); l.reset();l.getNext();l.getNext();l.getNext(); l.remove(); System.out.println ("Liste nach Entfernung des dritten Elements"); System.out.println("Anzahl der Listenelemente = "+ l.length()+"\nInhalt der Liste\n"+l); l.reset();l.getNext();l.getNext(); l.removeTail(); System.out.println ("Liste nach Entfernung des Restes der Liste ab dem zweiten "+ "Element"); System.out.println("Anzahl der Listenelemente = "+ l.length()+"\nInhalt der Liste\n"+l);

DVG Verkettete Listen 31 doppelt verkettete Listen nextprev nextnull nextprev nullprev nextprev first actual last Daten

DVG Verkettete Listen 32 zyklisch verkettete Listen next first actual last Daten

DVG Verkettete Listen 33 doppelt zyklisch verkettete Listen nextprev nextprev nextprev nextprev nextprev first actual last Daten