Was ich nicht so richtig verstehe, ist die Verbindung zwischen "struct Liste" und " struct ListHead". Warum kommt mein "struct Liste" in "struct ListHead" zweimal vor?
Deine struct Liste ist einfach deine Liste mit einem Zeiger auf das nächste Element der Liste,
und einen Zeiger auf die Daten....
Ein passendere Name für "struct Liste" wäre vielleicht "struct Node"
Und deine struct ListHead beinhaltet einfach nur ein Zeiger auf den Anfang und das Ende der
Liste. Wobei der Zeiger auf das Ende nur Sinn bei doppelt verketteteten Listen macht um die
Elemente bei einem Durchsucehn der Liste schneller finden zu können...
Meine größste Frage, wenn ich jetzt mehrere Listenelemente erstellt habe, wie komme ich an sie ran!
Ein durchlaufen der von dir erstellten Liste könnte so aussehen:
Code:
void print(ListHead *first){
if(first != NULL){
Liste *tmp = first->next;
while(tmp){
Daten *dummy = tmp->pDaten;
cout << dummy->zweck << " " << dummy->betrag << " " << dummy->index << " " << dummy->datum << endl;
tmp = tmp->next;
}
}
}
Der Code sollte dir zeigen wie man die Liste von vorn nach hinten durchlaufen könnte.
Erstelle ich ein neues Element von "struct Daten" jetzt in "struct Liste, mit *next. Dann gebe ich das in eine Funktion und schreib das neue Struct auf welchen Pointer von "struct ListHead". Was mache ich mit dem Anderen?
Das habe ich jetzt nicht so richtig verstanden...
Es gibt zwei Möglichkeiten was an die Liste anzuhängen:
Am Anfang, oder am Ende der Liste.
Bsp. Am Ende der Liste:
Du merkst dir den Anfang der Liste in einer temportären Variablen vom Typ List
, deswegen solltest du deiner Funktion (z.B. insert()) den ListHead mitgeben und mit Hilfe von
ListHead->head dir den Anfang der Liste merken. Dann durchläufst du mit Hilfe der temp. Variablen die Liste bis zum Schluss,bis tmp->next (tmp = temp Variable vom Ttyp List) ==
NULL ist...
Dann holst du dir Speicherplatz für ein neues "struct Liste".
und dann für Liste->pDaten Speicherplatz für "struct Daten" und beschreibst diesen
Speciherplatz mit deinen einzufuegenden Daten...
Und zum Schluss solltest du das neue Listenelement hinten anhängen, (sprich
tmp->next auf dein neues Listenelement zeigen lassen) und fertig ist das Geflecht...
Ich hoffe ich konnte ein wenig Licht ins dunkel bringen...
Gruß
RedWing