C- Kurs 09 Dynamische Datenstrukturen

Ähnliche Dokumente
Programmierung mit C Zeiger

Grundlagen der Informatik. Prof. Dr. Stefan Enderle NTA Isny

Advanced Programming in C

Theoretische Informatik 1 WS 2007/2008. Prof. Dr. Rainer Lütticke

7. Organisation von Informationen

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

Algorithmen und Datenstrukturen (für ET/IT)

C- Kurs 07 Höhere Datentypen

Praxis der Programmierung

Algorithmen und Datenstrukturen

Nachname: Vorname: Matr.-Nr.: Punkte: 1. Aufgabe: ( / 25 Pkt.) Gegeben ist das folgende Struktogramm zur Berechnung von sin(x) mit Hilfe einer Reihe.

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

[Strukturen] Vereinbarung Verwendung Operationen mit struct Zeiger auf struct Strukturen auf dem Heap Datenstrukturen gebildet mit struct union

Schwerpunkte. Verkettete Listen. Verkettete Listen: 7. Verkettete Strukturen: Listen. Überblick und Grundprinzip. Vergleich: Arrays verkettete Listen

6. Verkettete Strukturen: Listen

Logische Datenstrukturen

Vorlesung Datenstrukturen

C- Kurs 08 Zeiger. Dipl.- Inf. Jörn Hoffmann leipzig.de. Universität Leipzig Ins?tut für Informa?k Technische Informa?

Algorithmen und Datenstrukturen 2. Dynamische Datenstrukturen

Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der Größe

Betriebssysteme, Rechnernetze und verteilte Systeme 1. Crashkurs C (2)

Grundlagen der Informatik 12. Strukturen

Übungspaket 32 Einfach verkettete, sortierte Liste

Einführung in die Informatik 2

Variablen. Deklaration: «Datentyp» «Variablenname» Datentyp bestimmt Größe in Bytes: sizeof Beispiel: long int v; Größe: 4 Bytes

Programmierung mit C Strukturen

12. Dynamische Datenstrukturen

Programmieren in C Dynamische Listen / Bäume

Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15

Programmierkurs C++ Datenstrukturen Seite 1

Zeiger und dynamischer Speicher

Informatik I (D-MAVT)

Wiederholung: Zusammenfassung Felder. Algorithmen und Datenstrukturen (für ET/IT) Definition Abstrakter Datentyp. Programm heute

Binärbäume: Beispiel

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Datenstrukturen. einfach verkettete Liste

Konzepte der Programmiersprachen

Zeiger. C-Kurs 2012, 2. Vorlesung. Tino Kutschbach 10.

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

Algorithmen und Datenstrukturen

C für Java-Programmierer

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Informatik II Prüfungsvorbereitungskurs

ALP II Dynamische Datenmengen Datenabstraktion

ContainerDatenstrukturen. Große Übung 4

Punkte. Teil 1. Teil 2. Summe. 1. Zeigen Sie, dass der untenstehende Suchbaum die AVL-Bedingung verletzt und überführen Sie ihn in einen AVL-Baum.

Stand der Vorlesung. Vergleich verkettete Liste und sequentielle Liste

11. Elementare Datenstrukturen

Technische Universität München

Einführung in die Programmierung zusammengesetzte Datentypen, dynamischer Speicher

Felder, Zeiger und Adreßrechnung

Graphdurchmusterung, Breiten- und Tiefensuche

Programmieren in C. Rekursive Strukturen. Prof. Dr. Nikolaus Wulff

