Vorlesung Programmieren
|
|
|
- Jobst Sommer
- vor 9 Jahren
- Abrufe
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 Kapitel 13: Listen Ziel: eigene Datenstrukturen erstellen können und eine wichtige vordefinierte Datenstruktur( familie) kennenlernen zusammengehörige Elemente zusammenfassen
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
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
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
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
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
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
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
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
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,
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
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
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
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
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
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)
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
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
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,
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
Ü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:
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
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
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
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
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
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 //
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
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
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
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
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
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;
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
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
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
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
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
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,
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
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
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,
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
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
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
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),
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).
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
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:
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
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
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
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)
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
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
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
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
! 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
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:
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
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
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
Ü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
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
