Lineare Liste. struct list_element { float f; /* weitere Elemente */ struct list_element *next; /* Zeiger auf Nachfolger-Element */ }; Peter Sobe

Ähnliche Dokumente
Datenstrukturen, Listen und Bäume

2. Programmierung in C

2. Programmierung in C

7. Dynamischer Speicher und Datenstrukturen

Vorlesung Datenstrukturen

Algorithmen und Datenstrukturen. Bäume. M. Herpers, Y. Jung, P. Klingebiel

Algorithmen und Datenstrukturen 2. Dynamische Datenstrukturen

Übung Algorithmen und Datenstrukturen

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Übersicht: Graphen. Definition: Ungerichteter Graph. Definition: Ungerichteter Graph

Datenstrukturen. einfach verkettete Liste

Algorithmen und Datenstrukturen

Wiederholung. Datenstrukturen und. Bäume. Wiederholung. Suchen in linearen Feldern VO

Teil 1: Suchen. Ausgeglichene Bäume B-Bäume Digitale Suchbäume. M.O.Franz, Oktober 2007 Algorithmen und Datenstrukturen - Binärbäume 1-1

Natürliche Bäume. (Algorithmen und Datenstrukturen I) Prof. Dr. Oliver Braun. Letzte Änderung: :16. Natürliche Bäume 1/16

Motivation Binäre Suchbäume

Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. B4.1 Definitionen und Eigenschaften. B4.2 Traversierung. B4.

13. Bäume: effektives Suchen und Sortieren

13. Bäume: effektives Suchen und Sortieren

Algorithmen und Datenstrukturen 1

Binärbäume: Beispiel

Einführung in die Programmierung II. 9. Dynamische Datenstrukturen: Binärbäume

EINI LogWing/WiMa. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 17/18

Logische Datenstrukturen

Datenstrukturen Teil 2. Bäume. Definition. Definition. Definition. Bäume sind verallgemeinerte Listen. Sie sind weiter spezielle Graphen

18. Natürliche Suchbäume

Datenstrukturen & Algorithmen Lösungen zu Blatt 4 FS 15

9. Natürliche Suchbäume

Datenstrukturen & Algorithmen

Algorithmen und Datenstrukturen

Datenstrukturen und Algorithmen

Informatik II Prüfungsvorbereitungskurs

Vorlesung Informatik 2 Algorithmen und Datenstrukturen

Praxis der Programmierung

EINI LW. Einführung in die Informatik für Naturwissenschaftler und Ingenieure. Vorlesung 2 SWS WS 11/12

Informatik II, SS 2014

Datenstrukturen und Algorithmen SS07

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. B3.1 Einführung. B3.2 Verkettete Liste. B3.3 Bäume

Technische Universität München. Vorlesungsgrobstruktur: wo stehen wir, wie geht s weiter

Algorithmen und Datenstrukturen (Th. Ottmann und P. Widmayer)

Bäume 1. Thomas Röfer

Algorithmen und Datenstrukturen

Datenstrukturen Teil 3. Traversierung und AVL- Bäume. Traversierung. Traversierung. Traversierung

2.4 Durchlaufen von Bäumen

Pro Informatik 2009: Objektorientierte Programmierung Tag 18. Marco Block-Berlitz, Miao Wang Freie Universität Berlin, Institut für Informatik

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Suchen. Lineare Suche. Such-Algorithmen. Sommersemester Dr.

Kurs 1663 Datenstrukturen" Musterlösungen zur Klausur vom Seite 1. Musterlösungen zur Hauptklausur Kurs 1663 Datenstrukturen 15.

Informatik II, SS 2016

Algorithmen & Datenstrukturen

Vorlesung Datenstrukturen

Kapitel 12: Induktive

Informatik II Prüfungsvorbereitungskurs

Einfache binäre Suchbäume können entarten, so dass sich die Tiefen ihrer Blattknoten stark unterscheiden

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2012/13. Prof. Dr. Sándor Fekete

