NB: il faut que l'intégralité des noeuds fils utilisés soient écrits sur le disque une fois, et d'utiliser les index pour recharger le tout
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questiontypedef enum _profondeur_t{ A, B, C, D} prof_t; typedef struct _noeud_t{ unsigned numero_noeud; // noeud numeroté de 0 à 700 selon son profondeur unsigned nb_fils; struct _noeud_t **fils; // tableau de pointeurs vers ses fils prof_t profond; struct _noeud_t*pere; // Pour que chq fils connaisse son pere } noeud_t;
typedef struct _arbre_t{ noeud_t *racine; } arbre_t; /** ***************************************************************/ /** @ Construction d'un neoud de l'arbre */ noeud_t* new_noeud(unsigned nb_fils) { noeud_t *noeud = (noeud_t*)malloc(sizeof(noeud_t)); noeud->fils =(noeud_t**) calloc(nb_fils,sizeof(noeud_t)); noeud->nb_fils = nb_fils; return noeud; } /** @ Construction en fonction de son profondeur dans l'arbre */ noeud_t* new_noeud2(prof_t prof_noeud) { unsigned nb_fils; switch(prof_noeud) { case A: nb_fils = 64; break; case B: nb_fils = 64; break; case C: nb_fils = 700; break; case D: nb_fils = 700; break; default: nb_fils = 1; break; } return new_noeud(nb_fils); } /** @ Supprimer d'un neoud de l'arbre */ void supprimer_noeud(noeud_t *noeud) { unsigned i; // Appel récursif : on détruit les fils avant le noeud courant for(i=0;i<noeud->nb_fils;++i) { if(noeud->fils[i]) supprimer_noeud(noeud->fils[i]); } // On relâche le noeud courant free(noeud->fils); // relâche le calloc free(noeud); // relâche le malloc } /** @ Construction d'un fils à partir d'un noeud de l'arbre */ // Pour initialiser le index ème fils d'un noeud, il faut désallouer le index ème fils (s'il y en a déjà un) void construit_un_fils(noeud_t *noeud, unsigned index, noeud_t *fils) { if(index < fils->nb_fils) { if(noeud->fils[index]) supprimer_noeud(noeud->fils[index]); noeud->fils[index] = fils; } } // Et pour récupérer le ième fils d'un noeud : noeud_t *get_fils(noeud_t *noeud, unsigned i) { if(i < noeud->nb_fils) return noeud->fils[i]; }