Hallo leute!
Ich schreibe gerade an einer verkette liste das ganze funzt soweit auch ganz gut nur habe ich ein Problem mit meinem Insert:
Also meine liste besteht aus zwei Struct :
Alles anzeigen
meine Insert funktion :
Alles anzeigen
Zu erklärung der insert ich schau einfach ob es schon ein erstes element gibt wenn nicht schreib ich das an die erste und an die letzte stelle der liste klar da die liste ja zu dem zeitpunkt nur aus einem Element besteht falls ein element vorhanden ist setze ich das neue einfach an die letzte stelle so nun zu meinem problem das ganze funktioniert nicht es wird mir immer nur das erste element ausgegeben.
Aber wenn ich das ganze so schreibe:
also praktisch das neue element einfach an den anfang setze dann funktionier es ist aber in der umgekehrten reihenfolge also das zuletzt eingefügte element ist am anfang möchte es aber umgekehrt ich weiß aber nicht wo der Fehler liegt ?
Die Logik sollte doch passen ? ich hoffe ihr könnt mir helfen
Viele Grüße
PS: nele steht für newelement... bin faul
EDIT:
MIr ist gerade aufgefallen das bei 3 elementen immer das zuletzt eingefügte element überschrieben wird daher habe ich das ganze noch etwas umgeschrieben:
So kann ich zumindest mehrere elemente einfügen aber das eigentliche problem habe ich immer noch nicht gelöst !
Außerdem habe ich noch ein problem in der remove gefunden
die fälle das das löschende element am anfang oder am ende ist wird zuerst vernachlässigt
Alles anzeigen
Zur beschreibung ich fange an mit dem ersten element schaue nach ob das nachfolge element entsprechenden wert hat falls ja setze ich die zeiger des aktuellen elementes einfach zwei weiter also überspringe sozusagen das zu löschende element! allerdings bekomme ich dann immer ein: segmentation fault
verstehe aber nicht warum hängt aber wohl mit itr und itr2 zusammen
denn wenn ich ohne itr2 arbeite dann fuktioniert es wunderbar nur leider löscht es mir dann das element nach dem gesuchten logisch da ich eben nicht das nachfolgende ausgehend vom akutellen überprüfe sondern das aktuelle überprüfe und dessen zeiger ich dann ändere
bitte helft mir könnte echt verzweifeln so langsam
Ich schreibe gerade an einer verkette liste das ganze funzt soweit auch ganz gut nur habe ich ein Problem mit meinem Insert:
Also meine liste besteht aus zwei Struct :
Quellcode
meine Insert funktion :
Quellcode
- void einfügen(struct list *list, int val)
- {
- struct element *nele;
- struct list *list_itr = list;
- nele = malloc(sizeof(struct element);
- nele -> value = val;
- if (list_itr -> first == NULL)
- {
- list_itr->first = nele;
- list_itr->last = nele;
- nele -> next = NULL;
- }else
- {
- nele ->next = list_itr-last;
- list_itr->last = nele;
- }
- }
Zu erklärung der insert ich schau einfach ob es schon ein erstes element gibt wenn nicht schreib ich das an die erste und an die letzte stelle der liste klar da die liste ja zu dem zeitpunkt nur aus einem Element besteht falls ein element vorhanden ist setze ich das neue einfach an die letzte stelle so nun zu meinem problem das ganze funktioniert nicht es wird mir immer nur das erste element ausgegeben.
Aber wenn ich das ganze so schreibe:
also praktisch das neue element einfach an den anfang setze dann funktionier es ist aber in der umgekehrten reihenfolge also das zuletzt eingefügte element ist am anfang möchte es aber umgekehrt ich weiß aber nicht wo der Fehler liegt ?
Die Logik sollte doch passen ? ich hoffe ihr könnt mir helfen
Viele Grüße
PS: nele steht für newelement... bin faul
EDIT:
MIr ist gerade aufgefallen das bei 3 elementen immer das zuletzt eingefügte element überschrieben wird daher habe ich das ganze noch etwas umgeschrieben:
So kann ich zumindest mehrere elemente einfügen aber das eigentliche problem habe ich immer noch nicht gelöst !
Außerdem habe ich noch ein problem in der remove gefunden
die fälle das das löschende element am anfang oder am ende ist wird zuerst vernachlässigt
Quellcode
- int löschen(struct list *list, int val)
- {
- struct element * itr;
- struct element * itr2;
- struct list * lsit_itr = list;
- struct element *tmp;
- if (list_itr->first == NULL)
- {
- printf("liste leer");
- }
- else {
- itr = list->first;
- while (itr ! = NULL)
- {
- itr2 = itr->next;
- if (itr2->value == val)
- {
- itr -> next = itr->next->next;
- }
- itr = itr->next;
- }
- }
- }
Zur beschreibung ich fange an mit dem ersten element schaue nach ob das nachfolge element entsprechenden wert hat falls ja setze ich die zeiger des aktuellen elementes einfach zwei weiter also überspringe sozusagen das zu löschende element! allerdings bekomme ich dann immer ein: segmentation fault
verstehe aber nicht warum hängt aber wohl mit itr und itr2 zusammen
denn wenn ich ohne itr2 arbeite dann fuktioniert es wunderbar nur leider löscht es mir dann das element nach dem gesuchten logisch da ich eben nicht das nachfolgende ausgehend vom akutellen überprüfe sondern das aktuelle überprüfe und dessen zeiger ich dann ändere
bitte helft mir könnte echt verzweifeln so langsam
Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von the_old_Pirate ()