Попытка сохранить связанный список в алфавитном порядке - PullRequest
0 голосов
/ 07 апреля 2019

я пытаюсь отсортировать связанный список по алфавиту в функции "trier ()", в которой я пытаюсь сравнить каждое имя узла со следующим.

Я пытался сравнить имя узла, используя "strcmp ", а затем обменять свои данные.«пациент» - это запись.«exchnage» функции предназначены для обмена данными узла.

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 Ответ

1 голос
/ 07 апреля 2019

в

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");
}

когда вы закончите внутренний , в то время как вы пропустили установку ptr на начало списка для следующего поворота, поэтому 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("\n\n Trie Avec Succes ! \n");
}

Обратите внимание, что другой способ состоял в том, чтобы обмениваться ячейками, а не обмениваться их содержимым

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...