Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "DVG2 - 03 - Verkettete Listen Verkettete Listen. DVG2 - 03 - Verkettete Listen 2 Primitive Datentypen Vorteile: –werden direkt vom Prozessor unterstützt."—  Präsentation transkript:

1 DVG2 - 03 - Verkettete Listen Verkettete Listen

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

3 DVG2 - 03 - 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

4 DVG2 - 03 - 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

5 DVG2 - 03 - 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

6 DVG2 - 03 - Verkettete Listen 6 Organisation von Listen nextDatennextDatennextDatennullDatennextDatenfirstactuallast

7 DVG2 - 03 - 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; }

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

9 DVG2 - 03 - 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;

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

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

12 DVG2 - 03 - 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++; }

13 DVG2 - 03 - 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); }

14 DVG2 - 03 - 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); }

15 DVG2 - 03 - 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(); } }

16 DVG2 - 03 - 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]); }

17 DVG2 - 03 - 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(); } }

18 DVG2 - 03 - 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); }

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

20 DVG2 - 03 - 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); }

21 DVG2 - 03 - 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

22 DVG2 - 03 - 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(); }

23 DVG2 - 03 - 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; }

24 DVG2 - 03 - 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; }

25 DVG2 - 03 - 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]);

26 DVG2 - 03 - Verkettete Listen 26 Entfernen von Listenelementen nextDaten nextDaten nextDaten nextDaten nullDaten first actual last

27 DVG2 - 03 - Verkettete Listen 27 nextDaten nextDaten nextDaten nextDaten nullDaten first actual last

28 DVG2 - 03 - 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--; }

29 DVG2 - 03 - 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()); }

30 DVG2 - 03 - 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);

31 DVG2 - 03 - Verkettete Listen 31 doppelt verkettete Listen nextprev nextnull nextprev nullprev nextprev first actual last Daten

32 DVG2 - 03 - Verkettete Listen 32 zyklisch verkettete Listen next first actual last Daten

33 DVG2 - 03 - Verkettete Listen 33 doppelt zyklisch verkettete Listen nextprev nextprev nextprev nextprev nextprev first actual last Daten


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

Ähnliche Präsentationen


Google-Anzeigen