rss
Rechercher : dans
Par : Pertinence Date Nom d'utilisateur
Statut : Non résolu

[c]déclaration d'une arbre n-aire

amouna23, le jeudi 29 mars 2007 à 23:14:19
salut!
help! si qq poura me dire
coment faire la déclaration d'une arbre n-aire en c
SVP aidez moi
merci
Configuration: Windows XP
Internet Explorer 6.0
Répondre à amouna23  Signaler ce message aux modérateurs Aller au dernier message

1


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
mamiemando, le vendredi 30 mars 2007 à 20:07:32
Le plus simple c'est de faire une structure noeud contenant un tableau de pointeur sur des noeuds :
struct node_t{
  struct node_t ** nodes;
};

typedef struct node_t * tree_t;

Il faut par contre veiller à bien allouer le tableau nodes de chaque noeud avant de créer des noeuds fils. Si n est défini dans un #define et constant pour tout noeud de l'arbre, tu peux directement faire une allocation statique (ce qui évitera les mallocs et les free) :
#define N 10

struct node_t{
  struct node_t * nodes[N];
};

typedef struct node_t * tree_t;

Bonne chance
Répondre à mamiemando

2


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
amouna23, le samedi 31 mars 2007 à 13:23:55
salut!
merci pour ton aide mais je voudrais une déclaration chainée
(avec les cellules)

a+
Répondre à amouna23

3


  • Ce message vous semble utile, votez !
  • Signaler ce message aux modérateurs
 mamiemando, le dimanche 1 avril 2007 à 23:48:13
Ben c'est pareil sauf que tu changes le struct node_t ** par une liste de struct node_t * :
// Implémentation d'une liste chaînée générique 
// (liste chaînée de pointeurs génériques)

struct maillon_t{
  void *donnee; // l'adresse de la donnée stockée dans le maillon
  struct maillon_t *suivant;  // le maillon suivant de la liste chaînée
};

// Implémentation d'un arbre générique

typedef maillon_t *liste_t;

struct noeud_t{
  void *donnee; // l'adresse de la donnée stockée dans le noeud
  liste_t noeuds_fils; // la liste des noeuds fils
};

typedef struct noeud_t *arbre_t;

Dans ton cas la donnée stockée dans chaque maillon de liste (de type void *) sera en fait un pointeur sur un noeud fils de l'arbre (struct noeud *). Ceci te forcera donc à faire des cast pour passer des void * aux struct noeud * et réciproquement, mais comme les pointeurs (quel que soit leur type) ne sont que des adresses (donc des objets de même taille), il n'y a pas de problème.

La donnée stockée dans un noeud_t est l'adresse de la donnée associée à ce noeud de l'arbre (par exemple le nom de la personne dans un arbre généalogique). Tu n'es pas obligé d'en mettre une, c'est à toi de voir.

Pour l'implémentation de la liste chainée il peut être intéressant d'utiliser une mini structure qui garde le début et la fin de la liste (en particulier ça évite de reparcourir la liste pour insérer un maillon à la fin) :
typedef struct liste_t{
  struct maillon_t *debut; // le premier maillon de la liste
  struct maillon_t *fin; // le dernier maillon de la liste
} liste_t;

Bonne chance
Répondre à mamiemando
Logiciels pertinents trouvés dans les téléchargements
Télécharger Genopro 2007Genopro - Genolog est un logiciel de généalogie permettant de construire un arbre généalogique sur plusieurs générations. Il s'agit...Catégorie: Bureautique
Licence: Freeware/gratuit
Télécharger X-Mas Tree 1.3X-Mas Tree - X-Mas Tree est tout simplement un programme permettant de concevoir un arbre de Noël virtuel. Cette nouvelle version propose...Catégorie: Graphisme
Licence: Freeware/gratuit
Télécharger CCleaner 2.10.618CCleaner - CCleaner (Crap Cleaner) est un utilitaire de nettoyage gratuit permettant de garantir un respect de la vie privée en...Catégorie: Anonymat/Confidentialité
Licence: Freeware/gratuit
Télécharger Vista Codec Package 4.7.3Vista Codec Package - Vista Codec Package regroupe une collection impressionnante de codecs (audio et vidéo), permettant d'ouvrir la plupart...Catégorie: Codecs
Licence: Freeware/gratuit
Plus de logiciels gratuits sur « [c]déclaration d'une arbre n aire »