Vous êtes sur la page 1sur 2

TD N°4 Algorithmique et structures de données

Les Listes circulaires


Niveau : 1ère année IM 2012/2013

AM-STRAM-GRAM est un jeu dans lequel n enfants forment une ronde et choisissent l'un d'entre eux
comme étant le premier. Puis ils commencent à partir de lui et décident que le kieme enfant doit quitter
la ronde, puis recommencent à compter, et le kieme suivant doit également sortir et ainsi-de suite,
jusqu'au dernier enfant restant.
Par exemple, si on a 8 enfants notés e1, e2, ..., e8, pour k=3, les enfants sortiront dans l'ordre suivant:
e3, e6, el, e5, e2, e8, e4 et le dernier restant est e7 (qui est donc le gagnant).

Pour k=3, on compte 3 à partir


du premier enfant : c'est e3 qui e2
va sortir en premier lieu. Premier enfant de la
ronde
Premier enfant de la e1
ronde e2
e4
e3
e1
e8
e4 e5

e7
e8 e6
e5
Après avoir supprimé e3, on
e7 compte 3 à partir de e4, c'est
e6 donc e6 qui doit être supprimé.

e2

e1
e4

Après avoir supprimé e6, on


e8 compte 3 à partir de e7, c'est e1 qui
e5 sera supprimé… et ainsi de suite
jusqu'à ce qu'il nous reste un seul
enfant dans la ronde
e7

Premier enfant de la
ronde

On se propose de représenter la ronde des enfants par une liste circulaire simplement chaînée. Un
enfant est caractérisé uniquement par son nom et son sexe.

1
1. Définir les types enfant et ronde permettant de représenter respectivement un enfant et une
ronde d'enfants.
2. Ecrire la fonction compter_filles (L: ronde): entier, qui renvoie le nombre de filles dans
ronde.
3. Développer la procédure ajouter_enfant(enf: enfant; var L: ronde) permettant d'ajouter un
enfant enf donné au début de la liste L.
4. Ecrire la procédure sortir_enfant(k: entier; var L: ronde) qui permet de supprimer le kéme
enfant de la liste à partir de l'adresse L. la fonction doit aussi placer le pointeur L sur la cellule
qui suit celle qui est supprimée.
5. En se basant sur la procédure précédente, implémenter la fonction retourner_gagnant(k:
entier; var L: ronde): ronde, qui doit retourner l'adresse du dernier enfant restant dans la
ronde.
6. Ecrire un algorithme qui permet de :
. Construire une ronde de n enfants (n est donnée par l'utilisateur; n> 1).
. Afficher le nom du joueur gagnant si le pas k = 3.

BON TRAVAIL%

Vous aimerez peut-être aussi