我试图在函数“ 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("\n\n Trie Avec Succes ! \n");
}
它适用于前2个节点,但以后不适用。
答案 0 :(得分: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("\n\n Trie Avec Succes ! \n");
}
当您完成内部 while 时,您错过了将 ptr 设置回列表头的下一轮操作,因此ptr->suivant!=NULL
为假,{ {1}}保持0,然后停止排序
可以是:
echange
请注意,另一种方式是交换单元,而不是交换其内容