Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

© Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen 1 Kapitel 3 Elementare Datenstrukturen TexPoint fonts used in EMF. Read the TexPoint manual.

Ähnliche Präsentationen


Präsentation zum Thema: "© Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen 1 Kapitel 3 Elementare Datenstrukturen TexPoint fonts used in EMF. Read the TexPoint manual."—  Präsentation transkript:

1 © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen 1 Kapitel 3 Elementare Datenstrukturen TexPoint fonts used in EMF. Read the TexPoint manual before you delete this box.: AA

2 © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen Grundlegendes Elementare Datenstrukturen: Arrays (Felder) Verkettete Listen bilden die Bausteine für abstrakte Mechanismen, die ausgehend von niederen Ebenen aufgebaut sind und Algorithmen mit zunehmender Komplexität ermöglichen

3 © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen Arrays (Felder) Arrays: Eine feste Sammlung von Daten desselben Typs, die zusammen- hängend gespeichert und über einen Index zugängig sind Fundamentale Datenstruktur: Direktes Abbild des Speichersystems. Ein Arrayzugriff a[i] wird in nur wenige Maschinenanweisungen übersetzt Programme mit Arrays werden in effiziente Maschineprogramme übersetzt.

4 © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen Arrays (Felder) Beispiel: Das Primzahlensieb des Eratosthenes Ältester und bekanntester Siebalgorithmus, benannt nach Eratosthenes (ca. 200 v. Chr.) Prinzip von Siebalgorithmen: Eine Menge von Elementen wird in zwei Klassen aufgeteilt: die guten und die schlechten Elemente. Schlechte Elemente sind einfacher zu finden als gute. Ein Siebprozess eliminiert sukzessive Elemente, die als schlecht erkannt wurden. Jedes eliminierte Element hilft, weitere schlechte Elemente zu erkennen. Die überlebenden Elemente müssen die guten sein. Siebalgorithmus für Primzahlen: gut = ist eine Primzahl schlecht = ist keine Primzahl

5 © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen Arrays (Felder) Primzahlensieb von Eratosthenes: Alle Primzahlen kleiner gleich n ausgeben Markiere die kleinste Primzahl, d.h. 2, und entferne alle ihre Vielfachen innerhalb des gewünschten Bereichs 1 … n. Die kleinste verbleibende Zahl muß prim sein, markiere sie und entferne wieder alle ihre Vielfachen. Wiederhole diesen Prozess für alle Zahlen bis (Falls eine ganze Zahl c <= n faktorisiert werden kann als c = a · b, so muß entweder a <= oder b <= gelten)

6 © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen Arrays (Felder)

7 © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen Arrays (Felder) static void eratosthenes(int n) { int sqrtn = (int) Math.floor(Math.sqrt((double) n)); Sieve s = new Sieve(n); int p = 2; while (p <= sqrtn) { int i = p * p; while (i <= n) { s.remove(i); i = i + p; } do p++; while (! s.isMember(p)); } int c = 0; for (int i = 2; i <= n; i++) if (s.isMember(i)) { c++; System.out.println("prim(" + c + ") = " + i); } }

8 © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen Arrays (Felder) public class Sieve { public final int n; // Groesse des Sieve private static final int ws = 64; // Anzahl Bit in long private final int as; // Groesse des Arrays private long[] s; // zur Speicherung des Sieve // Konstruktor public Sieve(int n) { this.n = n; as = (n + ws - 1) / ws; s = new long[as]; for (int i = 0; i < as; i++) s[i] = ~0L; }

9 © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen Arrays (Felder) // public Methoden /** * Liefert "true" zurueck, falls das Element im * Sieve enthalten ist, sonst "false". */ public boolean isMember(int e) { if ((1 <= e) && (e <= n)) { int i = (e - 1) / ws; e = (e - 1) % ws; return ((s[i] & (1L << e)) != 0); } else return false; }

10 © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen Verkettete Listen Listenstrukturen = dynamische Datenstrukturen Mithilfe von Einfüge- und Löschoperationen können Listenstrukturen zur Laufzeit nicht nur die gespeicherten Datenwerte, sondern auch ihre Größe und Struktur verändern Listen: Schlüsselidee Alloziere benötigten Speicherplatz nicht wie beim Array in einem großen zusammenhängenden Teil, sondern dynamisch in kleinen Fragmenten, die ein gegebenes Objekt speichern können Verknüpfung von Datenelementen, die verstreut im Speicher liegen, erfolgt durch Zeiger bzw. Referenzen, d.h. Speicheradressen, an denen die Elemente gegenwärtig abgelegt sind

11 © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen Verkettete Listen Zeiger oder Referenz Ein Sprachkonstrukt, das in modernen Programmiersprachen benutzt wird, um das Äquivalent einer Speicheradresse darzustellen Im wesentlichen eine Speicheradresse, kann aber mehr Informationen enthalten: In Java oder anderen streng getypten Sprachen beziehen sich Zeiger bzw. Referenzen auch auf die Typdefinitionen der Objekte, auf die sie verweisen Übersetzer kann die konsistente Benutzung von Zeiger- bzw. Referenzvariablen sicherstellen Zeigervariable bzw. Referenzvariable nimmt Speicheradressen als Werte an

12 © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen Verkettete Listen public class ListNode { private E element = null; private ListNode next = null; public ListNode() { }; public ListNode(E element) { this.element = element; } headtail null e1e1 e2e2 eiei... e i+1 enen... Definition: Eine verkettete Liste ist eine Menge von Elementen, bei der jedes Element zu einem Knoten gehört, der auch eine Verbindung zu einem Knoten enthält.

13 © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen Verkettete Listen public void setNextNode(ListNode next) { this.next = next; } public ListNode getNextNode() { return next; } public void setData(E element) { this.element = element; } public E getData() { return element; } } // class ListNode

14 © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen Verkettete Listen Einfügen eines neuen Knotens als Nachfolger eines Knotens, gegeben durch den Zeiger p : q = new ListNode (y); q.setNextNode(p.getNextNode()); p.setNextNode(q); q.next = p.next; p.next = q; Abkürzende Schreibweise, die aber nicht den Grundsätzen der objekt- orientierten Programmierung (Zugriff auf in einer Klasse gekapselte Attribute nur über spezielle Zugriffsmethoden!) entspricht und daher so nicht in Programmen verwendet werden sollte! head tail null e1e1 e2e2 eiei... e i+1 enen... p y q

15 © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen Verkettete Listen Löschen des Nachfolgers eines Knotens, gegeben durch den Zeiger p : p.next = p.next.next; head tail null e1e1 e2e2 e i–1... eiei enen e i+1 p

16 © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen 16 Erzeugung einer Liste: ListNode head, tmp; head = new ListNode (0); tmp = head; for (int i = 1; i (i); tmp = tmp.next; } 3.2 Verkettete Listen head null 0 tmp i 1 1 null tmp 2 2 null tmp 3 3 null tmp

17 © Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen 17 Traversierung der Liste (Ausgabe): tmp = head; while (tmp != null) { System.out.println(tmp.data + " "); tmp = tmp.next; } Ausgabe: Verkettete Listen tmp


Herunterladen ppt "© Xiaoyi Jiang Informatik II – Datenstrukturen und Algorithmen 1 Kapitel 3 Elementare Datenstrukturen TexPoint fonts used in EMF. Read the TexPoint manual."

Ähnliche Präsentationen


Google-Anzeigen