Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.

Slides:



Advertisements
Ähnliche Präsentationen
Klassen - Verkettete Liste -
Advertisements

Algorithmen und Datenstrukturen
7. Natürliche Binärbäume
<d,a,s, ,i,s,t, ,e,i,n,e, ,L,i,s,t,e>
Kapitel 3: Listen Lineare Liste: endliche Folge von Elementen eines Grundtyps (n>=0), leere Liste falls n=0 Listenelemente besitzen.
Synonyme: Stapel, Keller, LIFO-Liste usw.
Gliederung Motivation / Grundlagen Sortierverfahren
Sortieren mit Binären Bäumen
Java: Dynamische Datentypen
Listen Richard Göbel.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (13 – Offenes Hashing) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (10 - Suchverfahren) T. Lauer.
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen
Halbzeit: Kurze Wiederholung
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (06 - Anwendungen von Stapeln und Schlangen) Prof. Th. Ottmann.
Sortieren vorsortierter Daten
Algorithmen und Datenstrukturen
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 9 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 4 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Anwendungen von Stapeln und Schlangen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (17 – Bäume: Grundlagen und natürliche Suchbäume) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 2 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (15 Hashverfahren: Verkettung der Überläufer) Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 – Kürzeste Wege) T. Lauer.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 13 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (07 - Skiplisten) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 12 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 16 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.

Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Operationen auf verketteten Listen
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Listen Prof. Dr. Christian Böhm in Zusammenarbeit mit Gefei Zhang
DVG Verkettete Listen Verkettete Listen. DVG Verkettete Listen 2 Primitive Datentypen Vorteile: –werden direkt vom Prozessor unterstützt.
Weiteres Programm Studium des Breitendurchlaufs Hierzu
Einführung in die Programmierung Datensammlung
Einfach verkettete Listen
Einfach verkettete Listen (OOP)
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik Dr. Wieland Schwinger
Abteilung für Telekooperation Übung Softwareentwicklung 1 für Wirtschaftsinformatik WS 200^8 Dr. Wieland Schwinger
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Thomas Hilpold: Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Algorithmen und Datenstrukturen 1 SS 2002
M a r c – o l i v e r p a h l Informatik II – Kapitel 12 „Sortier-Algorithmen“ Zusammenfassung des Kapitel 12 Küchlin, Weber, Einführung in die Informatik,
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
Programmiersprachen II Graph_Algorithmen Einführung Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Tutorium Software-Engineering SS14 Florian Manghofer.
 Präsentation transkript:

Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät für Angewandte Wissenschaften Albert-Ludwigs-Universität Freiburg Elementare Datenstrukturen

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann2 Lineare Listen (1) Lineare Anordnung von Elementen eines Grundtyps (elementarer Datentyp oder Grundklasse, etwa Object) Grundtyp ist oft weiter strukturiert, etwa class Grundklasse { int key; // eindeutiger Schluessel Infoklasse info; // weitere Informationen } Beispiele: Liste von Zahlen, Zeichenkette, Telefonbuch Operationen (Methoden) – Initialisieren (leere Liste,... ) – Länge bestimmen – Suchen (Inhalts-basiert), kann aktuelles Element festlegen – Positionieren (nach laufender Nummer),... – Einfügen, an gegebener oder aktueller Position – Entfernen,... – Verketten, Ausgeben, Teilliste bilden, Umkehren,...

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann3 Lineare Listen (2) Formalere Definition für Lineare Listen: X ; Grundmenge L = mit a i X ist linear angeordnete Liste mit Elementen aus X <> ist die leere Liste Vorgänger von a i ist a i-1, falls i 1 Nachfolger von a i ist a i+1, falls i n Länge von L = ist L = n, <> = 0 L.entferne(p) liefert L = mit L = n-1 L.einfüge(a, p) liefert L = mit L = n+1 L.suche(a) liefert true, falls a in L enthalten ist und false sonst (Alternative: liefert die erste Position p, an der a vorkommt, oder -1) das p-te Element wird aktuelles Element L.zugriff(p) liefert a p, falls 1 p n, und ist undefiniert sonst (Exception)

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann4 Implementierungen für Lineare Listen (1) Mit Hilfe von Arrays: Eigenschaften dieser Lösung: - Maximale Anzahl von Elementen vorgegeben (Länge des Arrays) Abhilfe: Dynamisierung - Schlechte Speicherplatzausnutzung für kurze Listen - Teure Verschiebeoperationen beim Einfügen/Entfernen von Elementen + Direkter Zugriff auf feste Positionen

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann5 Implementierungen für Lineare Listen (2) Zyklische Speicherung mit Hilfe von Arrays: Besondere Eigenschaften dieser Lösung: + Einfügen/Entfernen an den Listenenden in konstanter Zeit + Umkehren der Liste in konstanter Zeit Richtung leer Ende Anfang

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann6 Implementierungen für Lineare Listen (3) Mit Hilfe einfach verketteter (verlinkter) Elemente: speichere mit jedem Element einen Verweis auf das nächste oder null, falls das Element nicht existiert: Knoten: class node { Grundklasse content; node next; } Liste L: Verweis auf das erste Element der Kette Besondere Eigenschaften dieser Lösung: + Länge der Liste kann sich beliebig ändern - Kein direkter Zugriff auf Element an der Position p mehr möglich; nur Durchlaufen der Liste in O(p) InhaltVerweis L...

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann7 Einfach verkettete Lineare Listen (1) Einfaches Beispiel für Listen aus ganzen Zahlen: public interface IntList { public boolean empty (); // leer? public void first (); // erstes Element wird aktuell public void last (); // letztes Element wird aktuell public boolean hasCurrent (); // aktuelles Elemen bekannt? public int get (); // liefert aktuelles Element public void insert (int i); // nach aktuellem El. einfuegen public boolean search (int i); // Suchen nach i public boolean setPos (int p); // setze aktuelle Position auf p public boolean insert (int i, int p); // als p-tes El. einfuegen public boolean delete (int p); // p-tes Element loeschen public void remove (); // aktuelles Element loeschen public void print (); // Ausgabe aller Elemente }

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann8 Einfach verkettete Lineare Listen (2) class IntNode { // die Knotenklasse private int content; // Inhalt private IntNode next; // Nachfolger public IntNode (int i, IntNode n){ // Konstruktor content = i; // setzt Inhalt next = n; // und Nachfolger } public int getContent (){ // gibt Inhalt raus return content; } public void setContent (int i){ // setzt Inhalt content = i; } public IntNode getNext (){ // gibt Nachfolger raus return next; } public void setNext (IntNode n){ // setzt Nachfolger next = n; }

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann9 Einfach verkettete Lineare Listen (3)... headpredecessorcurrent. class LinkedIntList implements IntList { private IntNode Head, predecessor, current; public LinkedIntList (){ // Konstruktor Head = predecessor = current = null; } public boolean empty (){ // leer? return Head == null; } public void first (){ // erstes Element current = Head; // wird aktuell predecessor = null; } //...

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann10 Einfach verkettete Lineare Listen (4) public void last (){ // letztes Element IntNode h; // wird aktuell if (current == null) h = Head;// h auf Kopf oder else h = current.getNext (); // Nachfolger von current while (h != null){ predecessor = current; current = h; h = current.getNext (); } public boolean hasCurrent () { return current != null; } public int get () { // liefert aktuelles El. return current.getContent (); } //...

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann11 Einfach verkettete Lineare Listen (5) public void insert (int i){ // nach dem aktuellen predecessor = current; // Element einfuegen! if (current == null) current = Head = new IntNode (i, Head); else { current = new IntNode (i, predecessor.getNext ()); predecessor.setNext (current); } public boolean search (int i){ // Suchen nach i current = Head; predecessor = null; while (current != null) { if (current.getContent() == i) break; predecessor = current; current = current.getNext (); } if (current == null) predecessor = null; return current != null; } //...

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann12 Einfügen public void insert (int i){ // nach dem aktuellen predecessor = current; // Element einfuegen! if (current == null) current = Head = new IntNode (i, Head); else { current = new IntNode (i, predecessor.getNext ()); predecessor.setNext (current); }... headpredecessorcurrent.

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann13 Suchen public boolean search (int i){ // Suchen nach i current = Head; predecessor = null; while (current != null) { if (current.getContent() == i) break; predecessor = current; current = current.getNext (); } if (current == null) predecessor = null; return current != null; } headpredecessorcurrent.

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann14 Einfach verkettete Lineare Listen (6) public boolean setPos (int p){ // setze aktuelle Position auf p if (p <= 0) { predecessor = current = null; return p == 0; } first (); while (current != null) { if (--p == 0) break; predecessor = current; current = current.getNext (); } if (current == null) predecessor = null; return current != null; } public boolean insert (int i, int p){ // als p-tes Element einfuegen boolean ok = setPos(p-1); if (ok) insert (i); return ok; } //...

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann15 Einfach verkettete Lineare Listen (7) public boolean delete (int p){ // p-tes Element loeschen boolean ok = setPos(p); if (ok) remove (); return ok; } public void remove (){ IntNode h; if (current != null){ h = current.getNext (); if (h == null) if (predecessor == null) Head = null; else predecessor.setNext (null); else { current.setContent (h.getContent ()); current.setNext (h.getNext ()); } current = predecessor = null; } //...

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann16 Entfernen public void remove (){ IntNode h; if (current != null){ h = current.getNext (); if (h == null) if (predecessor == null) Head = null; else predecessor.setNext (null); else { current.setContent (h.getContent ()); current.setNext (h.getNext ()); } current = predecessor = null; }... headpredecessorcurrent.

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann17 Einfach verkettete Lineare Listen (8) public String toString (){ // Ausgabe aller Elemente String res= " "; IntNode h = Head; while (h != null) { res+=h.getContent() + " "; h = h.getNext (); } return res; }

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann18 Implementierungen für Lineare Listen (4) Mit Hilfe doppelt verketteter (verlinkter) Elemente: speichere mit jedem Element zwei Verweise auf das vorherige und nächste Element oder null, falls ein Element nicht existiert. Liste: headtail... Besondere Eigenschaften dieser Lösung: + Umkehren der Liste in (1) + Entfernen von Elementen leichter machbar + Einfügen/Entfernen/Zugriff am Anfang/Ende in (1) + Hintereinanderhängen von Listen in (1)

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann19 Doppelt verkettete Lineare Listen (1) Einfaches Beispiel für Liste aus beliebigen Objekten: class Dlist { private Dnode Head, Tail; // Anfang, Ende der Liste public Dlist (){ // Konstruktor, Head = Tail = null; // erzeugt leere Liste } public boolean empty (){ // falls Head == null, return Head == null; // dann auch Tail == null } public Dlist pushHead (Object o){ Dnode h = Head; // das alte Head Head = new Dnode (o); // das neue Head mit Inhalt if (Tail == null) Tail = Head; // falls Dlist vorher leer else { Head.connect (h); // sonst: verbinde Head mit h h.connect (Head); // und umgekehrt } return this; // erlaubt kaskadieren }

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann20 Doppelt verkettete Lineare Listen (2) public Dlist pushTail (Object o){ // wird mithilfe von reverse () reverse (); // auf pushHead() reduziert pushHead (o); // funktioniert & ist reverse (); // effizient return this; // erlaubt kaskadieren } public Object popHead (){ Dnode h = Head; // aufzugebendes El. Head = Head.getSingle (); // Head auf naechtes El. if (Head == null) Tail = null; // Dlist ist jetzt leer else Head.disconnect (h); // Verbindung loesen return h.getContent (); // Rueckgabewert } public Object popTail (){ // wird mithilfe von reverse () reverse (); // auf popHead() reduziert Object o = popHead (); reverse (); return o; }

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann21 Doppelt verkettete Lineare Listen (3) public Dlist concat (Dlist dl){ // Head von dl kommt an DIESEN Schwanz if (dl.Head != null){ // anders waeren wir schon fertig if (Head == null) Head = dl.Head;// falls DIES leer else { Tail.connect (dl.Head); // sonst: verbinden dl.Head.connect (Tail); } Tail = dl.Tail; // neuer Schwanz } return this; // erlaubt kaskadieren } public void reverse (){ // Vertauschen von Dnode h = Head; // Head und Tail Head = Tail; Tail = h; } }//class Dlist

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann22 Doppelt verkettete Lineare Listen (4) /******************************************************* * Ein Knoten (Dnode) hat ein Object als Inhalt und * (zwei Verweise auf) weitere Dnode Knoten. * Damit kann man doppelt verkettete Listen erzeugen. ******************************************************/ class Dnode{ private Object content; // sollen aussen nicht private Dnode linkA, linkB; // bekannt sein public Dnode (Object o){ // Konstruktor, Inhalt wird uebergeben content = o; // lege Inhalt ab linkA = linkB = null; // trage leere Verweise ein } public Object getContent (){ // Schnittstelle fuer Herausgabe return content; // des Inhalts } public Dnode getSingle (){ // gibt einzige Verbindung return getNext (null); // heraus }

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann23 Doppelt verkettete Lineare Listen (5) public Dnode getNext (Dnode dn){ // gibt die Verbindung raus if (linkA == dn) return linkB; // die *nicht* gleich dn ist else return linkA; } public void connect (Dnode dn){ // Dnode muss mindestens einen if (linkA == null && dn.linkA != this) linkA = dn; // link == null haben! else linkB = dn; } public void disconnect (Dnode dn){ // Dnode muss einen link if (linkA == dn) linkA = null; // auf Dnode haben else linkB = null; } }//class Dnode

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann24 Stacks (Stapel) und Queues (Schlangen) (1) OperationWirkungStackQueue Einfügungen L.pushHead(x) L.pushTail(x) Enfernungen L.popHead() L.popTail() Lesen L.top() L.bottom() Diverses L.init() L.empty()

Informatik II: Algorithmen und Datenstrukturen, SS 2008 Prof. Dr. Thomas Ottmann25 Stacks (Stapel) und Queues (Schlangen) (2) Anmerkungen: Sonderfälle bei einigen Methoden, falls L = <> L.pushHead(x).top() = x; Kellerspeicher Stapel: Last In First Out, LIFO Schlange: First In First Out, FIFO Implementierungen: Arrays Einfach oder doppelt verkettete Listen Subklassen bestehender Klassen,...