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 :

problème pour l'accès à l'élément suivant dans une liste chainée


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    janvier 2023
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : janvier 2023
    Messages : 12
    Points : 9
    Points
    9
    Par défaut problème pour l'accès à l'élément suivant dans une liste chainée
    Bonjour,

    dans ma vaine tentative de faire une liste chainée, dont voici une partie du code, je suis confronté à un problème en voici le message d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    line 16 assignment to ‘Noeud *’ from incompatible pointer type ‘struct Noeud *’
    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
    #include <stddef.h>
     
     
    	typedef struct {  
     
    		int valeur;
    		struct Noeud* suivant; 
     
    	} Noeud;
     
    	void ajouter_noeud (Noeud tête, Noeud n) {
     
    		Noeud* tmp = &tête;
    		while(tmp->suivant != NULL) {
     
    			tmp = tmp->suivant;
     
    		}
    		// reste du code
    	}
    plus que la solution, c'est l'explication qui m'intéresse.

    Dans ma struct Noeud je référence le noeud suivant, c'est à dire que j'ai une définition récursive de Noeud. Le seul moyen, semblerai t-il est de crée un pointeur sur une struct Noeud.
    Pour pouvoir parcourir ma liste, le pointeur tmp, de type Noeud* reçoit, la valeur pointée par suivant de type Struct Noeud*. Il y a donc une incompatibilité de type.
    Mais je n'arrive pas résoudrai cette incompatibilité.
    Ce que j'ai essayer:

    un cast (Noeud) suivant;

    une autre "solution" suggérée remplacer la définition de la struct Noeud par:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	typedef struct Noeud noeud;
     
    	struct Noeud {
     
    		int      valeur;
    		Noeud  *suivant;
    	};
    aucune ne fonctionne.
    Qu'elles explications me permettrai de résoudre mon problème ?

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    11 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 11 626
    Points : 28 518
    Points
    28 518
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par run(F) jkldc Voir le message
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    	typedef struct {  
     
    		int valeur;
    		struct Noeud* suivant; 
     
    	} Noeud;
    plus que la solution, c'est l'explication qui m'intéresse.

    Dans ma struct Noeud je référence le noeud suivant, c'est à dire que j'ai une définition récursive de Noeud. Le seul moyen, semblerai t-il est de crée un pointeur sur une struct Noeud.
    Pour pouvoir parcourir ma liste, le pointeur tmp, de type Noeud* reçoit, la valeur pointée par suivant de type Struct Noeud*. Il y a donc une incompatibilité de type.
    Mais je n'arrive pas résoudrai cette incompatibilité.
    Qu'elles explications me permettrai de résoudre mon problème ?
    C'est parce que dans ta première écriture, le "struct Noeud" qui est censé être le type de "suivant" n'existe pas (je ne vois d'ailleurs même pas comment ça peut compiler !!!). Tu définis une structure sans lui donner de nom, puis ensuite tu associes le type "Noeud" à cette structure. Jamais tu n'as défini la "struct Noeud" que tu utilises dans ta fonction. Donc le pointeur "suivant" n'est pas de type "struct Noeud*" et donc ne peut pas être stocké dans tmp.

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    typedef struct s_noeud {  
    	int valeur;
    	struct s_noeud* suivant; 
    } t_noeud;

    Ici un exemple complet de liste chainée.

    Et les tabulations ce n'est pas au petit bonheur dans l'anarchie. Ca sert à visualiser facilement les blocs et leurs enchainements.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    juillet 2006
    Messages
    3 357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Alimentation

    Informations forums :
    Inscription : juillet 2006
    Messages : 3 357
    Points : 6 135
    Points
    6 135
    Par défaut
    Bonjour,

    C'est pas très conseillé non plus d'avoir des variables avec des noms accentués.
    Il est fort possible que dans la fonction ajouter_noeud, tes paramètres comme ta liste par exemple ne soit pas modifiés.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

Discussions similaires

  1. Réponses: 8
    Dernier message: 18/12/2015, 14h29
  2. Réponses: 3
    Dernier message: 11/03/2013, 15h04
  3. Réponses: 1
    Dernier message: 25/01/2013, 16h25
  4. z-index sur élément suivant dans une liste
    Par Xunil dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 28/05/2009, 22h06

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