Rechercher : dans
Par :

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

Dernière réponse le 1 avr 2007 à 23:48:13 amouna23, le 29 mar 2007 à 23:14:19 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « [c]déclaration d'une arbre n aire » dans :
Les variables en C++ VoirLes variables en C++ 1. Les différents types de variables 1.1 bool 1.2 char 1.3 unsigned short int 1.4 short int 1.5 unsigned long int 1.6 long int 1.7 int (16 bits) 1.8 int (32 bits) 1.9 unsigned int (16 bits) 1.10 unsigned int (32...
Les fonctions en C++ : surcharge et paramètres par défaut. VoirLes fonctions en C++ : surcharge et paramètres par défaut. 1. La surcharge de fonctions et méthodes de classes, dont le constructeur 2. Utilisation des paramètres par défaut En C++, une même fonction ou méthode de classe peut être...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...
Langage C - Les variables VoirLe concept de variable Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage C sont typées, c'est-à-dire que les données contenues dans...
Les classes en langage C++ VoirLa notion d'objet Le langage C est un langage procédural, c'est-à-dire que c'est un langage permettant de définir des données grâce à des variables, et des traitements grâce aux fonctions. L'apport principal du langage C++ par rapport au...

1

mamiemando, le 30 mar 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

amouna23, le 31 mar 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

 mamiemando, le 1 avr 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