B6.1 Introduction. Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. B6.1 Introduction. B6.3 Analyse. B6.4 Ordnungsbasierte Methoden

Algorithmen und Datenstrukturen 1-5. Seminar -

(a, b)-bäume / 1. Datenmenge ist so groß, dass sie auf der Festplatte abgespeichert werden muss.

Algorithmen und Datenstrukturen Suchbaum

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Entartete Suchbäume. Beispiel: Balancieren von Suchbaum. Wintersemester 2012/13

ADS: Algorithmen und Datenstrukturen

Dr. Lars Hildebrand Fakultät für Informatik Technische Universität Dortmund

Trees. November 14, Algorithms & Datastructures 2 Exercises WT 2017

Binäre Bäume Darstellung und Traversierung

Trees. November 13, Algorithms & Datastructures 2 Exercises WT 2017

Software Entwicklung 1

13. Binäre Suchbäume

7. Dynamische Datenstrukturen Bäume. Informatik II für Verkehrsingenieure

Bäume und der Sequence ADT

Algorithmen und Datenstrukturen (für ET/IT)

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2017/18. Pro f. Dr. Sán do r Fe k e te

C- Kurs 09 Dynamische Datenstrukturen

Algorithmen und Datenstrukturen. Algorithmen und Datenstrukturen. B6.1 Einführung. B6.2 Symboltabellen. B6.3 Einfache Implementationen

Übung Algorithmen und Datenstrukturen

Aufgaben, Hilfestellungen und Musterlösungen zum Modul 5 Druckversion

1. Motivation / Grundlagen 2. Sortierverfahren 3. Elementare Datenstrukturen / Anwendungen 4. Bäume / Graphen 5. Hashing 6. Algorithmische Geometrie

! 1. Rekursive Algorithmen.! 2. Rekursive (dynamische) Datenstrukturen. II.3.2 Rekursive Datenstrukturen - 1 -

Datenstrukturen und Algorithmen SS17 Lösung - Übung 5

Übung Algorithmen und Datenstrukturen

Kapitel 4: Bäume i. 1. Einleitung. 2. Ein Datenmodell für Listen. 3. Doppelt-verkettete Listen. 4. Bäume. 5. Das Collections-Framework in Java

Verkettete Datenstrukturen: Bäume

Stud.-Nummer: Datenstrukturen & Algorithmen Seite 1

Algorithmen und Datenstrukturen

Bäume, Anwendung und Begriffe

Kapitel 4: Dynamische Datenstrukturen. Algorithmen und Datenstrukturen WS 2017/18. Pro f. Dr. Sán do r Fe k e te

Algorithmen und Datenstrukturen

Einführung in die Informatik 2

Algorithmen und Datenstrukturen (für ET/IT) Wiederholung: Ziele der Vorlesung. Wintersemester 2012/13. Dr. Tobias Lasser

1. Rekursive Algorithmen 2. Rekursive (dynamische) Datenstrukturen

Wiederholung. Bäume sind zyklenfrei. Rekursive Definition: Baum = Wurzelknoten + disjunkte Menge von Kindbäumen.

Bäume. Text. Prof. Dr. Margarita Esponda SS 2012 O4 O5 O6 O ALP2-Vorlesung, M. Esponda

AVL-Bäume. (Algorithmen und Datenstrukturen I) Prof. Dr. Oliver Braun. Letzte Änderung: :16. AVL-Bäume 1/38

Transkript:

Lineare Liste Zeigertechnik zum dynamischen Herstellen und Lösen von Verbindungen zwischen Datenelementen Einsatz des Verbundtyps struct {...} in Kombination mit Zeigern. Da das Element selbst eine Struktur ist, muss der Zeiger auf das nächste Element auch vom gleichen Strukturtyp sein, z.b. struct list_element { float f; /* weitere Elemente */ struct list_element *next; /* Zeiger auf Nachfolger-Element */ }; Peter Sobe 1

Lineare Liste Element 1 Element 2 Element 3 Listenelement struct list_element { float f; char position[strlen]; Element struct list_element *next; }; typedef struct list_element list_elem_t; list_elem_t *anker = NULL; Peter Sobe 2

