Vous êtes sur la page 1sur 3

ENSAM-Casablanca Filière IAGI 2020-2021

Examen 1ére session – Structure de données en C


Durée : 1h15

Exercice 1 : 8 points

Dans cet exercice on considère la structure de liste chainée suivant le modèle de base suivant :

typedef struct cel


{
float vl;
struct cel *suiv;
}cellule;

Nous désirons implémenter quelques fonctions supplémentaires de gestion des listes :

Q1) Implémenter une méthode void rotation(cellule *) qui permet de déplacer le dernier élément
d’une liste simplement chaînée dans le début de cette liste (sans créer une nouvelle cellule).
Q2) Implémenter une méthode void concat(cellule * L, cellule *M) pour concaténer la liste M
à la fin de la liste L
Q3) Implémentez la méthode void clone (cellule *L, cellule * CL), L est supposée remplis et CL
vide. La fonction permettra de cloner la liste L dans la nouvelle liste CL.

Exercice 2 : 7 points

Soit l’arbre de recherche suivante

Q4) Quelle est la profondeur de cet arbre ? le nombre de niveaux ?

Donner les résultats du parcours de cet arbre en effectuant :

Q5) Un parcours infixé


Q6) Un parcours suffixé
Q7) Un parcours préfixé
Q8) Un parcours en profondeur
Q9) Est-ce que c’est un arbre AVL ?
Q10) Insérer ensuite la valeur 11. L’arbre devient déséquilibré. Donner le nœud par rapport auquel il faut
effectuer l’équilibrage en précisant le type de l’opération (rotation) qu’il faut effectuer.

1
ENSAM-Casablanca Filière IAGI 2020-2021

Exercice 3 : le problème de X-men 5 points

X-men avait une célèbre histoire de guerre. Durant une guerre il fut pris au piège dans une cave avec son groupe
de 40 soldats, entouré par les troupes ennemies. La légende raconte que le groupe encerclé préféra mettre fin à
leurs vies plutôt que d'être capturé. Ainsi x-men et ses soldats formèrent un cercle et décidèrent de se tuer
mutuellement et successivement. De manière à ce qu'un soldat se fait tuer par un autre soldat, il faut choisir
ensuite le prochain soldat d’une certaine manière imprédictible (suivant un algorithme), ainsi de suite jusqu'à ce
qu'il ne reste qu'un seul survivant. Restant seul, ce dernier est censé se suicider lui-même. X-men, qui ne
souhaitait pas mourir, doit trouver rapidement la place sûre, c'est-à-dire la place de la dernière personne debout,
sans que quiconque ne reste pour le tuer. Ainsi il resta en vie et put par la suite raconter cette légende.

Trouver cette place sûre est maintenant appelé le problème de X-men.

Soit N nombres 1, 2, 3,…, N sont disposés en cercle. On les enlève un par un suivant le procédé suivant : On part
de 1, qu’on enlève, et on avance d’une place. On tombe sur 2 que l’on enlève, et l’on avance de deux places
(correspondant au nombre que l’on vient de supprimer). On tombe sur 4, etc. A chaque étape, après avoir enlevé
le nombre k, on avance de k place sur le cercle. A la fin, il ne reste qu’un seul nombre et l’on s’arrête. Par exemple
pour N=9, les éléments supprimés sont 1,2,4,8,5,6,3,7, et il reste le 9 ( voir la figure suivante).

2
ENSAM-Casablanca Filière IAGI 2020-2021

On veut programmer cela pour afficher le nombre final, et l’on utilise pour cela une liste chaînée doublement
circulaire.

Une liste circulaire doublement chaînée :

• Chaque cellule à deux pointeurs : un pointeur qui pointe sur la cellule suivante et un pointeur qui pointe
sur la cellule précédente.

• Le pointeur (suivant) du dernier élément pointe sur le premier élément. Le pointeur (précèdent) du
premier élément pointe sur le dernier élément.

Q11) Définir la structure de la cellule de base.


Q12) Donner une fonction qui prend en argument un nombre n et qui construit et retourne la liste
circulaire doublement chaînée de n élément comportant les numéros successifs de 1 à n.
Q13) Donner une fonction qui prend en argument la liste circulaire doublement chaînée, et qui
retourne le numéro du dernier survivant suivant la méthode décrite.

Bon courage

Vous aimerez peut-être aussi