Au premier niveau la liste est ordonnée par ordre alphabétique sur les noms de famille (liste simplement chainée de familles)
une famille est un enregistrement avec un nom (chaine de 20 caractere) et un pointeur sur une liste de parents sachant que chaque parent possede une liste d'enfants (nombre illimité)
chaque personne (parent ou enfant) est définie par un prénom (chaine de 20 caractere ) et un sexe
Tu as donc besoin au minimum de deux types d'enregistrement:
1 2 3 4 5 6 7 8 9 10 11 12
| struct Personne {
char prenom[20] ;
int sexe;
Personne* enfants;
Personne* next;
};
struct Famille {
char nom[20];
Personne* parents;
Famille* next;
}; |
1: Ajouter:d'autres familles
comme il faut le faire dans l'ordre alphabétique tu devras écrire une fonction avec la signature suivante:
void ajouterFamille(Famille* f, Famille* listeFamille);
où listeFamille est la première famille de la liste et qui parcourra la liste jusqu'à trouver un nom postérieur dans l'ordre alphabétique.
2: calculer : le nombre total d'enfants d'une famille donnée
unsigned nombreEnfants(Famille* listeFamille);
3: calculer: le nombre d'enfants d'un parent d'une famille donnée
4: Afficher: les informations des parents d'une famille donnée ( prénom, sexe, nombre d'enfants pour chaque parent)
5: supprimer: les enfants décédés d'un parent d'une famille donnée
etc...
Les points importants sont les suivants:
- une liste simplement chaînée est une liste dont les membres comporte d'une part une valeur, d'autre part un pointeur vers le prochain membre de la liste (ou nullptr s'il n'y en a pas). A noter que std::list est une liste doublement chaînée (chaque membre contient également un pointeur sur le membre précédent).
- on parcourt une liste simplement chaînée avec une boucle du genre:
for (Membre* m = debutListe; m != nullptr; m = m->next) {faireqqc(m);}
- on insère un nouveau membre après le membre m de la façon suivante:
1 2 3
| Membre* tmp = m->next;
m->next = nouveauMembre;
nouveauMembre->next = tmp; |
- on supprime un membre m1 entre m0 et m2 de la façon suivante:
Avec ces infos, un peu de sueur et de bon sens tu n'auras pas de difficulté à faire ton exercice et à avoir ton exam!
Partager