Lineare Liste - Definition Eine Liste ist eine verkettete Folge von Elementen, die aus Standarddatentypen zusammengesetzt sind und für die gilt: 1. Es gibt genau ein Listenelement, das keinen Vorgänger hat und Listenanfang heißt. Auf dieses Element zeigt der Listenanker. 2. Es gibt genau ein Listenelement, das keinen Nachfolger hat und Listenende heißt. 3. Die übrigen Listenelemente haben genau einen Vorgänger und genau einen Nachfolger. 4. Alle Listenelemente sind vom Listenanker aus durch Nachfolgerbildung in endlich vielen Schritten erreichbar. Peter Sobe 3

Operationen mit Listen Als typische Operationen mit Listen gelten: Erzeugen und Einketten eines Listenelements Traversieren einer Liste Ausketten und Löschen eines Listenelements Suchen eines Listenelements Weitere: Anhängen einer Liste an eine Liste Peter Sobe 4

Erzeugen und Einketten eines neuen Elements list_elem_t *create(list_elem_t x) { list_elem_t *neu; neu= (list_elem_t*) malloc(sizeof list_elem_t); *neu=x; return neu; } Aufruf: list_elem_t daten = {23.5, Waldhausen,NULL}; list_elem_t *ne = create(daten); insert(pos, ne); Peter Sobe 5

Einketten eines Listenelements void insert(list_elem_t *pos, list_elem_t *neu) { /* pos zeigt auf das Listenelement, hinter dem das Listenelement neu eingekettet werden soll */ neu->next=pos->next; pos->next = neu; } pos->next = neu pos neu neu->next = pos->next Noch nicht berücksichtigt: Einfügen in leere Liste und Einfügen an erster Positition Peter Sobe 6

Ausketten und Löschen eines Listenelements void dequeue(list_elem_t *pos) { /* pos zeigt auf Element vor dem auszukettenden Element */ list_elem_t *h; h=pos->next; pos->next=(pos->next)->next; free(h); } h = pos->next; pos pos->next = pos->next->next; free(h) Gesonderte Behandlung erforderlich, wenn erstes Element auszuketten ist und wenn einziges (letztes) Element ausgekettet wird. Peter Sobe 7

Suchen eines Listenelements list_elem_t *find(list_elem_t *anker, char *suchpos) { list_elem_t *a; a=anker; while (a!=null) { if (strcmp(a->posítion, suchpos)==0) return a; /*Element a gefunden*/ a=a->next; } return NULL; /* nichts gefunden */ } a a=a->next Peter Sobe 8

Traversieren einer Liste void traverse( list_elem_t *anker, void (*f)(list_elem_t *e) ) { list_elem_t *a; a=anker; while (a!=null) { /* mache etwas mit dem aktuellen Element */ (*f)(a); /* hier können auch direkt auszuf. Anweisungen stehen */ a=a->next; } } Peter Sobe 9

Nichtlineare dynamische Datenstrukturen Eine nichtlinear verkettete Menge von Elementen, die aus Standarddatentypen zusammengesetzt sind, nennt man nichtlineare dynamische Datenstruktur. Solche Strukturen sind vor allem: Bäume (Binärbäume, allg. Bäume) typisch für diese Strukturen ist die Anordnung als Hierarchie, d.h. zwischen den Elementen besteht noch eine Halbordnungsrelation Graphen netzartige Strukturen als allgemeinster Fall. Peter Sobe 10

Nichtlineare dynamische Datenstrukturen Viele Anwendungsalgorithmen basieren auf solchen nichtlinearen Strukturen. Bei netzartigen Graphstrukturen müssen diese Algorithmen mit erschöpfendem Durchsuchen aller Möglichkeiten arbeiten. Das erfordert programmseitig spezielle Hilfen (globale stacks). Bei Hierarchien (Bäume) reicht die einfache Rekursivität aus. Bei vielen Sonderfällen in Hierarchien nutzt man die s.g. Teile-und- Herrsche-Algorithmen. Diese Algorithmen teilen den aktuellen Bearbeitungsraum in Teilbearbeitungsräume und wenden dann den gleichen Algorithmus rekursiv auf die Teile an (herrschen), solange bis eine weitere Teilung nicht mehr sinnvoll ist. Beispiel: Binärbäume Peter Sobe 11

