Vorlesung Programmieren

Größe: px
Ab Seite anzeigen:

Download "Vorlesung Programmieren"

Transkript

1 Vorlesung Programmieren 7. Listen und Abstrakte Datentypen Prof. Dr. Ralf H. Reussner Version 1.0 LEHRSTUHL FÜR SOFTWARE-DESIGN UND QUALITÄT (SDQ) INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION (IPD), FAKULTÄT FÜR INFORMATIK sdq.ipd.kit.edu KIT Universität des Landes Baden-Württemberg und nationales Forschungszentrum in der Helmholtz-Gemeinschaft

2 Rekursive Datentypen Wir haben bisher Arrays verwendet, um Folgen von Elementen (Kollektionen) zu implementieren. Mit uns bereits bekannten Mitteln lassen sich Kollektionen auch auf andere Weise implementieren: als rekursiver Datentyp Rekursiver Datentyp: Objekte einer Klasse enthalten Verweise auf Objekte derselben Klasse. Beispiel: class Recursive { private int element; private Recursive next;... class Tree { private int element; private Tree leftsubtree; private Tree rightsubtree;... 2

3 Einfach verkettete Listen Idee Eine (einfach) verkettete Liste besteht aus Zellen, wobei jede Zelle 1. das eigentliche Listenelement (den Inhalt der Zelle) und 2. eine Referenz auf die Zelle des nächsten Listenelements (Verkettung) enthält. Die Verkettung der letzten Listenzelle verweist auf null, um das Ende der Liste zu kennzeichnen. Grafische Darstellung: Inhalt Verkettung null Listenende 3

4 Einfach verkettete Listen in Java Wir betrachten zunächst Listen von Vector2D-Objekten. Listenzellen in Java: class ListCell { private Vector2D content; private ListCell next; public ListCell(Vector2D p, ListCell n) { this.content = p; this.next = n; Listen in Java: class List { private ListCell head; public List() {... head = null; // erzeugt leere Liste 4

5 Erstellung einer Liste Um nun eine Liste aufzubauen, müssen die ListCell-Objekte erzeugt werden: p q r Vector2D p = new Vector2D(), q = new Vector2D(), r = new Vector2D(); ListCell cell3 = new ListCell(r, null); //r ist letzter Vector2D der Liste ListCell cell2 = new ListCell(q, cell3);//q vor r in der Liste ListCell cell1 = new ListCell(p, cell2);//p ist erstes Element, vor q Falls nur die Referenz auf das erste Element direkt benötigt wird: ListCell c = new ListCell(p, new ListCell(q, new ListCell(r, null))); Mit der Referenz auf die erste Listenzelle hat man Zugriff auf die gesamte Liste (über das next-attribut der Klasse ListCell) 5

6 Operationen auf Listen Einfügen von Listenelementen am Beginn der Liste am Ende der Liste Löschen von Listenelementen Suche nach Elementen class Vector2DList { private class ListCell { Vector2D content; ListCell next; ListCell(Vector2D p, ListCell n) { this.content = p; this.next = n; private ListCell head; public Vector2DList() { this.head = null; // empty list public void addfirst(vector2d p) {... public void addlast(vector2d p) {... public void remove(vector2d p) {... public boolean contains(vector2d p) {... 6

7 Einfügen von Listenelementen: addfirst Beispiel: vorher: Implementierung: q head r public void addfirst(vector2d p) { ListCell newhead = new ListCell(p, this.head); this.head = newhead; nach addfirst(p): head p q r 7

8 Einfügen von Listenelementen: addlast Beispiel: vorher: head q r nach addlast(p): head q r p Implementierung: public Zum Listenende void addlast(vector2d gehen: p) { // add to empty list if ListCell (this.head c = this.head; == null) { while // addfirst(p) (c.next!= null) { this.head c = c.next; = new ListCell(p, null); return; // now c.next == null, and we // add can to insert non-empty a new list cell ListCell c = this.head; while c.next (c.next = new ListCell(p,!= null) { null); c = c.next; // now c.next == null Problem: c.next = leere new ListCell(p, Liste null); 8

9 Löschen von Listenelementen: remove Beispiel: vorher: head q r p nach remove(r): head q p Korrekte Implementierung: Implementierung: // remove(vector2d r) removes // all list elements, whose // content is the same object // reference as r. // Zu remove(vector2d klären: r) removes // all list elements, whose 1. Was soll passieren, wenn r // content is the same object ListCell mehrfach c = this.head; in der Liste vorkommt? // reference as r. 2. // remove Wann ist head element(s) r gleich einem public while (c Listenelement? void!= null remove(vector2d && c.content == r) Bei Gleichheit r) { { // this.head empty = list c = c.next; der Objektreferenzen oder bei if (this.head == null) { gleichen Objektattributen? // empty return; list? // nothing to do if (c == null) { return; // nothing more to do ListCell c = this.head; Spezifikation: while (c.next!= null) { // traverse void if remove(vector2d (c.next.content list r) == r) { while (c.next!= null) { löscht if (c.next.content // aus found! der Liste now, == r) remove sämtliche { it Listenelemente, // c.next found! now, = c.next.next; remove deren it Inhalt c.next dieselbe = c.next.next; else { Objektreferenz ist wie r. = c.next; c = c.next; public void remove(vector2d r) { Was passiert, wenn wir das erste oder letzte Listenelement löschen? 9 9

10 Suche nach Listenelementen: contains Beispiel: q head p Implementierung: // contains(vector2d p) returns // true if and only if the list // contains an element, whose // content is the same object // reference as p. Vector2DList l =... (Liste wie oben)... boolean b = l.contains(r); // b ist false boolean c = l.contains(p); // c ist true public boolean contains(vector2d p) { for (ListCell c = head; c!= null; c = c.next) { if (c.content == p) { return true; return false; 10

11 Listen als abstrakter Datentyp (ADT) Prinzip Geheimnisprinzip Wenn wir eine Liste nur als solche verwenden wollen, interessiert uns der interne Aufbau der Liste eigentlich gar nicht Deswegen: Erstelle eine abstrakte Sicht auf die Liste, welche die Implementierungsdetails komplett vor dem Nutzer verbirgt Realisierung Gewähre den Zugriff auf den Inhalt der Liste nur über eine definierte Schnittstelle Ein Abstrakter Datentyp (ADT) ist eine Menge von Typen eine Menge von Signaturen (d.h. Funktionen mit Rückgabewertstyp und Parametertypen eine Menge von Axiomen (d.h. Einschränkungen auf den Funktionen) 11

12 Listen als ADT Realisierung class Vector2DList { public Vector2DList()... // Konstruktor (leere Liste) public void addfirst(vector2d p)... // Element am Anfang einfügen public void addlast(vector2d p)... // Element am Ende einfügen public void remove(vector2d p)... // Element löschen public boolean contains(vector2d p)... // Element suchen public int size()... public boolean isempty() // Länge der Liste // Liste leer? 12

13 Iteratoren Die Listen-Schnittstelle bietet bisher nur wenige Möglichkeiten, mit der Liste zu arbeiten Typisches Gebrauchsmuster : Gehe über die Liste und führe für jedes Element eine Arbeit durch Beispiel Arrays: for (int i = 0; i < a.length; i++) { dowork(a[i]); Wie lässt sich dies verallgemeinern? Abstraktes Konzept Iterator Definition Iterator: Ein Iterator bezeichnet einen Zeiger (cursor), mit dem über die Elemente einer Kollektion gewandert (iteriert) werden kann. 13

14 Iteratoren Am Beispiel der Klasse Vector2DList Schnittstelle: class Vector2DList { public class Iterator { public boolean hasnext(); public Vector2D next(); public Iterator iterator(); // Gibt es ein weiteres Element? // Gebe aktuelles Element zurück und // bewege Zeiger auf das nächste weiter // Erzeugt neuen Iterator der Liste Iterator implementiert als geschachtelte Klasse (nested class; mehr dazu später in der Vorlesung) Verwendung: Vector2DList l = createlist(); Vector2DList.Iterator it = l.iterator(); while (it.hasnext()) { Vector2D v = it.next(); dowork(v); 14

15 Implementierung Iterator für Vector2DList class Vector2DList {... public class Iterator { // geschachtelte Klasse innerhalb // der Vector2DList-Klasse private ListCell cursor; // cursor, Zeiger private Iterator(ListCell start) { // privater Konstruktor; kann nur this.cursor = start; // von Iterator- und Vector2DList- // Klasse aus aufgerufen werden public boolean hasnext() { return (this.cursor!= null); public Vector2D next() { Vector2D currentcontent = this.cursor.content; this.cursor = this.cursor.next; return currentcontent; public Iterator iterator() { return new Iterator(this.head);... 15

16 Exkurs: Command / Query-Separation A methodcan either inspect / query the component state (getters), or transform the state of the component but not both Reason: several calls to a method should return the same result. Taken from Bertrand Meyer, Object Oriented Software Construction, 2 nd Ed Ralf Reussner - CBSE: Design of Components

17 Exkurs: Command / Query-Separation (2) Drawback: more method invocations Violations: the iterator-pattern implementations in java and C# Java while (i.hasnext()) { Object ele = i.next(); boolean hasnext(): query Object next(): query and command C# while (i.movenext()) { Object ele = i.current(); boolean MoveNext(): query and command Object Current(): query Note that iterator (IEnumerator) points to invalid element after creation. 17 Ralf Reussner - CBSE: Design of Components

18 Exkurs: Command / Query-Separation (3) An elegant iterator(?) New Java while (i.iscurrentvalid()) { Object ele = i.current(); // no switch to next element i.movenext(); boolean iscurrentvalid(): query Object current(): query void movenext(): command (what is in case of last element?) 18 Ralf Reussner - CBSE: Design of Components

19 Gesamtstruktur Listenimplementierung in Java 19 class Vector2DList { private class ListCell {... // Detail der Implementierung, // vor dem Benutzer verborgen private ListCell head; // Attribut: Start der Liste public Vector2DList()... // Konstruktor (leere Liste) public void addfirst(vector2d p)... // Element am Anfang einfügen public void addlast(vector2d p)... // Element am Ende einfügen public void remove(vector2d p)... // Element löschen public boolean contains(vector2d p)... // Element suchen public int size()... public boolean isempty() public Iterator iterator()... public class Iterator { public boolean hasnext()... public Vector2D next()... // Länge der Liste // Liste leer? // Iterator, um über Listen- // elemente zu laufen

20 Verwendung der Listenimplementierung Beispiel: Generierung einer Liste mit 3 Elementen und Ausgabe der Liste class Vector2DListTest { public static void main(string[] args) { Vector2D p = new Vector(1.0, 2.0); Vector2D q = new Vector(0.0, -1.0); Vector2D r = new Vector(5.5, 7.7); Vector2DList list = new Vector2DList(); list.addfirst(r); list.addfirst(q); list.addfirst(p); Vector2DList.Iterator it = list.iterator(); while (it.hasnext()) { Vector2D v = it.next(); System.out.println(v); 20

21 Vergleich Listen Arrays Vorteile Arrays: Einfacher Zugriff auf die Elemente Handhabung und Syntax sind relativ intuitiv Unterstützung durch Java-API Nachteile Arrays: Die Länge eines Arrays muss bei der Initialisierung angegeben werden und kann später nicht mehr verändert werden Dynamisch wachsende oder schrumpfende Listen nur schwer mit Arrays zu implementieren Umstrukturierung des Arrays (z.b. Einfügen oder Löschen von Elementen) ist immer mit großem Kopieraufwand verbunden Oft ist ein direkter Zugriff auf die inneren Elemente gar nicht nötig (z.b. Warteschlange) 21

22 Mehr Flexibilität: doppelt verkettete Listen Einfach verkettete Listen haben einen Nachteil: man kann sie nur von vorne nach hinten durchlaufen, nicht aber rückwärts gehen Doppelt verkettete Listen Doppelt verkettete Listen (doubly linked lists): neben der Vorwärtsverkettung gibt es noch eine Rückwärtsverkettung Grafische Darstellung: first last Vorwärtsverkettung Rückwertsverkettung

23 Implementierung doppelt verkettete Liste class Vector2DDoublyLinkedList { private class ListCell { Vector2D content; ListCell prev; ListCell next; // Vorgänger // Nachfolger ListCell(Vector2D v, ListCell p, ListCell n) { this.content = v; this.prev = p; this.next = n; private ListCell first, last; public Vector2DDoublyLinkedList() { this.first = this.last = null; public void addfirst(vector2d p) {... public void addlast(vector2d p) {... public void remove(vector2d p) {... public boolean contains(vector2d p) {... // leere Liste 23

24 Einfügen von Listenelementen: addlast Implementierung: public void addlast(vector2d v) { ListCell newlistcell = new ListCell(v, last, null); if (first == null) { // add to empty list first = newlistcell; else { last.next = newlistcell; last = newlistcell; last last v 24

25 Verwendung von Listen: Gerichtete Graphen Graph: Adjazenzlisten: 0: 1 3 3: 1: 2 3 4: 5 class Vertex { private int content; private VertexList successors;... class VertexList { // singly/doubly linked list of vertices... class DirectedGraph { private VertexList vertices;... 2: 5: 4 25

26 Zusammenfassung Listen bestehen aus verketteten Listenelementen und sind ein rekursiver Datentyp Die Länge einer Liste ist nicht im Voraus festgelegt, sondern kann sich dynamisch ändern Implementierung in Java: Listenzellen (unser Beispiel: ListCell) enthalten Attribute für Inhalt (content) und Verkettung (next / prev) Die nach außen sichtbare Listenklasse (unser Beispiel: Vector2DList) enthält eine Referenz auf den Listenstart (bei doppelt verketteten Listen auch das Listenende) und Methoden zur Erstellung und Modifikation von Listen Die Implementierung der Listenzellen ist nach außen nicht sichtbar! Die Listenklasse kann als abstrakter Datentyp aufgefasst werden Iteratoren sind abstrakte Zeiger auf Listenelemente und erlauben über die Listenelemente zu wandern 26

Programmieren I. Kapitel 13. Listen

Programmieren I. Kapitel 13. Listen Programmieren I Kapitel 13. Listen Kapitel 13: Listen Ziel: eigene Datenstrukturen erstellen können und eine wichtige vordefinierte Datenstruktur( familie) kennenlernen zusammengehörige Elemente zusammenfassen

Mehr

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 16/17. Kapitel 13. Listen. Listen 1 Kapitel 13 Listen Listen 1 Ziele Implementierungen für Listen kennenlernen Einfach verkettete und doppelt verkettete Listen verstehen Listen-Implementierungen in der Java-Bibliothek kennenlernen Durch

Mehr

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

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1 Kapitel 12 Listen Listen 1 Ziele Implementierungen für Listen kennenlernen Einfach verkettete und doppelt verkettete Listen verstehen Listen-Implementierungen in der Java-Bibliothek kennenlernen Durch

Mehr

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

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

Mehr

Listen. Prof. Dr. Christian Böhm. in Zusammenarbeit mit Gefei Zhang. WS 07/08

Listen. Prof. Dr. Christian Böhm. in Zusammenarbeit mit Gefei Zhang.  WS 07/08 Listen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang http://www.dbs.ini.lmu.de/lehre/nfinfosw WS 07/08 2 Ziele Standardimplementierungen für Listen kennenlernen Listeniteratoren verstehen

Mehr

16. Dynamische Datenstrukturen

16. Dynamische Datenstrukturen Datenstrukturen 6. Dynamische Datenstrukturen Eine Datenstruktur organisiert Daten so in einem Computer, dass man sie effizient nutzen kann. Verkettete Listen, Abstrakte Datentypen Stapel, Warteschlange

Mehr

13. Dynamische Datenstrukturen

13. Dynamische Datenstrukturen Motivation: Stapel. Dynamische Datenstrukturen Verkettete Listen, Abstrakte Datentypen Stapel, Warteschlange, Sortierte Liste 40 40 Motivation: Stapel ( push, pop, top, empty ) Wir brauchen einen neuen

Mehr

ADT: Verkettete Listen

ADT: Verkettete Listen 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

Mehr

Kapitel 5: Iterierbare Container

Kapitel 5: Iterierbare Container Kapitel 5: Iterierbare Container Foreach-Schleife Interface Iterator Interface Iterable Iterator-Schleife und Foreach-Schleife Generische Liste mit Iteratoren Prof. Dr. O. Bittel, HTWG Konstanz Programmiertechnik

Mehr

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

Einführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen. Sebastian Küpper Einführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen Sebastian Küpper Unzulänglichkeit von Feldern Wenn ein Unternehmen alle Rechnungen eines Jahres verwalten möchte,

Mehr

Nachtrag: Vergleich der Implementierungen von Stack

Nachtrag: Vergleich der Implementierungen von Stack Nachtrag: Vergleich der Implementierungen von Stack In der letzten Vorlesung hatten wir zwei Implementierung der Klasse Stack: eine Implementierung als Liste (Array): liststack eine Implementierung als

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 15 Einstieg in die Informatik mit Java Collections Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 15 1 Überblick Collections 2 Hierarchie von Collections 3 Verwendung

Mehr

ADT: Verkettete Listen

ADT: Verkettete Listen 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

Mehr

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

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen Schwerpunkte 7. Verkettete Strukturen: Listen Java-Beispiele: IntList.java List.java Stack1.java Vergleich: Arrays verkettete Listen Listenarten Implementation: - Pascal (C, C++): über Datenstrukturen

Mehr

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2)

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2) ALP II Dynamische Datenmengen Datenabstraktion (Teil 2) O1 O2 O3 O4 SS 2012 Prof. Dr. Margarita Esponda 49 Einfach verkettete Listen O1 O2 O3 50 Einführung Einfach verkettete Listen sind die einfachsten

Mehr

JAVA KURS COLLECTION

JAVA KURS COLLECTION JAVA KURS COLLECTION COLLECTIONS Christa Schneider 2 COLLECTION Enthält als Basis-Interface grundlegende Methoden zur Arbeit mit Collections Methode int size() boolean isempty() boolean contains (Object)

Mehr

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

Gliederung. 5. Compiler. 6. Sortieren und Suchen. 7. Graphen Gliederung 5. Compiler 1. Struktur eines Compilers 2. Syntaxanalyse durch rekursiven Abstieg 3. Ausnahmebehandlung 4. Arrays und Strings 6. Sortieren und Suchen 1. Grundlegende Datenstrukturen 2. Bäume

Mehr

5.3 Doppelt verkettete Listen

5.3 Doppelt verkettete Listen 5.3 Doppelt verkettete Listen Einfach verkettete Listen unterstützen das Einfügen und Löschen am Anfang in konstanter Zeit; für das Einfügen und Löschen am Ende benötigen sie jedoch lineare Laufzeit Doppelt

Mehr

Konkatenation zweier Listen mit concat

Konkatenation zweier Listen mit concat Ein Datenmodell für Listen Konkatenation zweier Listen mit concat Was ist an der Konkatenation etwas unschön? Man muss die vordere Liste einmal durchgehen, um den letzten Nachfolger (urspr. null zu erhalten,

Mehr

Abschnitt 10: Datenstrukturen

Abschnitt 10: Datenstrukturen Abschnitt 10: Datenstrukturen 10. Datenstrukturen 10.1Einleitung 10.2 Peer Kröger (LMU München) Einführung in die Programmierung WS 16/17 829 / 867 Einleitung Überblick 10. Datenstrukturen 10.1Einleitung

Mehr

Übungsblatt 10. Thema: Abstrakte Datentypen, Datenstrukturen in Java

Übungsblatt 10. Thema: Abstrakte Datentypen, Datenstrukturen in Java Informatik I WS 05/06 Prof. Dr. W. May Dipl.-Inform. Oliver Fritzen Dipl.-Inform. Christian Kubczak Übungsblatt 10 Ausgegeben am: Abgabe bis: 13.01.2006 24.1.2006 (Theorie) 27.1.2006 (Praktisch) Thema:

Mehr

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

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 17/18. Kapitel 14. Bäume. Bäume 1 Kapitel 14 Bäume Bäume 1 Ziele Den Begriff des Baums in der Informatik kennenlernen Bäume als verkettete Datenstruktur repräsentieren können Rekursive Funktionen auf Bäumen verstehen und schreiben können

Mehr

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

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 14. Bäume. Bäume 1 Kapitel 14 Bäume Bäume 1 Ziele Den Begriff des Baums in der Informatik kennenlernen Bäume als verkettete Datenstruktur repräsentieren können Rekursive Funktionen auf Bäumen verstehen und schreiben können

Mehr

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

Verkettete Listen. Implementierung von einfach verketteten Listen. Implementierung von doppelt verketteten Listen Verkettete Listen Verwendung von Listen in Java Das Prinzip des Iterators Implementierung von einfach verketteten Listen Implementierung von doppelt verketteten Listen Informatik II: Objektorientierte

Mehr

3. Übungsblatt zu Algorithmen I im SoSe 2017

3. Übungsblatt zu Algorithmen I im SoSe 2017 Karlsruher Institut für Technologie Prof. Dr. Jörn Müller-Quade Institut für Theoretische Informatik Björn Kaidel, Sebastian Schlag, Sascha Witt 3. Übungsblatt zu Algorithmen I im SoSe 2017 http://crypto.iti.kit.edu/index.php?id=799

Mehr

Software Entwicklung 1

Software Entwicklung 1 Software Entwicklung 1 Annette Bieniusa / Arnd Poetzsch-Heffter AG Softech FB Informatik TU Kaiserslautern Datenstruktur Liste Bieniusa/Poetzsch-Heffter Software Entwicklung 1 2/ 42 Formale Definition

Mehr

Verkettete Listen. KIT Institut für Theoretische Informatik 1

Verkettete Listen. KIT Institut für Theoretische Informatik 1 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 //

Mehr

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

Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der Größe Maximale Größe?! Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um Dynamische Anpassung der Größe Praktische Informatik I, HWS 2009, Kapitel 10 Seite

Mehr

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

Lineare Datenstrukturen: Felder, Vektoren, Listen Modelle: math. Folge (a i ) i=1.. mit Basistyp T oder: [T] Teil II: Datenstrukturen Datenstrukturen Lineare Datenstrukturen: Felder, Vektoren, Listen Modelle: math. Folge (a i ) i=1.. mit Basistyp T oder: [T] Nichtlineare Datenstrukturen: Bäume Modell(e): spezielle

Mehr

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

Stacks, Queues & Bags. Datenstrukturen. Pushdown/Popup Stack. Ferd van Odenhoven. 19. September 2012 , Queues & Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 19. September 2012 ODE/FHTBM, Queues & 19. September 2012 1/42 Datenstrukturen Elementare Datenstrukturen

Mehr

6. Verkettete Strukturen: Listen

6. Verkettete Strukturen: Listen 6. Verkettete Strukturen: Listen 5 K. Bothe, Inst. f ür Inf., HU Berlin, PI, WS 004/05, III.6 Verkettete Strukturen: Listen 53 Verkettete Listen : Aufgabe Vergleich: Arrays - verkettete Listen Listenarten

Mehr

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

Aufgabenblatt 4. Aufgabe 3. Aufgabe 1. Aufgabe 2. Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen Prof. Dr. Th. Letschert Algorithmen und Datenstrukturen Aufgabenblatt 4 Aufgabe 1 1. Erläutern Sie in eigenen Worten die Begriffe Datenstruktur, Datentyp und abstrakter Datentyp. Nutzen Sie das Beispiel

Mehr

1 Abstrakte Datentypen

1 Abstrakte Datentypen 1 Abstrakte Datentypen Spezifiziere nur die Operationen! Verberge Details der Datenstruktur; der Implementierung der Operationen. == Information Hiding 1 Sinn: Verhindern illegaler Zugriffe auf die Datenstruktur;

Mehr

12. Dynamische Datenstrukturen

12. Dynamische Datenstrukturen Motivation: Stapel. Dynamische Datenstrukturen Verkettete Listen, Abstrakte Datentypen Stapel, Warteschlange, Implementationsvarianten der verketteten Liste 0 04 Motivation: Stapel ( push, pop, top, empty

Mehr

Tutoraufgabe 1 (Implementierung eines ADTs):

Tutoraufgabe 1 (Implementierung eines ADTs): Prof. aa Dr. E. Ábrahám Datenstrukturen und Algorithmen SS Tutoriumslösung - Übung (Abgabe.05.0) F. Corzilius, S. Schupp, T. Ströder Tutoraufgabe (Implementierung eines ADTs): Wir spezifizieren den ADT

Mehr

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

class ListElement { int value; ListElement next; ListElement() { next=null; value=0; Listenimplementierung Übung 1, Aufgabe 4. c 2004 Evgeny Matusov, Thomas Deselaers Zunächst definieren wir die Basisklasse für die Listenelemente, die gleichzeitig einen Verweis auf weitere Listenelemente

Mehr

2.2 Spezifikation abstrakter Datentypen. 2.3 Implementierung und Anwendung von ADT. 2.4 Datenabstraktion und Objektorientierung

2.2 Spezifikation abstrakter Datentypen. 2.3 Implementierung und Anwendung von ADT. 2.4 Datenabstraktion und Objektorientierung Inhaltsverzeichnis (update) 2 Datenabstraktion 2.1 Begriffe 2.2 Spezifikation abstrakter Datentypen 2.2.1 Algebraische Spezifikation 2.2.2 Modellierende Spezifikation 2.3 Implementierung und Anwendung

Mehr

Datenstrukturen sind neben Algorithmen weitere wichtige Bausteine in der Informatik

Datenstrukturen sind neben Algorithmen weitere wichtige Bausteine in der Informatik 5. Datenstrukturen Motivation Datenstrukturen sind neben Algorithmen weitere wichtige Bausteine in der Informatik Eine Datenstruktur speichert gegebene Daten und stellt auf diesen bestimmte Operationen

Mehr

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

ListElement (E i n f o, ListElement<E> prev, ListElement<E> next ) { TECHNISCHE UNIVERSITÄT MÜNCHEN FAKULTÄT FÜR INFORMATIK Lehrstuhl für Sprachen und Beschreibungsstrukturen SS 2011 Einführung in die Informatik I Übungsblatt 11 Prof. Dr. Helmut Seidl, A. Lehmann, A. Herz,

Mehr

Advanced Programming in C

Advanced Programming in C Advanced Programming in C Pointer und Listen Institut für Numerische Simulation Rheinische Friedrich-Wilhelms-Universität Bonn Oktober 2013 Überblick 1 Variablen vs. Pointer - Statischer und dynamischer

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Java Generics und Java API (1/2) Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck https://www.itm.uni-luebeck.de/people/fischer Datenstrukturen In vielen Sprachen

Mehr

Bäume und der Sequence ADT

Bäume und der Sequence ADT Bäume und der Sequence ADT Motivation: Der Sequence ADT Bei der Vorstellung verschiedener Implementierungen für Stacks, Queues und Deques wurde vor allem auf die Unterschiede zwischen Arrays fester Größe,

Mehr

Einfach verkettete Liste

Einfach verkettete Liste 5. Listen Verkettete Listen Einfach verkettete Liste Für jedes einzelne Element der Liste wird ein Hilfsobjekt erzeugt. Jedes Hilfsobjekt enthält zwei Instanzvariablen: den zu speichernden Wert bzw. einen

Mehr

ALP II Dynamische Datenmengen Datenabstraktion

ALP II Dynamische Datenmengen Datenabstraktion ALP II Dynamische Datenmengen Datenabstraktion O1 O2 O3 O4 SS 2012 Prof Dr Margarita Esponda M Esponda-Argüero 1 Dynamische Datenmengen Dynamische Datenmengen können durch verschiedene Datenstrukturen

Mehr

Programmieren in Java

Programmieren in Java Programmieren in Java Vorlesung 05: Generics Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2015 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1 / 19 Inhalt Generics

Mehr

Vorlesung Programmieren

Vorlesung Programmieren Vorlesung Programmieren 3. Kontrollstrukturen 04.11.2015 Prof. Dr. Ralf H. Reussner Version 1.1 LEHRSTUHL FÜR SOFTWARE-DESIGN UND QUALITÄT (SDQ) INSTITUT FÜR PROGRAMMSTRUKTUREN UND DATENORGANISATION (IPD),

Mehr

Verkettete Datenstrukturen: Listen

Verkettete Datenstrukturen: Listen Verkettete Datenstrukturen: Listen 2 Listen Formal: Liste = endliche Folge von Elementen [a 1, a 2,..., a n ]. Spezialfall: leere Liste [ ]. Länge einer Liste = Anzahl der Elemente (bei leerer Liste: 0).

Mehr

Programmieren 2 Übung Semesterwoche 2

Programmieren 2 Übung Semesterwoche 2 Programmieren 2 Übung Semesterwoche 2 1. Stack (LIFO: Last-In--First-Out) Implementieren und testen Sie eine Klasse Stack, so dass beliebig viele Objekte eines vorgegebenen Datentyps (z. B. String) auf

Mehr

13. Bäume: effektives Suchen und Sortieren

13. Bäume: effektives Suchen und Sortieren 13. Bäume: effektives Suchen und Sortieren Java-Beispiele: Baum.java Traverse.java TraverseTest.java Version: 25. Jan. 2016 Schwerpunkte Aufgabe und Vorteile von Bäumen Sortieren mit Bäumen Ausgabealgorithmen:

Mehr

13. Bäume: effektives Suchen und Sortieren

13. Bäume: effektives Suchen und Sortieren Schwerpunkte Aufgabe und Vorteile von Bäumen 13. Bäume: effektives Suchen und Sortieren Java-Beispiele: Baum.java Traverse.java TraverseTest.java Sortieren mit Bäumen Ausgabealgorithmen: - Preorder - Postorder

Mehr

Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. B3.1 Einführung. B3.2 Verkettete Liste. B3.3 Bäume

Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. B3.1 Einführung. B3.2 Verkettete Liste. B3.3 Bäume Algorithmen und Datenstrukturen 22. März 2018 B3. Verkettete Listen und Bäume Algorithmen und Datenstrukturen B3. Verkettete Listen und Bäume B3.1 Einführung Marcel Lüthi and Gabriele Röger B3.2 Verkettete

Mehr

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen B3. Verkettete Listen und Bäume Marcel Lüthi and Gabriele Röger Universität Basel 22. März 2018 Einführung Abstrakter Datentyp / Datenstruktur Abstrakter Datentyp Eine Menge

Mehr

Datenstrukturen und Abstrakte Datentypen

Datenstrukturen und Abstrakte Datentypen Datenstrukturen und Abstrakte Datentypen Abstrakter Datentyp Idee der sequentiellen Struktur Einfach verkettete Liste Iteratorkonzept Prof. Dr. E. Ehses, 2014 1 Definition: Ein abstrakter Datentyp (ADT)

Mehr

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1

IT I: Heute. abstrakte Methoden und Klassen. Interfaces. Interfaces List, Set und Collection IT I - VO 7 1 IT I: Heute abstrakte Methoden und Klassen Interfaces Interfaces List, Set und Collection 22.11.2018 IT I - VO 7 1 Wissensüberprüfung Überschreiben von Methoden: Aufruf der Methode der Oberklasse ist oft

Mehr

Kapitel 12: Induktive

Kapitel 12: Induktive Kapitel 12: Induktive Datenstrukturen Felix Freiling Lehrstuhl für Praktische Informatik 1 Universität Mannheim Vorlesung Praktische Informatik I im Herbstsemester 2009 Folien nach einer Vorlage von H.-Peter

Mehr

Informatik II Übung 5

Informatik II Übung 5 Informatik II Übung 5 Gruppe 2 Carina Fuss [email protected] 28.3.2018 Carina Fuss 28.3.2018 1 Übung 5 Administratives/Tipps zu Eclipse Nachbesprechung Übung 4 kurze Demo zu Stacks Java Pakete Call

Mehr

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

Hochschule Augsburg, Fakultät für Informatik Name:... Prüfung Programmieren 1, IN1bac, WS 10/11 Seite 1 von 6 Prüfung "Programmieren 1", IN1bac, WS 10/11 Seite 1 von 6 Datum, Uhrzeit: 24. 01. 2011, 10.30 Uhr Semester: IN1 Note:... Prüfer: Prof. Meixner Dauer: 60 Min. Hilfsmittel: keine Punkte:... Diese Prüfung

Mehr

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

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 - ! 1. Rekursive Algorithmen! 2. Rekursive (dynamische) Datenstrukturen II.3.2 Rekursive Datenstrukturen - 1 - Ausdruck Ausdruck Grundwert ( Typ ) Präfix-Operator Name Methodenaufruf [ Ausdruck ] ( Ausdruck

Mehr

Algorithmen und Datenstrukturen CS1017

Algorithmen und Datenstrukturen CS1017 Algorithmen und Datenstrukturen CS1017 Th. Letschert TH Mittelhessen Gießen University of Applied Sciences Datenstrukturen I: Lineare Sequenzen / Listen Datenstrukturen für Sequenzen Sequenzen in der Java-API:

Mehr

3 Dynamische Datenstrukturen

3 Dynamische Datenstrukturen 3 Dynamische Datenstrukturen Beispiele für dynamische Datenstrukturen sind Lineare Listen Schlangen Stapel Bäume Prof. Dr. Dietmar Seipel 128 Praktische Informatik I - Algorithmen und Datenstrukturen Wintersemester

Mehr

Ordnung im Materiallager: Datenstrukturen II. Suchen und Sortieren im Array Verkettete Listen Rekursion

Ordnung im Materiallager: Datenstrukturen II. Suchen und Sortieren im Array Verkettete Listen Rekursion Ordnung im Materiallager: Datenstrukturen II Suchen und Sortieren im Array Verkettete Listen Rekursion Indizierter Datenbehälter Modell: Parkhaus, nummerierte Plätze interface FuhrparkIndex { // indiziert

Mehr

1. Rekursive Algorithmen 2. Rekursive (dynamische) Datenstrukturen

1. Rekursive Algorithmen 2. Rekursive (dynamische) Datenstrukturen 1. Rekursive Algorithmen 2. Rekursive (dynamische) Datenstrukturen II.3.2 Rekursive Datenstrukturen - 1 - Grundwert ( Typ ) Präfix-Operator Name Methodenaufruf [ ] ( ) Infix-Operator Methodenaufruf new

Mehr

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

Übungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit Übungsblatt Programmierung und Software-Entwicklung Generizität, Interfaces, Listen, Sortieralgorithmen & JUnit Aufgabe : Die allgemeine Object-Liste Gegeben sei folgendes UML-Klassendiagramm: MyObjectList

Mehr

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke Institut für Programmierung und Reaktive Systeme Java 7 Markus Reschke 14.10.2014 Vererbung in Java Vererbung ermöglicht es, Klassen zu spezialisieren Wiederverwendung vorhandener Klassen Kindsklasse erhält

Mehr