Kapitel 3: Datentyp Liste
|
|
|
- Hella Kappel
- vor 9 Jahren
- Abrufe
Transkript
1 Kapitel 3: Datentyp Liste! Einleitung! Listen-Interface! Liste als Feld: ArrayList! Einfach verkettete Listen! Hilfskopfknotentechnik! Liste als einfach verkettete Liste: LinkedList! Doppelt verkettete Listen Prof. Dr. O. Bittel, HTWG Konstanz Programmiertechnik II Datentyp Liste WS 16/17 3-1
2 Listen und ihre Operationen Definition! Eine Liste ist eine endliche Folge von Elementen: a 0, a 1,, a n-1! Die Elemente einer Liste besitzen eine Position, wobei das erste Element die Position 0 besitzt (analog zu Feldern). Beispiele:! Einkaufslisten! Tagesordnungen!... Milch Eier Mehl Zucker Position: Typische Operationen:! einfügen an eine Position! löschen einer Position! lesen einer Position! ändern einer Position Einfügen von Sahne an Position 1: Sahne Milch Eier Mehl Zucker Milch Sahne Eier Mehl Zucker Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/17 3-2
3 Listen-Interface public interface List { void add(int x); void add(int idx, int x); int set(int idx, int x); int get(int idx); void remove(int idx); int size(); void clear(); boolean isempty();! add(x) fügt x hinten an; entspricht add(size(), x)! add(i, x) fügt an Position i das Element x ein.! set(i, x) überschreibt das Element an der Position i mit x. Der alte Wert wird zurückgeliefert.! get(i) liefert den Wert an der Position i.! remove(i) löscht die Position i.! size() ist die Anzahl Elemente in der Liste.! clear() löscht alle Elemente.! isempty() prüft, ob die Liste leer ist. Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/17 3-3
4 Jetzt nur int-liste; generische Liste später! In diesem Kapitel sollen vorerst nur int-listen behandelt werden.! Die Erweiterung auf beliebige Element-Typen geschieht später als generischer Listentyp. Generisches Listen-Interface: public interface List<E> { void add(e x); void add(int idx, E x); int set(int idx, E x); E get(int idx); void remove(int idx); int size(); void clear(); boolean isempty(); E steht für einen beliebigen Elementyp Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/17 3-4
5 Kapitel 3: Datentyp Liste! Einleitung! Listen-Interface! Liste als Feld: ArrayList! Einfach verkettete Listen! Hilfskopfknotentechnik! Liste als einfach verkettete Liste: LinkedList! Doppelt verkettete Listen Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/17 3-5
6 Liste als Feld: class ArrayList (1)! Die Realisierung einer Liste als Feld ist naheliegend! Elemente werden lückenlos im Feld gehalten. Beim Einfügen bzw. Löschen müssen die Elemente verschoben werden.! Falls das Feld gefüllt ist, muss das Feld vergrößert werden, d.h. umkopieren in ein größeres Feld. Liste Liste als Feld: data[0] data[1]... data[size-1] hier ist size = 4... data[n-1] Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/17 3-6
7 Liste als Feld: class ArrayList (2) public class ArrayList implements List { public ArrayList() { clear(); public final void clear() { size = 0; data = new int[def_capacity]; Methode ist final und kann damit durch Klassenerweiterungen nicht mehr überschrieben werden. Wichtig, da das Verhalten des Konstruktors sich nicht mehr ändern sollte. public int size() {return size; public boolean isempty() {return size == 0; //... private static final int DEF_CAPACITY = 32; private int size; private int[] data; Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/17 3-7
8 Liste als Feld: class ArrayList (3) public class ArrayList implements List { //... public void add(int x) {add(size(), x); public void add(int idx, int x) { if (idx < 0 idx > size) throw new IndexOutOfBoundsException(); if (data.length == size) ensurecapacity(2*size); for (int i = size; i > idx; i--) { data[i] = data[i-1]; data[idx] = x; size++; private void ensurecapacity(int newcapacity) { if (newcapacity < size) return; int[] old = data; data = new int[newcapacity]; System.arraycopy(old, 0, data, 0, size); Precondition prüfen. Feld verdoppeln, falls kein Platz mehr ist. Elemente um eine Position nach rechts verschieben. Feld in ein größeres Feld kopieren. Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/17 3-8
9 Liste als Feld: class ArrayList (4) public class ArrayList implements List { //... public int set(int idx, int x) { if (idx < 0 idx >= size) throw new IndexOutOfBoundsException(); int old = data[idx]; data[idx] = x; return old; public int get(int idx) { if (idx < 0 idx >= size) throw new IndexOutOfBoundsException(); return data[idx]; public void remove(int idx) { if (idx < 0 idx >= size) throw new IndexOutOfBoundsException(); for (int i = idx; i < size-1; i++) data[i] = data[i+1]; size--; Elemente um eine Position nach links verschieben. Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/17 3-9
10 Liste als Feld: class ArrayList (5) public class ArrayList implements List { public String tostring() { StringBuilder s = new StringBuilder(""); for (int i = 0; i < size; i++) { s.append(data[i]).append(", "); s.append("size = ").append(size); return s.tostring(); Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
11 Liste als Feld: class ArrayList (6) public static void main(string[] args) { List l = new ArrayList(); l.add(5); l.add(3); l.add(2); l.add(0,12); System.out.println(l); System.out.println(l.get(1)); System.out.println(l.set(1,13)); System.out.println(l.get(1)); System.out.println(l); 12, 5, 3, 2, size = , 13, 3, 2, size = 4 l.remove(1); System.out.println(l); 12, 3, 2, size = 3 Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
12 Aufgaben zu ArrayList Aufgabe 3.1 Erweitern Sie das Interface List und die Klasse ArrayList um eine Methode append(list list), die eine weitere Liste list anhängt. Aufgabe 3.2 Realisieren Sie einen Konstruktor ArrayList(List list), der die Liste mit list initialisiert. Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
13 Bemerkungen! Dynamisch wachsende Listen erfordert teures Kopieren in größere Felder. Falls Feldgrößen verdoppelt werden (wie hier), ist das Umkopieren nicht so häufig notwendig. (Frage: wie oft muss das Feld verdoppelt, werden, damit ca. 1 Million Elemente abgespeichert werden können, wenn die Anfangsgröße 2 7 = 128 ist?). Die Verdopplung der Feldgrößen geht jedoch auf Kosten von nicht benötigtem Speicherplatz.! Bei schrumpfenden Listen findet keine Anpassung der Felder statt; das ließe sich jedoch durch Umkopieren in kleinere Felder realisieren.! Zugriff und Ändern von Elementen ist sehr effizient gelöst.! Einfügen und Löschen von Elementen ist mit teurem Verschieben verbunden. Besonders teuer ist das Einfügen und Löschen am Listenanfang.! Daher sind oft verkettete Listen (nächste Folie) die bessere Alternative. Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
14 Kapitel 3: Datentyp Liste! Einleitung! Listen-Interface! Liste als Feld: ArrayList! Einfach verkettete Listen! Hilfskopfknotentechnik! Liste als einfach verkettete Liste: LinkedList! Doppelt verkettete Listen Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
15 Begriffe Verkettete Listen! Eine linear verkettete Liste besteht aus einer Folge von Elementen, die über jeweils eine Referenz auf das nächste Element verkettet sind.! Element und Referenz auf das nächste Element nennt man auch Knoten (engl. node).! Es gibt eine Referenz auf den ersten Knoten: wird oft head genannt.! Letzter Knoten enthält die null-referenz. Beispiel! Liste mit 5 Knoten: head! leere Liste: Knoten null head Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
16 Datentyp Node Knotentyp Node: class Node { private Node next; private int data; public Node(int x, Node p) { data = x; next = p; Knoten erzeugen: Node head = new Node(3,null); head 3 Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
17 Liste aufbauen durch Einfügen am Anfang Node head = new Node(3,null); head 3 head = new Node(5,head); head 5 3 head = new Node(1,head); head 1 5 3! die drei oberen Anweisungen lassen sich auch in eine Anweisung zusammenfassen: head = new Node(1, new Node(5, new Node(3,null))); Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
18 Liste durch Schleife aufbauen Scanner in = new Scanner(System.in); Node head = null; System.out.println("Eingabe: "); while (in.hasnextint()) { int x = in.nextint(); head = new Node(x,head); Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
19 Liste durchlaufen Liste ausgeben: for (Node p = head; p!= null; p = p.next) { System.out.println(p.data); Liste nach x durchsuchen: Node p; for (p = head; p!= null; p = p.next) { if (p.data == x) break; if (p!= null) System.out.println(x + " gefunden"); else System.out.println(x + " nicht gefunden"); Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
20 Einfügen nach einem beliebigen Knoten! Es wird zunächst eine Referenz p auf den Knoten positioniert, nach dem eingefügt werden soll. p 2 7 3! Einfügen nach p: p p.next = new Node(5,p.next); 5 Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
21 Löschen nach einem beliebigen Knoten! Es wird zunächst eine Referenz p auf den Knoten positioniert, nach dem ein Knoten gelöscht werden soll. Es muss daher p.next!= null gelten. p 3 5! Löschen des Knotens nach p: p 3 5 p.next = p.next.next; Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
22 Einfügen in sortierte Liste (1)! Allgemeiner Fall beim Einfügen von x: p head ! Sonderfälle beim Einfügen von x: - Einfügen in leere Liste (d.h. head == null) - Einfügen am Anfang (d.h. x <= head.data) head head Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
23 Einfügen in sortierte Liste (2) // Einfügen von x in sortierte Liste head: if (head == null x <= head.data) { Sonderfälle: head = new Node(x,head); Einfügen in leere Liste else { Einfügen am Listenanfang Node p = head; while(p.next!= null && p.next.data < x) { p = p.next; p.next = new Node(x,p.next); Allgemeiner Fall: Einfügen nach einem Knoten head p Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
24 Listen mit Hilfskopfknoten! Am Anfang der Liste wird zusätzlich ein nicht-datenspeichernder Knoten (Hilfskopfknoten; engl. dummy head node) eingefügt.! Die leere Liste besteht damit genau aus einem Hilfskopfknoten.! Vorteil: In der Regel keine Sonderfälle bei leerer Liste und Behandlung des ersten Datenknotens. Liste mit einem Hilfskopfknoten und 3 Daten-Knoten: head Leere Liste: Enthält keinen Daten-Knoten. head Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
25 Einfügen in sortierte Liste mit Hilfskopfknoten // Einfügen von x in sortierte Liste head: Node p = head; while(p.next!= null && p.next.data < x) { p = p.next; p.next = new Node(x,p.next); p p p head head 2 3 head Einfügen in leere Liste 1 Einfügen am Listenanfang 4 Einfügen nach einem Datenknoten Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
26 Kapitel 3: Datentyp Liste! Einleitung! Listen-Interface! Liste als Feld: ArrayList! Einfach verkettete Listen! Hilfskopfknotentechnik! Liste als einfach verkettete Liste: LinkedList! Doppelt verkettete Listen Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
27 Datentyp Liste als einfach verkettete Liste! Realisierung einer Liste als einfach verkettete Liste mit Hilfskopfknoten, um Sonderfälle bei den verschiedenen Operationen zu vermeiden. Liste Liste als einfach verkettete Liste : head Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
28 class LinkedList (1) public class LinkedList implements List { public LinkedList() {clear(); public final void clear() { head = new Node(0,null); size = 0; Konstruktor legt leere Liste mit Hilfskopfknoten an. head //... static private class Node { private Node next; private int data; public Node(int x, Node p) { data = x; next = p; private Node head; private int size; Statisch geschachtelte Klasse Node: Verhält sich wie eine Top-Level- Klasse, jedoch hat LinkedList volle Zugriffsrechte auf Node. Listenobjekt besteht aus head- Referenz für verkettete Liste und Anzahl der Listenelemente. Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
29 class LinkedList (2) public class LinkedList implements List { //... public int size() { return size; public boolean isempty() { return size == 0; public void add(int x) { add(size(), x); public void add(int idx, int x) { if (idx < 0 idx > size) throw new IndexOutOfBoundsException(); Node p = head; for (int i = 0; i < idx; i++) p = p.next; p.next = new Node(x,p.next); size++; Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
30 class LinkedList (3) public class LinkedList implements List { //... public int set(int idx, int x) { if (idx < 0 idx >= size) throw new IndexOutOfBoundsException(); Node p = head.next; for (int i = 0; i < idx; i++) p = p.next; int old = p.data; p.data = x; return old; public int get(int idx) { if (idx < 0 idx >= size) throw new IndexOutOfBoundsException(); Node p = head.next; for (int i = 0; i < idx; i++) p = p.next; return p.data; Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
31 class LinkedList (4) public class LinkedList implements List { //... public void remove(int idx) { if (idx < 0 idx >= size) throw new IndexOutOfBoundsException(); Node p = head; for (int i = 0; i < idx; i++) p = p.next; p.next = p.next.next; public String tostring() { StringBuilder s = new StringBuilder(""); for (Node p = head.next; p!= null; p = p.next) { s.append(p.data).append(", "); s.append("size = ").append(size); return s.tostring(); Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
32 class LinkedList (5) public static void main(string[] args) { List l = new LinkedList(); l.add(5); l.add(3); l.add(2); l.add(0,12); System.out.println(l); System.out.println(l.get(1)); System.out.println(l.set(1,13)); System.out.println(l.get(1)); System.out.println(l); 12, 5, 3, 2, size = , 13, 3, 2, size = 4 l.remove(1); System.out.println(l); 12, 3, 2, size = 3 Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
33 Aufgaben zu LinkedList Aufgabe 3.3 Erweitern Sie die Klasse LinkedList um eine Methode removeelement(int x), die aus der Liste das erste Element mit dem Wert x löscht. Aufgabe 3.4 Erweitern Sie die Klasse LinkedList um eine Methode removeallelement(int x), die aus der Liste alle Elemente mit dem Wert x löscht. Aufgabe 3.5 Erweitern Sie die Klasse LinkedList um eine Methode append(list list), die eine weitere Liste list anhängt. Aufgabe 3.6 Realisieren Sie einen Konstruktor LinkedList(List list), der die verkettete Liste mit list initialisiert. Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
34 Kapitel 3: Datentyp Liste! Einleitung! Listen-Interface! Liste als Feld: ArrayList! Einfach verkettete Listen! Hilfskopfknotentechnik! Liste als einfach verkettete Liste: LinkedList! Doppelt verkettete Listen Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
35 Doppelt verkettete Liste begin end! Jeder Knoten enthält zusätzlich einen Zeiger auf den Vorgängerknoten.! Damit effizienter Zugriff auf Vorgängerknoten möglich.! Oft ist auch Speicherung einer Referenz auf den letzten Knoten geschickt.! Andere Bezeichnungen: begin als Referenz auf den ersten Knoten und end als Referenz auf den letzten Knoten. class Node { private Node next; private Node prev; // previous private int data; public Node(int x, Node p, Node n) { data = x; next = n; prev = p; Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
36 Doppelt verkettete Liste mit Hilfsknoten (1)! Durch zusätzliche nicht datenspeichernde Hilfknoten am Anfang und am Ende werden Behandlung von Spezialfälle überflüssig. begin end! Löschen eines Daten-Knotens p: p.prev.next = p.next; p.next.prev = p.prev; p 1) begin ) end Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
37 Doppelt verkettete Liste mit Hilfsknoten (2)! Einfügen eines neuen Knotens r nach einem Knoten q: Node r = new Node(x, q.next, q); r.next.prev = r; q.next = r; q begin 3)... 1) end 1) 2) r 2 Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
38 Doppelt verkettete Liste mit Hilfsknoten (3)! Einfügen eines neuen Knotens r vor einem Knoten q: Node r = new Node(x, q, q.prev); r.prev.next = r; q.prev = r; q begin 2)... 1) end r 1) 3) 2 Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
39 Aufgaben zu doppelt verketteten Listen Aufgabe 3.7 Die Klasse LinkedList soll zu einer doppelt verketteten Liste mit Hilfskopfknoten erweitert werden.! Ändern Sie die Methode clear().! Ändern Sie die Methode add(i,x) so ab, dass bei höheren Indexwerten i die Liste von hinten nach vorne durchlaufen wird. public class DoubleLinkedList implements List { static private class Node { private Node next; private Node prev; // previous private int data; public Node(int x, Node p, Node n){ data = x; next = n; prev = p; private Node begin; private Node end; private int size; //... Prof. Dr. O. Bittel, HTWG Konstanz Fortgeschrittene Programmiertechnik Datentyp Liste WS 16/
Kapitel 3: Datentyp Keller und Schlange
Kapitel 3: Datentyp Keller und Schlange Keller (Stack) Schlange (Queue) Prof. Dr. O. Bittel, HTWG Konstanz Programmiertechnik II Datentyp Keller und Schlange SS 2019 3-1 Definition Keller und seine Operationen
Kapitel 4: Datentyp Keller und Schlange
Kapitel 4: Datentyp Keller und Schlange Keller (Stack) Schlange (Queue) 4-1 Definition Keller und seine Operationen Ein Keller (engl. Stack; Stapel) ist eine endliche Menge von Elementen mit einer LIFO-Organisation
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 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
Programmiertechnik II Klausur SS 2018 Angewandte Informatik Bachelor
Programmiertechnik II Klausur SS 2018 Angewandte Informatik Bachelor Name Matrikelnummer Aufgabe Punkte Aufgabe Punkte Zwischensumme 1 9 2 12 3 12 4 15 48 5 23 6 13 7 20 8 16 Summe 120 Note Prof. Dr. O.
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
Fortgeschrittene Programmiertechnik Klausur SS 2015 Angewandte Informatik Bachelor
Fortgeschrittene Programmiertechnik Klausur SS 2015 Angewandte Informatik Bachelor Name Matrikelnummer Aufgabe Punkte Aufgabe Punkte Zwischensumme 1 6 2 8 3 12 4 18 5 20 64 6 9 7 17 8 18 9 12 Summe 120
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,
Programmiertechnik II Klausur WS 15/16 Angewandte Informatik Bachelor
Programmiertechnik II Klausur WS 15/16 Angewandte Informatik Bachelor Name Matrikelnummer Aufgabe Punkte Aufgabe Punkte Zwischensumme 1 6 2 10 3 12 4 12 5 14 54 6 12 7 20 8 17 9 17 Summe 120 Note Prof.
Programmiertechnik II Klausur SS 2017 Angewandte Informatik Bachelor
Programmiertechnik II Klausur SS 2017 Angewandte Informatik Bachelor Name Matrikelnummer Aufgabe Punkte Aufgabe Punkte Zwischensumme 1 6 2 8 3 14 4 22 5 16 66 6 24 7 13 8 17 Summe 120 Note Prof. Dr. O.
Übung 10: Dynamische Datenstrukturen und Rekursion
Übung 10: Dynamische Datenstrukturen und Rekursion Abgabetermin: TT.MM.JJJJ Name: Matrikelnummer: Gruppe: G1 (Prähofer) G2 (Wolfinger) G3 (Wolfinger) Aufgabe Punkte gelöst abzugeben schriftlich abzugeben
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
Grundkonzepte java.util.list
Grundkonzepte java.util.list Eine List ist eine Spezialisierung einer allgemeinen Ansammlung (Collection): Lineare Ordnung ist definiert Zugriff über Rang oder Position Volle Kontrolle wo eingefügt bzw.
Programmiertechnik II Klausur WS 2017/18 Angewandte Informatik Bachelor
Programmiertechnik II Klausur WS 2017/18 Angewandte Informatik Bachelor Name Matrikelnummer Aufgabe Punkte Aufgabe Punkte Zwischensumme 1 10 2 8 3 12 4 20 5 8 58 6 14 7 20 8 12 9 16 Summe 120 Note Prof.
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
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
Programmiertechnik II Klausur SS 2017 Angewandte Informatik Bachelor
Programmiertechnik II Klausur SS 2017 Angewandte Informatik Bachelor Name Matrikelnummer Aufgabe Punkte Aufgabe Punkte Zwischensumme 1 6 2 8 3 14 4 22 5 16 66 6 24 7 13 8 17 Summe 120 Note Prof. Dr. O.
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
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 Programmierung
Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Semestralklausur Einführung in die Programmierung Semestralklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList
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)
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
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).
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
Fallstudie: Online-Statistik
Fallstudie: Online-Statistik Ziel: Klasse / Objekt, welches Daten konsumiert und zu jeder Zeit Statistiken, z.b. Mittelwert, Varianz, Median (etc.) ausgeben kann Statistics s = new Statistics(maxSize);...
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
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
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
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
Ü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
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
Teil V. Generics und Kollektionen in Java
Teil V Generics und Überblick 1 Parametrisierbare Datenstrukturen in Java 2 Prof. G. Stumme Algorithmen & Datenstrukturen Sommersemester 2009 5 1 Parametrisierbare Datenstrukturen in Java Motivation für
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
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
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)
Übung Algorithmen und Datenstrukturen
Übung Algorithmen und Datenstrukturen Sommersemester 2017 Marc Bux, Humboldt-Universität zu Berlin Agenda 1. (Sortierte) Listen 2. Stacks & Queues 3. Datenstrukturen 4. Rekursion und vollständige Induktion
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
! 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
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
Kapitel 11: Bäume. Beispiele Definition und Eigenschaften Implementierungen Durchlaufen von Bäumen Binäre Suchbäume
Kapitel 11: Bäume Beispiele Definition und Eigenschaften Implementierungen Durchlaufen von Bäumen Binäre Suchbäume Prof. Dr. O. Bittel, HTWG Konstanz Programmiertechnik II Bäume WS 17/18 11-1 Beispiele
Institut für Programmierung und Reaktive Systeme 17. Juli Programmieren II. Übungsklausur
Technische Universität Braunschweig Dr. Werner Struckmann Institut für Programmierung und Reaktive Systeme 17. Juli 2015 Hinweise: Klausurtermine: Programmieren II Übungsklausur Programmieren I: 7. September
Einführung in die Programmierung
Technische Universität München WS 2003/2004 Institut für Informatik Prof. Dr. Christoph Zenger Testklausur Einführung in die Programmierung Probeklausur Java (Lösungsvorschlag) 1 Die Klasse ArrayList In
Spezielle Datenstrukturen
Spezielle Datenstrukturen Stapel (Stack) Beschreibung der Datenstruktur Stapel Ein Stapel (engl. Stack), auch Stapelspeicher oder Keller bzw. Kellerspeicher genannt, ist eine Datenstruktur, in der Daten
Abgabe: (vor 12 Uhr)
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 7 Prof. Dr. Helmut Seidl, A. Lehmann, A. Herz,
II.4.4 Exceptions - 1 -
n 1. Unterklassen und Vererbung n 2. Abstrakte Klassen und Interfaces n 3. Modularität und Pakete n 4. Ausnahmen (Exceptions) n 5. Generische Datentypen n 6. Collections II.4.4 Exceptions - 1 - Ausnahmen
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 Abstrakte Klassen, finale Klassen und Interfaces
12 Abstrakte Klassen, finale Klassen und Interfaces Eine abstrakte Objekt-Methode ist eine Methode, für die keine Implementierung bereit gestellt wird. Eine Klasse, die abstrakte Objekt-Methoden enthält,
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
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
Algorithmen und Datenstrukturen (für ET/IT)
Algorithmen und Datenstrukturen (für ET/IT) Wintersemester 2012/13 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Wiederholung: Ziele der Vorlesung Wissen: Algorithmische
Faulheit professionell: Fertige Datenbehälter. Das Java-Collections-Framework Typsicherheit Generische Klassen
Faulheit professionell: Fertige Datenbehälter Das Java-Collections-Framework Typsicherheit Generische Klassen Das Java Collections Framework Grundlegende Interfaces Das Interface List Das Interface List
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
Einführung in die Programmierung mit Java
Einführung in die Programmierung mit Java Teil 14: Verkettete Listen Martin Hofmann Steffen Jost LFE Theoretische Informatik, Institut für Informatik, Ludwig-Maximilians Universität, München Stack 18.
Programmieren 2 16 Java Collections und Generizität
Programmieren 2 16 Java Collections und Generizität Bachelor Medieninformatik Wintersemester 2015 Dipl.-Inform. Ilse Schmiedecke [email protected] 1 Faulheit professionell: Fertige Datenbehälter
Vorlesung Datenstrukturen
Vorlesung Datenstrukturen Binärbaum Suchbaum Dr. Frank Seifert Vorlesung Datenstrukturen - Sommersemester 2016 Folie 356 Datenstruktur Binärbaum Strukturrepräsentation des mathematischen Konzepts Binärbaum
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
Übungen zu Kapitel 18
1 Übungen zu Kapitel 18 18.1 Stackimplementierung mittels Array "semidynamischer" Stack: Das folgende Coding realisiert einen Stack auf Grundlage eines Arrays. Da Arrays statische Datenstrukturen sind
Algorithmen und Datenstrukturen (für ET/IT) Wiederholung: Ziele der Vorlesung. Wintersemester 2012/13. Dr. Tobias Lasser
Algorithmen und Datenstrukturen (für ET/IT) Wintersemester 2012/13 Dr. Tobias Lasser Computer Aided Medical Procedures Technische Universität München Wiederholung: Ziele der Vorlesung Wissen: Algorithmische
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
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
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
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:
