Wallnussfolie
Grünschnabel
Hallo liebe Programmier-Freunde,
ich habe eine doppelt verkettete Liste programmiert. Es funktioniert auch alles wunderbar, nur die Sortierfunktion bereitet mir seit mehreren Stunden Kopfschmerzen und ich weiß einfach nicht mehr weiter, deswegen wäre ich sehr froh, wenn ihr mir helfen könntet.
Die Sortierung an sich funktioniert nicht richtig und manchmal bekomme ich Speicherzugriffsfehler ...
Hier meine Funktion (es handelt sich um ein Wörterbuch, deswgen sort_german() )
-reset_current() setzt LIST.current auf LIST.head
-count ist eine Variable, die die Anzahl der Datensätze speichert
Vielen Dank im Voraus für eure Hilfe !
ich habe eine doppelt verkettete Liste programmiert. Es funktioniert auch alles wunderbar, nur die Sortierfunktion bereitet mir seit mehreren Stunden Kopfschmerzen und ich weiß einfach nicht mehr weiter, deswegen wäre ich sehr froh, wenn ihr mir helfen könntet.
Die Sortierung an sich funktioniert nicht richtig und manchmal bekomme ich Speicherzugriffsfehler ...
Hier meine Funktion (es handelt sich um ein Wörterbuch, deswgen sort_german() )
-reset_current() setzt LIST.current auf LIST.head
-count ist eine Variable, die die Anzahl der Datensätze speichert
Vielen Dank im Voraus für eure Hilfe !
C++:
void sort_german(void)
{
int x,i,j,change_current2;
item_content *content1;
item_content *content2;
item_content *tmp_content;
item *help;
item *current2;
if (LIST.head->next == NULL) // keine Sortierung notwendig bei nur einem Datensatz
{
return;
}
reset_current();
for (i=0; i<count; i++)
{
if(LIST.current->next == NULL)
{
break;
}
current2=LIST.current->next;
for (j=0; j<(count-1); j++)
{
if((j != 0) && (change_current2==1) )
{
current2=LIST.current->next;
}
content1=LIST.current->pdata;
content2=current2->pdata;
printf("Vergleiche nun %s und %s\n",content1->Deutsch,content2->Deutsch);
if (strcmp(content1->Deutsch,content2->Deutsch) > 0)
{
printf("Änderung erforderlich");
tmp_content=content1;
content1=content2;
content2=tmp_content;
LIST.current->pdata=content1;
LIST.current=current2;
LIST.current->pdata=content2;
change_current2=1;
}
else
{
printf("Keine Änderung erforderlich");
if (current2->next == NULL)
break;
current2=current2->next;
change_current2=0;
}
}
if (LIST.current->next == NULL)
break;
LIST.current=LIST.current->next;
}
}