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 :

Combiner différents types dans une liste chaînée en c


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mars 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Combiner différents types dans une liste chaînée en c
    Bonjour,

    J'essaie de créer une liste chaînée avec différents types de structures (pas un seul comme le montrent les tutoriels). Par un exemple une structure cercle, une structure triangle et une autre rectangle, toutes liées dans la même liste. Sauf que je n'ai aucune idée de comment faire!
    Merci d'avance pour votre aide..

  2. #2
    Membre expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Points : 3 352
    Points
    3 352
    Par défaut
    Citation Envoyé par roka1988 Voir le message
    Bonjour,

    J'essaie de créer une liste chaînée avec différents types de structures (pas un seul comme le montrent les tutoriels). Par un exemple une structure cercle, une structure triangle et une autre rectangle, toutes liées dans la même liste. Sauf que je n'ai aucune idée de comment faire!
    Merci d'avance pour votre aide..
    Salut,
    l'implémentation serait plus naturelle en c++ mais tu peux te débrouiller en C sans trop compliquer les choses. L'idée est d'avoir une liste chaînée dont la valeur sera de type void*. Le tout est de se souvenir sur quel type de structure le pointeur pointe. Pour cela il te faudra définir une énumération.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    typedef enum { TCercle, TTriangle, TRectangle } EnumTypeDonnee;
     
    struct sNode {
      EnumTypeDonnee typeDonnee;
      void* donnee;
      struct sNode* suivant;
    }

    Tu peux aussi utiliser un union à la place du void* mais il te faudra toujours un moyen de savoir quel est le type stocké.

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 923
    Points
    17 923
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par roka1988 Voir le message
    Bonjour,

    J'essaie de créer une liste chaînée avec différents types de structures (pas un seul comme le montrent les tutoriels). Par un exemple une structure cercle, une structure triangle et une autre rectangle, toutes liées dans la même liste. Sauf que je n'ai aucune idée de comment faire!
    Merci d'avance pour votre aide..
    La solution la plus utilisée est de définir une sur-classe globale, soir par une union, soit par un pointeur void :

    Code C : 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
    typedef union pValue {
     
        int    i ;
        float  f ;
        double d ;
        char   c ;
        char  *s ;
     
    } Value ;
     
    typedef struct pItem {
     
         int   Type ;
         Value Valeur ;
     
    } Item ;

    L'autre manière est :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct pItem {
     
         int   Type ;
         void *Valeur ;
     
    } Item ;
    Dans les 2 cas, ta liste sera alors une liste d'Item, pour le traitement duquel tu devras faire un "switch (Type)".

    Dans le second cas cependant il faudra caster le void*. Par contre pour ajouter un type de chose tu n'auras pas à tout recompiler si le projet est gros..

    Dans le premier cas, tu n'as as besoin de cast, la programmation peut être "Object-like", c'est à dire que tout ce qui a trait à Value peut être manipulé comme une "classe", dont les différentes méthodes sont "internes". Cependant, si on veut rajouter une valeur, il faudra recompiler tout le projet.

    Les 2 ont des avantages et des inconvénients, à évaluer suivant les projets.

Discussions similaires

  1. Nouveau type dans une liste
    Par jc2001 dans le forum SharePoint
    Réponses: 0
    Dernier message: 09/06/2008, 11h27
  2. [J2SE 5.0] Insérer plusieurs type dans une liste. Et les récupérer!
    Par HebusBreizh dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 26/09/2007, 15h32
  3. Réponses: 6
    Dernier message: 29/04/2007, 18h59
  4. Réponses: 10
    Dernier message: 08/12/2006, 02h18
  5. Insertion d'un noeud dans une liste chaînée
    Par habib106 dans le forum Assembleur
    Réponses: 8
    Dernier message: 07/04/2004, 22h34

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