Counting - Sort [ [ ] [ [ ] 1. SS 2008 Datenstrukturen und Algorithmen Sortieren in linearer Zeit

Einführung in die Programmierung II. 5. Zeiger

C- Kurs 03 Ausdrücke und Operatoren

8. Referenzen und Zeiger

C- Kurs 04 Anweisungen

Datenstrukturen Teil 1. Arrays, Listen, Stapel und Warteschlange. Arrays. Arrays. Array

Übungspaket 29 Dynamische Speicherverwaltung: malloc() und free()

Crashkurs C++ - Teil 1

Willkommen zur Vorlesung. Algorithmen und Datenstrukturen

C++ - Objektorientierte Programmierung Konstante und statische Elemente

1. Einfach verkettete Liste unsortiert 2. Einfach verkettete Liste sortiert 3. Doppelt verkettete Liste sortiert

Übersicht. Datenstrukturen und Algorithmen. Übersicht. Heaps. Vorlesung 8: Heapsort (K6) Joost-Pieter Katoen. 7. Mai 2015

Datenstrukturen. Mariano Zelke. Sommersemester 2012

Propädeutikum. Dipl.-Inf. Frank Güttler

ALP II Dynamische Datenmengen Datenabstraktion (Teil 2)

Einstieg in die Informatik mit Java

Algorithmen und Datenstrukturen SoSe 2008 in Trier. Henning Fernau Universität Trier

7 Funktionen. 7.1 Definition. Prototyp-Syntax: {Speicherklasse} {Typ} Name ({formale Parameter});

Einführung in die Informatik I

Doppelt verkettete Listen (1)

6 ZEIGER UND REFERENZEN - ALLGEMEINES

structure-type-specifier struct [ identifier ] { struct-declaration-list } struct identifier struct-declaration-list struct-declaration

8 Elementare Datenstrukturen

FH Ravensburg-Weingarten Schriftlich Prüfung Programmieren

Übungen zu Programmierung I - Blatt 8

Listen. Für die Verarbeitung von Listen durch den Rechner ist relevant:

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Programmiertechnik II

Angewandte Mathematik und Programmierung

F Zeiger, Felder und Strukturen in C

Listen. Arrays. Deklaration. Einfach verkettete Listen

Einführung in die Programmierung Konstanten, dynamische Datenstrukturen. Arvid Terzibaschian

Berichte aus der Informatik. Dieter Pawelczak. Start in die C-Programmierung

einlesen n > 0? Ausgabe Negative Zahl

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Teil 5: Zeiger, Felder, Zeichenketten Gliederung

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

Informatik 1 ( ) D-MAVT F2010. Schleifen, Felder. Yves Brise Übungsstunde 5

Bäume, Suchbäume und Hash-Tabellen

14. Rot-Schwarz-Bäume

2. Programmierung in C

II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )

Algorithmen und Datenstrukturen I Bruder-Bäume

Hydroinformatik I: Referenzen und Zeiger

Einführung in die Programmierung für Physiker. Die Programmiersprache C Strukturen ("struct...")

Programmieren in Java -Eingangstest-

Transkript:

C- Kurs 09 Dynamische Datenstrukturen Dipl.- Inf. Jörn Hoffmann jhoffmann@informaak.uni- leipzig.de Universität Leipzig InsAtut für InformaAk Technische InformaAk

Flexible Datenstrukturen Institut für Informatik Dynamische Datenstrukturen Strukturen, die zur Laufzeit angelegt werden Skalierbar, Flexibel Benötigen zusätzliche Verwaltungs- und Zugriffsoperationen Inhalt 1. Elementzugriff *(ptr). ó ptr-> 2. Funktionszeiger int (*ptr)(int); 3. Lineare Listen knoten->; 4. Bäume knoten->a knoten->b; Jörn Hoffmann C-Kurs Folie 2

Zeiger Elementzugriff Syntax *(Strukturzeiger).Komponenten; Strukturzeiger -> Komponenten ; Semantik Zugriff auf die Komponente einer struct bzw. union, auf die der Strukturzeiger verweist Vereinfachung der Schreibweise der beiden Operationen 1. Zeiger Dereferenzierung 2. Komponentenzugriff Jörn Hoffmann C-Kurs Folie 3

Zeiger Elementzugriff Beispiel // zugriff.c typedef struct { char name[100]; int alter; } person_t; person_t pers = { Max, 25}; person_t *ptr = &pers; printf ( pers.name = %s, pers.alter = %d\n, pers.name, pers.alter); printf ( ptr->name = %s, ptr->alter = %d\n, ptr->name, ptr->alter); Jörn Hoffmann C-Kurs Folie 4

Funktionszeiger Institut für Informatik Syntax Deklaration : Rückgabetyp (*Funktionszeigervariable)( Parameterliste ) Zuweisung : Funktionszeigervariable = Funktionsname; Aufruf : Funktionszeigervariable (Parameter); Semantik Deklarieren einer Zeigervariablen, die auf eine Funktion mit dem angegebene Rückgabetypen und Parameterliste verweisen kann. Zuweisen des Funktionszeigers einfach über Angabe des Funktionsnamens Aufruf analog wie bei Funktion direkt Nutzen Wiederverwendung einer Implementierung Generische Programmierung Jörn Hoffmann C-Kurs Folie 5

Beispiel // funktionszeiger.c #include <stdio.h> void printzahl(int zahl) { printf("%d\n", zahl); } int main() { int (*ptr1) (const char*,...) = printf; void (*ptr2)(int) = printzahl; ptr1("hallo Welt\n"); // Aufruf (*ptr2)(2); // Aufruf (alternativ) return 0; } Jörn Hoffmann C-Kurs Folie 6

Flexible Datenstrukturen Zweck Anforderung Programm zur Verwaltung von Kunden benötigt Viele Kunden Hohes Neuaufkommen von Kunden Suche und Sortierung nötig Jörn Hoffmann C-Kurs Folie 7

Statisches Array Institut für Informatik 1. Lösung (Statisches Array) typedef struct { int knr; char *name; /*... */ }kunde_t; // Statisches Array kunde_t kundendaten[10000]; Eigenschaften Einfach Speicherverschwendung Keine flexible Verwaltung Aufwändige Sortierung und Suche Jörn Hoffmann C-Kurs Folie 8

Dynamisches Array Institut für Informatik 2. Lösung (Dynamisches Array) typedef struct { int knr; char *name; /*... */ }kunde_t; // Dynamisches Array (Halbstatisch) kunde_t *kundendaten = malloc(anzahlkunden * sizeof(kunde_t)); Eigenschaften Bedarfsgerechte Speichernutzung Aufwändiges Umkopieren bei neuen Kunden Aufwändige Sortierung und Suche Jörn Hoffmann C-Kurs Folie 9

Lineare Liste Institut für Informatik 3. Lösung (Lineare Liste) typedef struct _knoten { kunde_t ; struct _knoten *; } knoten_t; // Lineare Liste knoten_t *k1 = malloc(sizeof(knoten_t)); knoten_t *k2 = malloc(sizeof(knoten_t)); k1. = k2; k2. = ; Eigenschaften Flexibel, Skalierbar Geringer Mehraufwand durch indirekte Zeigerzugriffe Jörn Hoffmann C-Kurs Folie 10

Lineare Liste Institut für Informatik Lineare Liste Dynamische Datenstruktur Verwaltung von Elementen eines Typs Verknüpft durch Zeiger Kopf-Zeiger bestimmt aktuelle Einfügeposition Letztes Element verweist auf *kopf *(kopf.) kopf Jörn Hoffmann C-Kurs Folie 11

Lineare Liste Einfügen (Idee) Einfügen Ermittlung des Einfügeplatzes Änderung von zwei Verweisen (1) Vorgänger auf neues Element verweisen (2) Nachfolger im neuen Element setzen Neuer Knoten (1) (2) *kopf Listenende kopf Jörn Hoffmann C-Kurs Folie 12

Lineare Liste Einfügen 0. Funktion Aufrufen Funktion aufrufen Parameter kopf zeigt auf Anfang der Liste Parameter neuerknoten wird fertig initialisiert übergeben Element-Wert wird für Vergleiche benötig neu *kopf * *... kopf Jörn Hoffmann C-Kurs Folie 13

Lineare Liste Einfügen 1. Einfügeplatz finden Liste mittels Schleife durchsuchen Entscheidung ob aktueller Knoten durch Neuen ersetzen werden soll Falls ja, Suche beenden Falls nein, Speicheradresse des Next-Zeigers in Hilfszeiger ablegen Nächsten Knoten wählen neu hilf *kopf * *... kopf Jörn Hoffmann C-Kurs Folie 14

Lineare Liste Einfügen 2. Knoten einfügen Wert des -Zeigers vom neuen Knoten auf aktuellen Knoten setzen neu hilf *kopf *, neu-> * kopf... Jörn Hoffmann C-Kurs Folie 15

Lineare Liste Einfügen 3. Vorgänger anpassen Next-Zeiger vom Vorgängerknoten auf neuen Knoten setzen Dieser kann mittels Hilfszeiger direkt manipulieren werden neu hilf *kopf *, neu-> *... kopf Jörn Hoffmann C-Kurs Folie 16

Lineare Liste Einfügen 4. Liste anpassen Kopf muss angepasst werden, falls es keinen Vorgänger gab Kann ebenfalls über Hilfszeiger direkt manipuliert werden Hilfszeiger muss am Anfang auf Kopf verweisen neu hilf neu-> *... kopf Jörn Hoffmann C-Kurs Folie 17

Lineare Liste Einfügen 4. Fertig Knoten ist jetzt eingefügt Kopf wurde möglicherweise verändert *kopf * *... kopf Jörn Hoffmann C-Kurs Folie 18

Lineare Liste Beispiel void knoteneinfuegen(knoten_t **kopf, knoten_t *neuerknoten) { knoten_t **hilf, *knoten; // Aktuellen Knoten auf Listenanfang setzen knoten = *kopf; hilf = kopf; // Finden der Einfügeposition while (knoten = ) { if(knoten-> > neuerknoten->)// Vergleich zur Entscheidung break; hilf = &knoten->; // Adresse des Next-Zeiger speichern (kann direkt manipuliert werden) knoten = knoten->; // Nächster Knoten } // Vorhandene Knoten an neuen Knoten anfügen neuerknoten-> = knoten; // Vorgänger bzw. Kopf direkt anpassen *hilf = neuerknoten; } Jörn Hoffmann C-Kurs Folie 19

Lineare Listen Typen Einfach verkettete lineare Listen anfang... Keller ( Stack, lifo-prinzip, last in first out): Elemente können nur am Anfang angehängt und entfernt werden. Warteschlange ( Queue, fifo-prinzip, first in first out): Elemente werden stets am Ende angehängt und am Anfang entfernt. Jörn Hoffmann C-Kurs Folie 20

Lineare Listen Typen Zyklisch verkettete lineare Listen (Listenende zeigt auf den Anfang): anfang... Doppelt verkettete lineare Listen (Verweis auf Vorgänger und Nachfolger):......... Mehrfach verkettete lineare Listen (Verweis auf die nächste Gruppe von Elementen):......... Allgemeine Listen erhält man, wenn man als Datentyp der Elemente wiederum Listen zulässt. C-Kurs Folie 21

Bäume Institut für Informatik Wurzel Blatt Jörn Hoffmann C-Kurs Folie 22

Bäume Institut für Informatik Bäume Wurzel Ist Ausgezeichnetes Element (Zugriffspunkt) Hat keine Vorgänger Element Blatt Hat genau ein Vorgänger Hat beliebig viele Nachfolger ist Element ohne Nachfolger Blätter können unterschiedliche Tiefe besitzen Jörn Hoffmann C-Kurs Folie 23

Bäume Binärbäume Binärbaum Alle Elemente besitzen höchstens zwei Nachfolger Viele Strategien zum Suchen, Einfügen, Entfernen von Elementen bekannt Insb. um große Datenmengen schnell zu verarbeiten Programmiertechnisch aufwendig Wurzel Blatt Jörn Hoffmann C-Kurs Folie 24