000
17.05.2005, 18:31 Uhr
~Florian
Gast
|
Hallo,
hab ein kleines Verständnisproblem mit meinem Programm. Ich habe eine Programm geschrieben, welches mit verketteten Listen arbeitet. Das ganze sieht in der Header-Datei so aus:
C++: |
struct elem_t { struct elem_t *next; double messwert; };
struct head { unsigned int anzahl; struct elem_t *first; };
|
Im Hauptprogramm wird das ganze so ausgeführt. Relevanter Auszug:
C++: |
// In main() // Auruf mit insert(kopf, value); struct head kopf = {0, NULL}; struct elem_t *aktpos = NULL;
...
// In den Unterfunktionen struct head wurzel = {0, NULL}; struct elem_t *aktpos = NULL;
|
C++: |
struct elem_t *make_element(void) { return (struct elem_t *)malloc( sizeof(struct elem_t) ); }
// Element einfuegen int insert( struct head *kopf, double dWert) { struct elem_t *neu, *vorp;
if((neu = make_element()) == NULL) return 1;
neu->messwert = dWert;
// Element einordnen: vorp = search(neu->messwert, kopf);
if(vorp == NULL) { neu->next = kopf->first; kopf->first = neu; } else { neu->next = vorp->next; // Statt nach, möchte ich vor dem item einfügen vorp->next = neu; }
++kopf->anzahl;
return 0; }
// Gibt Zeiger auf Vorgänger item zurück struct elem_t *search( double wert, struct head *kopf) { struct elem_t *sp, *retp;
retp = NULL; sp = kopf;
while( sp != NULL) { retp = sp; sp = sp->next; }
return (retp); }
|
In der Funktion insert() möchte ich nun das ein neues Element am Anfang und nicht am Ende der Kette eingefügt wird. Leider gelingt es mir nur neue items nach dem Vorgänger zu verknüpfen. Mein Code zum Einfügen am Anfang sah so aus:
In der Funktion search() wird der Zeiger vom ersten Element gesucht und zurückgegeben und anschließend wird in der else Bedingung von insert() folgender Code eingetragen:
C++: |
kopf->first = neu; neu->next = vorp;
|
Leider funktioniert das ganze nicht richtig. Vielleicht hat jemand von euch eine schnelle Lösung parat. Danke schonmal...
Gruß flo |