Docsity
Docsity

Prüfungen vorbereiten
Prüfungen vorbereiten

Besser lernen dank der zahlreichen Ressourcen auf Docsity


Download-Punkte bekommen.
Download-Punkte bekommen.

Heimse Punkte ein, indem du anderen Studierenden hilfst oder erwirb Punkte mit einem Premium-Abo


Leitfäden und Tipps
Leitfäden und Tipps

Programmierung mit Java | RWTH Aachen, Skripte von Programmieren in Java

Skripte der Rheinisch-Westfälische Technische Hochschule Aachen zur Programmierung mit Java

Art: Skripte

2019/2020

Hochgeladen am 09.04.2020

Ataç_Yelken
Ataç_Yelken 🇩🇪

4.4

(29)

48 dokumente

1 / 35

Toggle sidebar

Diese Seite wird in der Vorschau nicht angezeigt

Lass dir nichts Wichtiges entgehen!

bg1
Datenstrukturen und Algorithmen (Folie 34, Seite 18 im Skript)
Einf¨
uhrung
Komplexit¨
at von Algorithmen
Java
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.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23

Unvollständige Textvorschau

Nur auf Docsity: Lade Programmierung mit Java | RWTH Aachen und mehr Skripte als PDF für Programmieren in Java herunter!

Einf¨uhrung Komplexit¨at von Algorithmen

Java

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

Generische Typen

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

Assoziative Arrays

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

Einfach verkettete Listen

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

Iteratoren

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

Iteratoren

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

Lineare 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.