22
Programmieren in C Dynamische Listen / Bäume Hochschule Fulda – FB AI Sommersemester 2014 http://c-ai.rz.hs-fulda.de Peter Klingebiel, HS Fulda, DVZ

Programmieren in C Dynamische Listen / Bäume Hochschule Fulda – FB AI Sommersemester 2014 Peter Klingebiel, HS Fulda, DVZ

Embed Size (px)

Citation preview

Page 1: Programmieren in C Dynamische Listen / Bäume Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C

Dynamische Listen / Bäume

Hochschule Fulda – FB AI

Sommersemester 2014

http://c-ai.rz.hs-fulda.de

Peter Klingebiel, HS Fulda, DVZ

Page 2: Programmieren in C Dynamische Listen / Bäume Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 2

Dynamische Listen 1

• Häufig ist die Anzahl der zu speichernden und zu bearbeitenden Daten erst zur Laufzeit des Programms bekannt

• Felder ungeeignet: müssen zur Compilezeit oder in Blöcken dimensioniert werden

dynamische Datenstrukturen– einfach verkettete Listen– doppelt verkettete Listen – Bäume– usw.

Page 3: Programmieren in C Dynamische Listen / Bäume Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 3

Dynamische Listen 2

• Beispiel: einfach verkettete Liste/* Datentyp f. einfach verkettete Liste */ typedef struct _slist { int value; /* Daten */ struct slist *next; /* Nachfolger */} slist;

• Beispiel: doppelt verkette Liste/* Datentyp f. doppelt verkettete Liste */typedef struct _dlist { int value; /* Daten */ struct dlist *prev; /* Vorgaenger */ struct dlist *next; /* Nachfolger */} dlist;

Page 4: Programmieren in C Dynamische Listen / Bäume Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 4

Dynamische Listen 3

• Objekte der Listentypen werden zur Laufzeit – alloziertslist *insert(slist *llp, int value){ slist *nlp; nlp = (slist *) malloc(sizeof(slist));

– besetzt bzw. initialisiert nlp-> value = value; nlp->next = NULL;

– und in die Liste eingehängt if(llp) llp->next = nlp; return(nlp);}

Page 5: Programmieren in C Dynamische Listen / Bäume Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 5

Dynamische Listen 4

• Einfache Liste: Erzeugung 1. Element

Page 6: Programmieren in C Dynamische Listen / Bäume Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 6

Dynamische Listen 5

• Einfache Liste: 2. Element und Verkettung

Page 7: Programmieren in C Dynamische Listen / Bäume Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 7

Dynamische Listen 6

• Einfache Liste: 3. Element und Verkettung

Page 8: Programmieren in C Dynamische Listen / Bäume Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 8

Dynamische Listen 7

• Einfache Liste: 4. Element und Verkettung

Page 9: Programmieren in C Dynamische Listen / Bäume Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 9

Dynamische Listen 8

• Einfache Liste: 5. Element und Verkettung

Page 10: Programmieren in C Dynamische Listen / Bäume Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 10

Dynamische Listen 9

• Einfache Liste: Verkettung zum Ringpuffer

Page 11: Programmieren in C Dynamische Listen / Bäume Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 11

Dynamische Listen 10

• Erstes Element wird oft Wurzel, Anker oder Kopf der Liste genannt

• Durchlaufen der Liste i.d.R. von der Wurzel der Liste ausslist *root, *slp;for(slp = root; slp; slp = slp->next) printf("%d\n", slp->value);

• Wird das letzte Listenobjekt mit der Wurzel verlinkt Ringpuffer

• Sortieren bei Erzeugen der Liste möglich

Page 12: Programmieren in C Dynamische Listen / Bäume Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 12

Dynamische Listen 11

• slist.c - einfach verkettete Liste

Page 13: Programmieren in C Dynamische Listen / Bäume Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 13

Dynamische Listen 12

• sortlist.c - einfach verkettete sortierte Liste

Page 14: Programmieren in C Dynamische Listen / Bäume Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 14

Dynamische Listen 13

• Doppelte Liste: Erzeugung 1. Element

Page 15: Programmieren in C Dynamische Listen / Bäume Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 15

Dynamische Listen 14

• Doppelte Liste: 2. Element und Verkettung

Page 16: Programmieren in C Dynamische Listen / Bäume Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 16

Dynamische Listen 15

• Doppelte Liste: 3. Element und Verkettung

Page 17: Programmieren in C Dynamische Listen / Bäume Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 17

Dynamische Listen 16

• Doppelte Liste: 4. Element und Verkettung

Page 18: Programmieren in C Dynamische Listen / Bäume Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 18

Dynamische Listen 17

• Doppelte Liste: Verkettung zum Ringpuffer

Page 19: Programmieren in C Dynamische Listen / Bäume Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 19

Dynamische Listen 18

• dlist1.c - doppelt verkettete Liste

Page 20: Programmieren in C Dynamische Listen / Bäume Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 20

Dynamische Listen 19

• dlist2.c - doppelt verk. Liste als Ringpuffer

Page 21: Programmieren in C Dynamische Listen / Bäume Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 21

Dynamische Listen 20

• Binäre Bäume

Page 22: Programmieren in C Dynamische Listen / Bäume Hochschule Fulda – FB AI Sommersemester 2014  Peter Klingebiel, HS Fulda, DVZ

Programmieren in C - Peter Klingebiel - HS Fulda - DVZ 22

Dynamische Listen 21

• wordcount.c - sortierter binärer Baum