Einfache verkettete (sortierte) Liste
Verfasst: Mo Nov 07, 2016 1:47 pm
Ich babe derzeit ein kleinees Problem mit diesem C Code:
Ich wollte eine sortierte einfach verkettete erstellen, also wo man nur einen Zeiger auf das naechste Element hat und wo man keinen Zeiger auf den Vorgänger hat und es funktioniet auch alles, bis auf die insert Methode (Ja, das aber ...
).
Ich rufe dabei die insert Methode mit den Werten 4, -1 und 0 auf und dabei sollten die Elemente ja eigentlich immer sortiert sein, also von kleiner nach größer (-1, 0, 4) und bei 4 und der -1 läuft das auch noch aber aber wenn ich die 0 eingebe, steht diese plötzlich am Ende, statt hinter der -1. Das funktioniet auch bei alle anderen Werten nicht, wenn ich zwei Zahlen eingebe und eine Zahl dazwischen, die dann größer als die erste und kleiner als die zweite ist aber ich sehe den Fehler nicht? Was mache ich falsch?
Bei Bedarf kann ich auch das ganze Projekt hochladen. Eine Sache fällt mir da auch noch ein, und zwar habe ich unter anderem in der Zeile
den Fehler
aber das sind doch die selben Typen oder nicht?
Kann man die insert Methode evtl. auch noch ein wenig vereinfachen oder passt das so wohl?
Code: Alles auswählen
typedef struct listEntry {
int value;
struct listEnry *next;
} listEntry;
// Ausgangselement: Zeiger auf das erste Element
static struct listEntry *begin = NULL;
void initList(void) {
begin = (listEntry*) malloc(sizeof(struct listEntry));
begin->next = NULL;
}
void insert(int value) { //
listEntry *prevEl;
listEntry *iterEl = begin;
listEntry *newEl = (listEntry*) malloc(sizeof(struct listEntry));
newEl->value = value;
/*
* Ueber die Elemente iterieren
*/
while(iterEl->next != NULL) {
prevEl = iterEl;
iterEl = iterEl->next;
if(iterEl->value > value)
break;
}
if(prevEl == begin) { // 4, -1, 0 fuehrt zu Fehler
newEl->next = begin->next;
begin->next = newEl;
} else if(iterEl->next == NULL) {
iterEl->next = newEl;
newEl->next = NULL;
} else {
newEl->next = prevEl->next;
prevEl->next = newEl;
}
}

Ich rufe dabei die insert Methode mit den Werten 4, -1 und 0 auf und dabei sollten die Elemente ja eigentlich immer sortiert sein, also von kleiner nach größer (-1, 0, 4) und bei 4 und der -1 läuft das auch noch aber aber wenn ich die 0 eingebe, steht diese plötzlich am Ende, statt hinter der -1. Das funktioniet auch bei alle anderen Werten nicht, wenn ich zwei Zahlen eingebe und eine Zahl dazwischen, die dann größer als die erste und kleiner als die zweite ist aber ich sehe den Fehler nicht? Was mache ich falsch?
Bei Bedarf kann ich auch das ganze Projekt hochladen. Eine Sache fällt mir da auch noch ein, und zwar habe ich unter anderem in der Zeile
Code: Alles auswählen
iterEl = iterEl->next;
Code: Alles auswählen
assignment from incompatible pointer type [enabled by default]
Kann man die insert Methode evtl. auch noch ein wenig vereinfachen oder passt das so wohl?