Binärer Baum und Rekursion (1) Wurzel B 0 Linker Teilbaum B 0L Rechter Teilbaum B 0R Binärbaum über Knotenmenge V B 0 = (W 0, B 0L,B 0R ) (W 0,, ) B x = (W x, B xl,b xr ) (W x,, ) mit W 0,B 0, W x,b x, ε V und als leeres Element Indizes werden durch Aneinandereihung gebildet, z.b. x=0l xl = 0LL, x=0r xl = 0RL usw. Ein Baum ist entweder ein einzelner Knoten oder ein als Wurzel dienender Knoten, der mit einer Menge von Bäumen verbunden ist. (beim Binärbaum mit zwei Teilbäumen verbunden) Peter Sobe 12

Binärer Baum und Rekursion (2) Verschiedene Strategien zum Traversieren des Baums Preorder: 1. Besuche die Wurzel des Baumes 2. Besuche den linken Teilbaum 3. Besuche den rechten Teilbaum 1 2 3 4 5 6 7 Peter Sobe 13

Binärer Baum und Rekursion (3) Verschiedene Strategien zum Traversieren des Baums Inorder (Symmetrische Strategie): 1. Besuche den linken Teilbaum 2. Besuche die Wurzel 3. Besuche den rechten Teilbaum 4 2 6 1 3 5 7 Peter Sobe 14

Binärer Baum und Rekursion (4) Verschiedene Strategien zum Traversieren des Baums Postorder: 1. Besuche den linken Teilbaum 2. Besuche den rechten Teilbaum 3. Besuche die Wurzel 7 1 2 3 6 4 5 Peter Sobe 15

Binärer Baum und Rekursion (5) Strategien zum Traversieren des Baums (Fortsetzung) Alle bisherigen Verfahren besuchen entweder tiefe Knoten oder links stehende Knoten zuerst. Bei Suchbäumen werden Lösungen u.u. erst spät gefunden. Level-Order-Traversierung: Besuche die Knoten von links nach rechts innerhalb einer Ebene, danach die jeweils tiefere Ebene. Diese Reihenfolge wird nicht durch Zeiger in innerhalb der Baumstruktur unterstützt Diese Reihenfolge wird auch nicht durch Rekursion unterstützt Peter Sobe 16

Binärer Baum mit sortierten Daten (1) Baum-Elemente: ID Daten Zeigerlinks Zeigerrechts Zeiger auf Baum-Wurzel: 15 8 20 4 12 17 23 NULL-Zeiger, wenn Nachfolge-Elemente nicht vorhanden: Peter Sobe 17

Binärer Baum mit sortierten Daten (2) Suchen eines Elements mit ID=x im sortierten Binärbaum: Knoten = Wurzel Aufsuchen Knoten: falls ID==x dann gefunden, Ende falls x<id: Verfolge Zeiger-links falls x>id: Verfolge Zeiger-rechts Nach Verfolge wird der jeweilige Knoten nach o.g. Regel besucht, solange bis Knoten mit ID gefunden oder ein Verfolgen auf den NULL-Zeiger trifft. Dann ist das gesuchte Element im Baum nicht vorhanden. Peter Sobe 18

Bewertung Binärbaum Beispiel: 15 Wurzel 8 20 4 12 17 23 2 6 10 14 16 19 21 26 im Bild allgemein Berechnung Anzahl Ebenen 4 e Konstruktionsparameter Anzahl Elemente 15 n = 2 e -1 Schritte zum Finden eines Elements 4 (inkl. Zugriff auf Wurzel) s=e s = log 2 n Peter Sobe 19