Einfache Verkettungen
-
Hallo Leute,
wie lassen sich den am besten einfache Verkettungen
mit Pointern in C realisieren?Grüße
-
struct element { struct element *next; // Nutzdaten };
-
Verkettungen schrieb:
Hallo Leute,
wie lassen sich den am besten einfache Verkettungen in C realisieren?
Grüße
Verkettungen schrieb:
mit Pointern
-
DrakoXP schrieb:
Verkettungen schrieb:
Hallo Leute,
wie lassen sich den am besten einfache Verkettungen in C realisieren?
Grüße
Verkettungen schrieb:
mit Pointern
Exakt(!) diese Antwort wollte ich zuallererst auch geben
.
-
Die hilfreichere Antwort (und das ist ja Sinn der Sache, zu helfen)
wäre gewesen: Mit Structs, so wie es SepJ in seinem ersten Post getan hat.Das man Pointer benötigt ist ja wohl klar und schrieb ich selbst.
Also Danke SepJ
-
C-Verzweifler schrieb:
Die hilfreichere Antwort (und das ist ja Sinn der Sache, zu helfen)
wäre gewesen: Mit Structs, so wie es SepJ in seinem ersten Post getan hat.Das man Pointer benötigt ist ja wohl klar und schrieb ich selbst.
Also Danke SepJ
Der Witz kommt daher, dass du durch deine etwas unglückliche Wortwahl den Eindruck erweckt hast, als würdest du nicht verkettete Listen suchen, sondern einfache Verknüpfungen (eben Pointer). Daher hatten ich, DrakoXP und sicherlich noch andere, die gleiche doofe Idee.
-
Dann hab ich jetzt mal das hier gebastelt:
#include <stdio.h> #include <stdlib.h> struct node { int data; struct node* next; }; void append(struct node *list, int data) { struct node *new_node; new_node = malloc(sizeof(*new_node)); new_node->data = data; struct node *temp; temp = malloc(sizeof(*temp)); temp = list->next; list->next = new_node; new_node->next = temp; } void print_list(struct node *list) { struct node *temp; temp = list; printf("%d\n", temp->data); while(temp->next != NULL) { temp = temp->next; printf("%d\n", temp->data); } } int main(void) { struct node *list; append(list, 1); append(list, 2); append(list, 3); print_list(list); return EXIT_SUCCESS; }
Allerdings scheint es nicht zu funktionieren, da die cmd abschmirt.
Hab ich irgendwo was übersehen? ^^
-
Dies geht gleich an mehreren Stellen schief:
1. Dein list in main zeigt auf nix. Wenn du dann in append in Zeile 19 den Zeiger dereferenzierst, explodiert dein Computer.
2. Selbst wenn das append funktionieren würde, dann würde der Zeiger list in der main durch das append nicht geändert, da in append eine Kopie von list gemacht wird. Derzeit änderst du den Zeiger selber zwar noch nicht, aber höchstwahrscheinlich wirst du dies in der verbesserten Version tun wollen.
3. In der Ausgabefunktion prüfst du zwar auf ein Ende bei NULL, dieser Endwert wird aber weder in main noch in append gesetzt.Lösung:
Zieh das mit der NULL für das Ende konsequent durch. Initialisier deinen Wurzelzeiger in main mit NULL, in der Appendfunktion musst du das Ende ebenfalls richtig behandeln.
-
Danke
#include <stdio.h> #include <stdlib.h> struct node { int data; struct node* next; }; void append(struct node *list, int data) { struct node *new_node; new_node = malloc(sizeof(*new_node)); new_node->data = data; struct node *temp; temp = malloc(sizeof(*temp)); temp = list->next; list->next = new_node; new_node->next = temp; } void print_list(struct node *list) { struct node *temp; temp = list; while(temp->next != NULL) { temp = temp->next; printf("%d\n", temp->data); } } int main(void) { struct node *list = malloc(sizeof(*list)); list->data = 0; list->next = NULL; append(list, 1); append(list, 2); append(list, 3); print_list(list); return EXIT_SUCCESS; }
-
Mit insert_before und insert_after:
#include <stdio.h> #include <stdlib.h> struct node { int data; struct node* next; }; void insert_before(struct node *list, int data) { struct node *new_node; new_node = malloc(sizeof(*new_node)); new_node->data = data; struct node *temp; temp = malloc(sizeof(*temp)); temp = list->next; list->next = new_node; new_node->next = temp; } void insert_after(struct node *list, int data) { struct node *new_node; new_node = malloc(sizeof(*new_node)); new_node->data = data; while(list->next != NULL) { list = list->next; } list->next = new_node; new_node->next = NULL; } void print_list(struct node *list) { struct node *temp; temp = list; while(temp->next != NULL) { temp = temp->next; printf("%d\n", temp->data); } } int main(void) { struct node *list = malloc(sizeof(*list)); list->data = 0; list->next = NULL; insert_before(list, 1); insert_before(list, 2); insert_before(list, 3); insert_after(list, 2); insert_after(list, 3); print_list(list); return EXIT_SUCCESS; }
-
Wenn du es jetzt noch hin bekommst, das leere Dummyelement los zu werden, dann bin auch ich glücklich mit der Lösung.