проблема кругового односвязного списка с печатью списка - PullRequest
1 голос
/ 19 апреля 2020

Моя проблема в том, что программа при компиляции не показывает последний элемент в списке. Помимо функций, которые я приведу далее, у меня есть функция, которая инициализирует список и еще одну для добавления элементов в список, и они работают просто отлично, теперь я знаю, что это потому, что, скажем, я ввел 4 элемента "afficher_liste" Функция (которая должна печатать список) печатает только 3. Если я добавлю 5-й элемент, функция «afficher_liste» напечатает 4 элемента, если я добавлю 6-й элемент, то будет напечатано 5 элементов. Новый последний элемент попадает в список и является его частью, он просто не печатается. Я надеюсь, что смог объяснить проблему ..

   typedef struct{
    char nom[20];
    float surface;
    int habitants;
    }ville;
    typedef struct{
     ville data;
    struct element* suivant;
    }element;

    typedef struct{
    ville* T;
    }liste;  




void afficher_ville(ville*v){
printf("****************info ville********************");
printf("le nom de la ville :%s \n", v->nom);
printf("le nombre des habitants de la ville :%d \n", v->habitants);
printf("la surface de la ville :%.2f \n", v->surface);


}
void afficher_liste(liste* l)
{
    if(l->T==NULL){exit(-1);}

    element *aide = l->T;
 int lg=0;
    do
    { lg++;
        afficher_ville(&aide->data);
        aide= aide->suivant;
    }   while(aide->suivant != l->T);

    printf("longeur* %d\n",lg);
}

1 Ответ

2 голосов
/ 19 апреля 2020

Ваше условие выхода состоит в том, что следующий узел имеет значение null и, следуя вашим логикам c, на последнем узле ваше приложение выйдет вместо печати этого узла.

Прерывание рекурсии и последующая печать вручную последняя строка перед выходом из приложения решит проблему.

Надеюсь, это поможет!

...