#c
#c
Вопрос:
я пытаюсь отсортировать связанный список в алфавитном порядке с помощью функции «trier ()», с помощью которой я пытаюсь сравнить имя каждого узла со следующим.
Я попытался сравнить имена узлов, используя «strcmp», а затем поменять местами их данные. «пациент» — это запись. функции «обмена» предназначены для обмена данными узла.
void trier(){
struct patient *ptr = tete;
struct patient*prec=NULL;
int echange;
do{
echange=0;
while(ptr->suivant!=NULL){
prec=ptr;
ptr=ptr->suivant;
if(strcmp(prec->nom,ptr->nom)<0){
echangedeNom(prec,ptr);
echangedePrenom(prec,ptr);
echangedesentiers(prec,ptr);
echangedesannes(prec,ptr);
echange=1;
}
}
}while(echange==1);
printf("nn Trie Avec Succes ! n");
}
это работает для первых 2 узлов, но позже нет.
Комментарии:
1. вы пропустили сброс ptr в tete , смотрите мой ответ
2. я отредактировал его, посмотри, приятель
3. Выполнено. Спасибо, приятель
Ответ №1:
в
void trier(){
struct patient *ptr = tete;
struct patient*prec=NULL;
int echange;
do{
echange=0;
while(ptr->suivant!=NULL){
prec=ptr;
ptr=ptr->suivant;
if(strcmp(prec->nom,ptr->nom)<0){
echangedeNom(prec,ptr);
echangedePrenom(prec,ptr);
echangedesentiers(prec,ptr);
echangedesannes(prec,ptr);
echange=1;
}
}
}while(echange==1);
printf("nn Trie Avec Succes ! n");
}
когда вы завершаете внутреннее while, вы пропустили, чтобы вернуть ptr в начало списка для следующего хода, so ptr->suivant!=NULL
равно false и echange
остается 0, и вы прекращаете сортировку
может быть :
void trier(){
int echange;
do{
struct patient *ptr = tete;
struct patient*prec=NULL;
echange=0;
while(ptr->suivant!=NULL){
prec=ptr;
ptr=ptr->suivant;
if(strcmp(prec->nom,ptr->nom)<0){
echangedeNom(prec,ptr);
echangedePrenom(prec,ptr);
echangedesentiers(prec,ptr);
echangedesannes(prec,ptr);
echange=1;
}
}
}while(echange==1);
printf("nn Trie Avec Succes ! n");
}
Обратите внимание, что другим способом был обмен ячейками, а не обмен их содержимым
Комментарии:
1. и как вернуть его обратно в head? должен ли я вводить ptr = tete? в итоге?
2. @AyoubSouid Я отредактировал свой ответ из вашего отредактированного кода
3. все в порядке <3 спасибо, приятель, что я выполнил ptr = tete после цикла while, как ты сказал, и это работает хорошо, еще раз спасибо