Liste Chainée , probleme d'execution

Fermé
Medreda23 Messages postés 2 Date d'inscription jeudi 12 décembre 2013 Statut Membre Dernière intervention 15 décembre 2013 - Modifié par pijaku le 13/12/2013 à 09:58
Medreda23 Messages postés 2 Date d'inscription jeudi 12 décembre 2013 Statut Membre Dernière intervention 15 décembre 2013 - 15 déc. 2013 à 12:02
Bonjour tlm
je suis un programmeur debutant en c , sur code blocks notament
je viens d'essayer un programme supposé d'ajouter un element à une liste triée dans sa place, pas d'erreurs ni de warnings le programme ne veut pas s'executer
#include<stdio.h>
#include<stdlib.h>
struct Elem
{int x;
 struct Elem *suiv;
};
typedef struct Elem *liste;
//************************
liste Ajout_position(liste L,int a)
 {liste N,p=L,q;
  N=(liste)malloc(1*sizeof(liste));
  if(N!=NULL)
    {   N->x=a;
        if((L->x)>=a || L==NULL)
        {
            N->suiv=L; L=N;
        }
        else
        {
         while((p->x)<=a && p!=NULL)
         {
            q=p;
            p=p->suiv;

         }
         q->suiv=N;
         N->suiv=p;
        }

    }
    return L;
 }
 void Afficher(liste L)
    {liste p=L;
     if(L==NULL)
     {
        printf("impossible de faire l'ajout");
     }
     else
     {
         while(p!=NULL)
         {
             printf("%d->",p->x); p=p->suiv;
         }
         printf("NULL\n");
     }

    }
main()
{liste L=NULL;
L=Ajout_position(L,3);Afficher(L);
L=Ajout_position(L,4);Afficher(L);
L=Ajout_position(L,6);Afficher(L);
L=Ajout_position(L,65);Afficher(L);
L=Ajout_position(L,2);Afficher(L);
L=Ajout_position(L,1);Afficher(L);
L=Ajout_position(L,0);Afficher(L);
}

2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 841
14 déc. 2013 à 17:11
Bonjour,

J'ai pas tout vu, mais déjà :

main()
Le bon prototype du main() est : int main(void)

if((L->x)>=a || L==NULL)
Il faut mettre L==NULL en première position sinon plantage.

while(p->x <= a && p!=NULL)
Il faut mettre p!=NULL en première position.

<ital>N=(liste)malloc(1*sizeof(liste));</liste>
Plutôt sizeof(struct Elem) ou *N
Pour info, le cast est superflu=> N=malloc(sizeof(struct Elem));

Et enfin n'oublie pas return 0; en fin du main pour signaler que tout s'est bien déroulé.

Corrige déjà tout ça. Recompile et resteste.
1
Medreda23 Messages postés 2 Date d'inscription jeudi 12 décembre 2013 Statut Membre Dernière intervention 15 décembre 2013
15 déc. 2013 à 12:02
Salut Fiddy
c vrai fallait mettre L=NULL en premiere position
Merci Bcp :)
0