尝试按字母顺序存储链接列表

时间:2019-04-07 09:09:29

标签: 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("\n\n Trie Avec Succes ! \n");
}

它适用于前2个节点,但以后不适用。

enter image description here

enter image description here

1 个答案:

答案 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

请注意,另一种方式是交换单元,而不是交换其内容