Verkettete Listen. KIT Institut für Theoretische Informatik 1

Ähnliche Dokumente
Master Theorem Beispiele

Algorithmen I. Prof. Jörn Müller-Quade Institut für theoretische Informatik Web:

Algorithmen I. Sascha Witt Institut für Theoretische Informatik Web:

Grundlagen der Algorithmen und Datenstrukturen Kapitel 2

3. Übungsblatt zu Algorithmen I im SoSe 2017

Grundlagen: Algorithmen und Datenstrukturen

Verkettete Datenstrukturen: Listen

Übungsklausur Algorithmen I

class ListElement { int value; ListElement next; ListElement() { next=null; value=0;

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

13. Dynamische Datenstrukturen

Algorithmen I. Prof. Jörn Müller-Quade Institut für Theoretische Informatik Web:

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

5. Strukturen und Algorithmen

Suchbäume balancieren

Grundlagen: Algorithmen und Datenstrukturen

Praxis der Programmierung

Stacks, Queues & Bags. Datenstrukturen. Pushdown/Popup Stack. Ferd van Odenhoven. 19. September 2012

Sortierte Folgen 250

Data Structures. Christian Schumacher, Info1 D-MAVT Linked Lists Queues Stacks Exercise

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2)

Algorithmen und Datenstrukturen Musterlösung 5

Doppelt verkettete Listen (1)

3. Übungsblatt zu Algorithmen I im SS 2010

Erinnerung VL

12. Dynamische Datenstrukturen

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

11. Elementare Datenstrukturen

Algorithmen I - Tutorium 28 Nr. 11

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

Algorithmen und Datenstrukturen (für ET/IT)

Advanced Programming in C

Programmieren I. Kapitel 13. Listen

Interface. So werden Interfaces gemacht

ALP II Dynamische Datenmengen

Einstieg in die Informatik mit Java

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

Vorlesung Datenstrukturen

Informatik II, SS 2018

Informatik II, SS 2016

Konkatenation zweier Listen mit concat

8 Elementare Datenstrukturen

Einführung in die Informatik 2

3. Übung Algorithmen I

Erinnerung VL vom

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

6. Verkettete Strukturen: Listen

Gliederung. 5. Compiler. 6. Sortieren und Suchen. 7. Graphen

Stand der Vorlesung. Vergleich verkettete Liste und sequentielle Liste

Technische Universität München

Informatik II, SS 2014

Algorithmen I. Prof. Jörn Müller-Quade Institut für Theoretische Informatik Web:

ALP II Dynamische Datenmengen Datenabstraktion

Einfach verkettete Liste

Algorithmen I. Peter Sanders. Übungen: Veit Batz, Christian Schulz und Jochen Speck. Institut für theoretische Informatik, Algorithmik II Web:

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

Übung Algorithmen und Datenstrukturen

Übung 4: Die generische Klasse AvlBaum in Java 1

ListElement (E i n f o, ListElement<E> prev, ListElement<E> next ) {

Prof. Dr. Uwe Schmidt. 30. Januar 2017

Vorlesung Programmieren

ADT: Verkettete Listen

Algorithmen & Datenstrukturen Midterm Test 2

Erinnerung VL

Andere Arten von Listen. Vorlesung 4

Vorlesung Datenstrukturen

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2017/18. Pro f. Dr. Sán do r Fe k e te

Prüfung Informatik D-MATH/D-PHYS :00 17:00

3 Dynamische Datenstrukturen

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

Algorithmen I. Peter Sanders. Übungen: Timo Bingmann und Christian Schulz. Institut für theoretische Informatik Web:

Denition: Rang eines Elements e einer Folge s = Position von e in sort(s) (angefangen bei 1). Frage: warum ist r nicht notwendig eindeutig?

Algorithmen I. Prof. Jörn Müller-Quade Institut für Theoretische Informatik Web:

Algorithmen und Datenstrukturen

Informatik II Prüfungsvorbereitungskurs

Informatik II, SS 2014

Datenstrukturen und Algorithmen. Vorlesung 8

12.3 Ein Datenmodell für Listen

Konvexe Hülle. Abbildung: [Wikipedia]: Nicht-konvexe Menge (links), konvexe Menge (rechts) KIT Institut für Theoretische Informatik 510

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

2. Übung Algorithmen I

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

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.

Grundlagen der Informatik

Abstrakter Datentyp (ADT): Besteht aus einer Menge von Objekten, sowie Operationen, die auf diesen Objekten wirken.

Algorithmen I. Prof. Peter Sanders Institut für Theoretische Informatik Web:

Geordnete Binärbäume

Lineare Datenstrukturen: Felder, Vektoren, Listen Modelle: math. Folge (a i ) i=1.. mit Basistyp T oder: [T]

Einführung in die Informatik 2

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

Abstrakte Datentypen und Datenstrukturen

1 Abstrakte Datentypen

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

Abgabe: (vor 12 Uhr)

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

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren

Datenstrukturen & Algorithmen

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

4. Algorithmen und Datenstrukturen I Grundlagen der Programmierung 1 (Java)

Transkript:

Verkettete Listen KIT Institut für Theoretische Informatik 1

Listenglieder (Items) Class Handle = Pointer to Item Class Item of Element // one link in a doubly linked list e : Element e next : Handle // prev : Handle invariant next prev = prev next = this Problem: Vorgänger des ersten Listenelements? Nachfolger des letzten Listenelements? KIT Institut für Theoretische Informatik 2

Trick: dummy header + Invariante immer erfüllt + Vermeidung vieler Sonderfälle einfach lesbar schnell testbar elegant Speicherplatz (irrelevant bei langen Listen) KIT Institut für Theoretische Informatik 3

Dummy header Beispiel a, b, c a b c KIT Institut für Theoretische Informatik 4

Die Listenklasse Class List of Element // Item h is the predecessor of the first element // and the successor of the last element. Function head : Handle; return address of h ( ) h= head head // Pos. before any proper element : Item // init to empty sequence // Simple access functions Function isempty : {0, 1}; return h.next = head //? Function rst : Handle; assert isempty; return h.next Function last : Handle; assert isempty; return h.prev. KIT Institut für Theoretische Informatik 5

Procedure splice(a, b, t : Handle)// Cut out a,..., b and insert after t assert b is not before a t a,...,b // Cut out a,...,b a a b b a := a prev b := b next a next := b // b prev := a // // insert a,...,b after t t := t next // t a b t b next := t // a prev := t // t next := a // t prev := b // KIT Institut für Theoretische Informatik 6

Splice Beispiel 1, 2, 3, 4, a b t {}}{{}}{ 5, 6, 7, 8, 9, 10, u, v, w, x, y,z 1, 2, 3, 4, 9, 10, u, v,w,5, 6, 7, 8, x, y,z KIT Institut für Theoretische Informatik 7

Der Rest sind Einzeiler (?) // Moving elements around within a sequence. //...,a, b, c...,a, c,......,a, c...,a, b, c,... Procedure moveafter(b, a : Handle) splice(b, b, a ) // x,...,a, b, c,... b, x,...,a, c,... Procedure movetofront(b : Handle) moveafter(b, head) //...,a, b, c,...,z...,a, c,...,z, b Procedure movetoback(b : Handle) moveafter(b, last) KIT Institut für Theoretische Informatik 8

Oder doch nicht? Speicherverwaltung! naiv / blauäugig /optimistisch: Speicherverwaltung der Programmiersprache potentiell sehr langsam Hier: einmal existierende Variable (z. B. static member in Java) freelist enthält ungenutzte Items. checkfreelist stellt sicher, dass die nicht leer ist. Reale Implementierungen: naiv aber mit guter Speicherverwaltung verfeinerte Freelistkonzepte (klassenübergreifend, Freigabe,... ) anwendungsspezisch, z. B. wenn man weiÿ wieviele Items man insgesamt braucht KIT Institut für Theoretische Informatik 9

Items löschen //...,a, b, c,......,a, c,... Procedure remove(b : Handle) moveafter( b, freelist.head) // a, b, c,... b, c,... Procedure popfront remove(rst) //...,a, b, c...,a, b Procedure popback remove(last) KIT Institut für Theoretische Informatik 10

Elemente einfügen //...,a, b,......,a, e, b,... Function insertafter(x : Element; a : Handle) : Handle checkfreelist // make sure freelist is nonempty. a := freelist.rst // Obtain an item a to hold x, moveafter(a, a) // put it to the right place. a e:= x // and fill it with the right content. return a Function insertbefore(x : Element; b : Handle) : Handle return insertafter(e, b prev) Procedure pushfront(x : Element) insertafter(x, head) Procedure pushback(x : Element) insertafter(x, last) KIT Institut für Theoretische Informatik 11

Ganze (Teil)Listen Manipulieren // ( a,...,b, c,...,d ) ( a,...,b, c,...,d, ) Procedure concat(l : List) splice(l.rst, L.last, last) // a,...,b Procedure makeempty freelist.concat(this )// Das geht in konstanter Zeit unabhängig von der Listenlänge! KIT Institut für Theoretische Informatik 12

Suchen Trick: gesuchtes Element in Dummy-Item schreiben: Function ndnext(x : Element; from : Handle) : Handle h.e = x // Sentinel while from e x do from:= from next return from x Spart Sonderfallbehandlung. Allgemein: ein Wächter-Element (engl. Sentinel) fängt Sonderfälle ab. einfacher, schneller,... KIT Institut für Theoretische Informatik 13

Funktionalität Ezienz Verwalte zusätzliches Member size. Problem: inter-list splice geht nicht mehr in konstanter Zeit Die Moral von der Geschicht: Es gibt nicht DIE Listenimplementierung. KIT Institut für Theoretische Informatik 14

Einfach verkettete Listen... Vergleich mit doppelt verketteten Listen weniger Speicherplatz Platz ist oft auch Zeit eingeschränkter, z. B. kein remove merkwürdige Benutzerschnittstelle, z. B. removeafter KIT Institut für Theoretische Informatik 15

Einfach verkettete Listen Invariante?... Betrachte den Graphen G = (Item, E) mit E = {(u, v) : u Item, v = u.next} u.next zeigt immer auf ein Item u Item : indegree G (u) = 1. Wohldeniert obwohl nicht unbedingt leicht zu testen. Folge: Items bilden Kollektion von Kreisen KIT Institut für Theoretische Informatik 16

Einfach verkettete Listen splice // (...,a, a,...,b, b...,...,t, t,... ) // (...,a, b...,...,t, a,...,b, t,... ) Procedure splice(a,b,t : SHandle) ( a ) ( ) next b next t next b next := a next t next a a b b t t KIT Institut für Theoretische Informatik 17

Einfach verkettete Listen pushback Zeiger auf letztes Item erlaubt Operation pushback... KIT Institut für Theoretische Informatik 18

Listen: Zusammenfassung, Verallgemeinerungen Zeiger zwischen Items ermöglichen exible, dynamische Datenstrukturen später: Bäume, Prioritätslisten (einfache) Datenstrukturinvarianten sind Schlüssel zu einfachen, ezienten Datenstrukturen Dummy-Elemente, Wächter,... erlauben Einsparung von Sonderfällen Einsparung von Sonderfällen machen Programme, einfacher, lesbarer, testbarer und schneller KIT Institut für Theoretische Informatik 19