• Keine Ergebnisse gefunden

1 Beispiel: Verkettete Listen (Linked Lists) Einfügen Entfernen (ohne Löschen)

N/A
N/A
Protected

Academic year: 2021

Aktie "1 Beispiel: Verkettete Listen (Linked Lists) Einfügen Entfernen (ohne Löschen)"

Copied!
1
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

1

G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Pointer & Co, 32

Beispiel: Verkettete Listen (Linked Lists)

Sehr häufige dynamische Datenstruktur

Besteht aus Folge von (gleichartigen) Elementen

Jedes kennt Vorgänger und Nachfolger

Man kennt den Anfang (Kopf, head) der Liste

4 count

first List

'a' 'b' 'c' 'd' NULL

data next

G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Pointer & Co, 33

Ein Element:

Der "Anker":

struct ListElement { float x, y;

int z;

ListElement* next;

};

struct List

{ ListElement* first;

ListElement* last;

int n_elements;

...

};

'a' next data

4

n_elements first

G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Pointer & Co, 34

Achtung:

klappt nicht (* fehlt)!

Das wäre eine "rekursive" Datenstruktur  struct ListElement {

float x, y;

int z;

ListElement next;

};

ListElement ListElement

ListElement ListElement

G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Pointer & Co, 35

// insert x (= ListElement*) after n-th element ListElement* e = list.first;

int i = 1;

while ( i < n && e->next ) {

i ++ ; e = e->next;

}

// Nachbedinung: e zeigt auf Elem., // hinter dem x eingefuegt werden soll X->next = e->next;

e->next = x;

Einfügen

Durch "Umbiegen"der Zeiger 6

x 5

G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Pointer & Co, 36

// insert x (= ListElement*) after n-th element if ( n == 0 )

{ // Einfügen als neuer Kopf der Liste x->next = list.first;

list.first = x;

}else

{ ListElement* e = list.first;

int i = 1;

while ( i < n && e->next ) {

i ++ ; e = e->next;

}

// Nachbedinung: e zeigt auf Elem., // hinter dem x eingefuegt werden soll x->next = e->next;

e->next = x;

}

Co de m it " R an dfa ll"

G. Zachmann Grundlagen der Programmierung in C - WS 05/06 Pointer & Co, 37

Entfernen (ohne Löschen)

Durch analoges Umbiegen der Zeiger

65

Referenzen

ÄHNLICHE DOKUMENTE

– The set ELEM (L) of elements occurring in a list is the set of all E which can be reached, starting from the list head, by applying next-links until the list tail is encountered.

Zachmann Grundlagen der Programmierung in C - WS 05/06 Einleitung, 5?. Ziele

Zachmann Grundlagen der Programmierung in C - WS 05/06 Arrays und Strings, Teil 1

Zachmann Grundlagen der Programmierung in C - WS 05/06 Pointer &amp; Co, 32.. Beispiel: Verkettete Listen

Eine doppelt verkettete Liste speichert die Listenelemente als Kette, wobei jedes Listenelement seinen Nachfolger und Vorgänger kennt.. z.B.. Verkettete

1) Einfügen eines neuen Knotens: Liste war leer.. Grafische Darstellung einer verketteten Liste:3. 2) Einfügen eines neuen Knotens am Anfang.. Grafische Darstellung einer

• Im Gegensatz zu einfach verketteten Listen haben doppelt verkettete Listen in den Knoten eine zusätzliche Instanzvariable für die Referenz auf den Vorgängerknoten. class Node

–&#34; Änderungen über den einen Verweis (über die eine Variable) beeinflussen also Objekte, die auch über den anderen Verweis (über die andere Variable) erreicht werden.!.