IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

tableau de liste chainée


Sujet :

C

  1. #1
    Membre régulier Avatar de sub-0
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 197
    Points : 76
    Points
    76
    Par défaut tableau de liste chainée
    Bonjour ;
    J'ai réaliser un petit code qui construit un tableau de liste chainée, mais j'ai quelques erreurs de conversion de type. Je demande votre aide SVP.
    voila le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    void creerliste(int N)
    {
      int i,j=1,continu;
      noeud* graphe;
      noeud* suiv;
      char noun;
      graphe =(noeud*)malloc( N * sizeof(noeud*));
      for (i=0; i<N; i++)
        {  graphe[i]=initialisation(); 
           printf("Donner le nom du premier noeud\n");
           scanf("%c",noun);
           graphe[i]=ajoutnoeud(graphe[i],noun);
           printf("Pour entrer les successeurs de: %c tapez 1, sinon tapez 0\n",graphe[i]->nom);
           scanf("%d",continu);
           if( continu == 1){
           while(j != 0){
           printf("Donner le nom du successeur de: %c ou taper 0 s'il n'existe aucun autre successeur\n",noun);
           graphe[i]=ajoutnoeud(graphe[i],noun);
           if(noun == 0)
           j=0;
           }
           }
           else ;
           }      
    }

  2. #2
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 142
    Points : 154
    Points
    154
    Par défaut
    Salut,

    A quel niveau sa coince?
    Quel est le problème précisément?
    Peut tu nous détailler les structures complète ?

  3. #3
    Membre régulier Avatar de sub-0
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 197
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par FunK92 Voir le message
    Salut,

    A quel niveau sa coince?
    Quel est le problème précisément?
    Peut tu nous détailler les structures complète ?
    la structure de la liste est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    typedef struct noeud
    {
      char nom;
      struct noeud * suivant;
    };
    sa coince au niveau de l'initialisation des cases du tableau "graphe":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    graphe[i]=initialisation();
    , l'appel de la fonction "ajoutnoeud":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    graphe[i]=ajoutnoeud(graphe[i],noun);
    et l'appel du champ nom:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("Pour entrer les successeurs de: %c tapez 1, sinon tapez 0\n",graphe[i]->nom);
    .
    Les erreurs sont:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    no match for 'operator=' in '*((+(((unsigned int)i) * 8u)) + graphe) = initialisation()' 
    candidates are: noeud& noeud::operator=(const noeud&) 
    cannot convert `noeud' to `noeud*' for argument `1' to `noeud* ajoutnoeud(noeud*, char)' 
    base operand of `->' has non-pointer type `noeud'

  4. #4
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 142
    Points : 154
    Points
    154
    Par défaut
    Re,

    Autre chose, pourrait tu nous fournir également le code des fonctions initialisation et ajout.

    Tu compile en C++ à ce que je vois, essaye d'utiliser les templates de la STL, c'est mille fois plus pratique

  5. #5
    Membre régulier Avatar de sub-0
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 197
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par FunK92 Voir le message
    Re,

    Autre chose, pourrait tu nous fournir également le code des fonctions initialisation et ajout.

    Tu compile en C++ à ce que je vois, essaye d'utiliser les templates de la STL, c'est mille fois plus pratique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    noeud* initialisation(){
           return NULL;
           }
     
    noeud* ajoutnoeud(noeud* l,char nom){
           noeud* suiv;
           suiv=(noeud*)malloc(sizeof(noeud));
            suiv->nom=nom;
            suiv->suivant=l;
            l=suiv;
           return l;
           }

  6. #6
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    142
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 142
    Points : 154
    Points
    154
    Par défaut
    J'ai pas complément lu ton code, mais il me semble que graphe[i] n'est pas un pointeur et par conséquent il ne peut recevoir la valeur NULL de ta fonction initialisation();

    Si tu souhaite un tableau de pointeur de noeud, il serait plus judicieux de le déclarer de la maniere suivante :

  7. #7
    Membre régulier Avatar de sub-0
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 197
    Points : 76
    Points
    76
    Par défaut
    Re , voila j'ai presque terminer le programme il s'exécute mais au cours de l'affichage du premier message pour entrer le nom du nœud il passe directement a la question suivante sans qu'il me laisse le temps pour entrer le nom, voila le nouveau code, pouvez vous m'aider ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    noeud** creerGraphe(int N)
    {
      int i,continu,j;
      noeud** graphe;
      noeud* suiv;
      char noun;
      graphe =(noeud**)malloc( N * sizeof(noeud*));
      for (i=0; i<N; i++)
        {  graphe[i]=initialisationN(); // equivalent a graphe[i] =NULL;
           printf("Donner le nom du premier noeud\n");
           scanf("%c",&noun);
           graphe[i]=ajoutNoeud(graphe[i],noun);
           printf("Pour entrer les successeurs de: %c tapez 1, sinon tapez 0\n",graphe[i]->nom);
           scanf("%d",&continu);
           if( continu == 1){
           for(j=0;j<N-1 || j == -1; !j++){
           printf("Donner le nom du successeur de: %c ou taper '-1' s'il n'existe aucun autre successeur\n",noun);
           graphe[i]=ajoutNoeud(graphe[i],noun);
           if(noun == '-')
           j=-1;
           }
           }
           else ;
           }
           return graphe;
           }

  8. #8
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Les scanf sont faux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      int i,continu,j;
    ....
      char noun;
          printf("Donner le nom du premier noeud\n");
           scanf("%c",&noun);
           graphe[i]=ajoutNoeud(graphe[i],noun);
           printf("Pour entrer les successeurs de: %c tapez 1, sinon tapez 0\n",graphe[i]->nom);
           scanf("%d",&continu);
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  9. #9
    Membre régulier Avatar de sub-0
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2008
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2008
    Messages : 197
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par diogene Voir le message
    Les scanf sont faux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
      int i,continu,j;
    ....
      char noun;
          printf("Donner le nom du premier noeud\n");
           scanf("%c",&noun);
           graphe[i]=ajoutNoeud(graphe[i],noun);
           printf("Pour entrer les successeurs de: %c tapez 1, sinon tapez 0\n",graphe[i]->nom);
           scanf("%d",&continu);
    oui merci je viens de me rendre compte que j'ai oublié les "&" .

Discussions similaires

  1. Transformer une liste chainée en tableau
    Par tolliob dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 06/08/2014, 11h53
  2. choix entre tableau dynamique et liste chainée
    Par siempre dans le forum Débuter
    Réponses: 3
    Dernier message: 16/02/2010, 12h27
  3. parcourir un tableau de listes chainées
    Par étoile de mer dans le forum Débuter
    Réponses: 17
    Dernier message: 14/10/2008, 23h02
  4. Tableau ou liste chainée?
    Par Super Byte dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 22/12/2006, 23h00
  5. Pb tableau de listes chainées
    Par Beush dans le forum C
    Réponses: 4
    Dernier message: 24/11/2005, 15h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo