



























Besser lernen dank der zahlreichen Ressourcen auf Docsity
Heimse Punkte ein, indem du anderen Studierenden hilfst oder erwirb Punkte mit einem Premium-Abo
Prüfungen vorbereiten
Besser lernen dank der zahlreichen Ressourcen auf Docsity
Download-Punkte bekommen.
Heimse Punkte ein, indem du anderen Studierenden hilfst oder erwirb Punkte mit einem Premium-Abo
Community
Finde heraus, welche laut den Docsity-Nutzern die besten Unis deines Landes sind
Kostenlose Leitfäden
Lade unsere Leitfäden mit Lernmethoden, Hilfen zur Angstbewältigung und von Docsity-Tutoren erstellte Tipps zum Verfassen von Haus- und Abschlussarbeiten kostenlos herunter
Skripte der Rheinisch-Westfälische Technische Hochschule Aachen zur Programmierung mit Java
Art: Skripte
1 / 35
Diese Seite wird in der Vorschau nicht angezeigt
Lass dir nichts Wichtiges entgehen!
Einf¨uhrung Komplexit¨at von Algorithmen
Wir verwenden oft Java f¨ur Datenstrukturen und Algorithmen.
Die Vorlesung ist aber von der Programmiersprache unabh¨angig.
Lernziel sind die einzelnen Algorithmen und Datenstrukturen, nicht ihre Umsetzung in Java.
F¨ur das Verst¨andnis der Vorlesung sind Kenntnisse in einer objektorientierten Sprache notwendig.
Einf¨uhrung Komplexit¨at von Algorithmen
Nur Konzepte aus der Vorlesung Programmierung. Mit einer Ausnahme. Java public class DoublePair { Double a; Double b; public Pair (Double a, Double b) {this.a = a; this.b = b; } public void setfirst(Double a) {this.a = a; } public void setsecond(Double b) {this.b = b; } public Double first() {return a; } public Double second() {return b; } public String toString () {return"[" + a + "," + b + "]"; }
Einf¨uhrung Elementare Datenstrukturen
Java public class Array 〈D〉 { protected D[ ] a; protected int size;
Java public void set(int i, D d) { if(i ≥ size) { size = i + 1; realloc(); } a[i] = d;
Einf¨uhrung Elementare Datenstrukturen
Java private void realloc() { if(size ≥ a.length) { D[ ] b = (D[ ]) new Object[2 ∗ size]; for(int i = 0; i < a.length; i++) if(a[i] 6 = null) b[i] = a[i]; a = b; }
Einf¨uhrung Elementare Datenstrukturen
Java public interface Map〈K , D〉 { public void insert(K k, D d); public void delete(K k); public D find(K k); public boolean iselement(K k); public int size(); public boolean isempty (); public Iterator 〈K , D〉 iterator (); public SimpleIterator 〈K 〉 simpleiterator (); public Array 〈K 〉 array (); public void print();
Einf¨uhrung Elementare Datenstrukturen
Java public abstract class Dictionary 〈K , D〉 implements Map〈K , D〉 { public abstract void insert(K k, D d); public abstract void delete(K k); public abstract Iterator 〈K , D〉 iterator (); public D find(K k) { Iterator 〈K , D〉 it; for(it = iterator (); it.more(); it.step()) { if (it.key ().equals(k)) { return it.data(); } } return null;
Einf¨uhrung Elementare Datenstrukturen
Der Konstruktor muß den Listenkopf head erzeugen. Der Vorg¨anger und Nachfolger von head ist head selbst.
Java public class List〈K , D〉 extends Dictionary 〈K , D〉 { Listnode〈K , D〉 head; public List() { head = new Listnode〈K , D〉(null, null); head.pred = head.succ = head;
Einf¨uhrung Elementare Datenstrukturen
Java class Listnode〈K , D〉 { K key ; D data; Listnode〈K , D〉 pred, succ; Listnode(K k, D d) { key = k; data = d; pred = null; succ = null; } void delete() { pred.succ = succ; succ.pred = pred; } void copy (Listnode〈K , D〉 n) { key = n.key ; data = n.data; } void append(Listnode〈K , D〉 newnode) { newnode.succ = succ; newnode.pred = this; succ.pred = newnode; succ = newnode; }
Einf¨uhrung Elementare Datenstrukturen Java public D find(K k) { Listnode〈K , D〉 n = findnode(k); if(n ≡ null) return null; return n.data; }
Java protected Listnode〈K , D〉 findnode(K k) { Listnode〈K , D〉 n; head.key = k; for(n = head.succ; !n.key .equals(k); n = n.succ); head.key = null; if(n ≡ head) return null; return n;
Einf¨uhrung Elementare Datenstrukturen
Kein Zeiger auf Vorg¨anger Einfachere Datenstruktur Operationen k¨onnen komplizierter sein Frage: Wie kann ein Element vor einen gegebenen Knoten eingef¨ugt werden?
Ersetzen und alten Knoten anf¨ugen!
Vorsicht: Eine gef¨ahrliche Technik.
Einf¨uhrung Elementare Datenstrukturen
Mittels eines Iterators k¨onnen wir die Elemente einer Map aufz¨ahlen. Java public interface Iterator 〈K , D〉 { public void step(); public boolean more(); public K key (); public D data();
Einf¨uhrung Elementare Datenstrukturen
Mittels eines Iterators k¨onnen wir die Elemente einer Map aufz¨ahlen. Java Iterator 〈K , D〉 it; for(it = map.iterator (); it.more(); it.step()) { System.out.println(it.key ());
Einf¨uhrung Elementare Datenstrukturen
Java public class Queue〈D〉 { private List〈Object, D〉 queue; private int size; public Queue() {queue = new List〈Object, D〉(); size = 0; } public boolean isempty () {return size ≡ 0; } public D dequeue() { D x = queue.lastnode().data; queue.lastnode().delete(); size−−; return x; } public void enqueue(D x) {queue.prepend(null, x); size++; } public int size() {return size; }
Suchen und Sortieren Einfache Suche
Wir suchen x im Array a[0,... , n − 1]
Algorithmus function find1 (int x) boolean : for i = 0 to n − 1 do if x = a[i] then return true fi od; return false
Die innere Schleife ist langsam.