Vous êtes sur la page 1sur 3

Université de Manouba Année universitaire 2009-2010

***
Ecole Nationale des Sciences de l’Informatique

Examen de Rattrapage
Matière : Structures de données Date : 11/06/2010
Enseignants : K. Ben Rhouma, A. Ben Hassine, R. Chebil, H. Ben Ali, N. Ben Mustapha
Durée : 2h Nombre de pages : 3
Documents non autorisés

Directives
∗ Les opérations de base définies en cours sur les piles et les files peuvent être utilisées sans être
développées.
∗ Veuillez numéroter vos feuilles.

Exercice 1 (8pts)
Nous souhaitons automatiser l’activité de gestion des clients d’une agence de voyage. Les
clients doivent être traités dans leurs ordres d’arrivées à l’agence. Un client est caractérisé par son
NCIN, son nom, son prénom et la date de son voyage (effectué ou à effectuer).
1. Donner la représentation des clients de l’agence en utilisant la structure File.
2. On veut d’abord diviser la file précédente en deux files F1 et F2. La première contenant
uniquement les clients qui ont effectué un et un seul voyage et qui n’ont pas d’autres voyages à
effectuer et la deuxième contenant tous les autres clients. Ensuite, on veut mettre les noms et
prénoms des clients de F2 (qu’on appelle clients fidèles) dans une liste, sans redondance, avec le
nombre de voyages effectués et le nombre de voyages à effectuer (d étant la date courante).
Pour cela:
a. Donner une représentation adéquate pour la liste des clients.
b. Ecrire une procédure qui permet de construire les files F1 et F2.
c. Ecrire une fonction qui permet de retourner la liste des clients fidèles sans modifier
la File F2.
d. Supposons qu’un client vient se présenter à l’agence pour programmer un voyage. Ecrire
une procédure qui permet de traiter ce client et mettre à jour les structures concernées.
3. Pour faciliter encore plus le travail de l’agence, et pour pouvoir gérer les clients ayant effectué
un nombre donné X de voyages ; on se propose de mettre ces clients dans une pile et d’associer
à chaque client une file contenant l’historique de ses voyages.
a. Donner la structure de la pile en précisant la structure utilisée pour l’historique des
voyages de chaque client.
b. Ecrire une procédure récursive qui étant donné un nombre de voyages X, donne la pile
des clients ayant effectué ce nombre de voyages avec leurs historiques.
c. Supposons que le client nommé Y veut annuler son ou ses voyages à effectuer après une
date donnée Z. Ecrire une procédure permettant de mettre à jour les structures
concernées.
Exercice 2 (8pts)
On s’intéresse dans cet exercice à une structure d’arbre binaire, dont chaque nœud contient une
clé (un caractère) non redondante. La position d'un nœud dans cet arbre peut être caractérisée par le
chemin qui conduit de la racine à ce nœud. Dans ce qui suit, on appelle position d'un nœud, la
séquence de bits (entiers valant 0 ou 1) décrivant ce chemin : chaque bit correspond à un arc de ce
chemin ; un 0 correspond au passage d'un nœud à son fils gauche et un 1 au passage d'un nœud à
son fils droit. La position de la racine est la séquence vide.
La figure ci-dessous illustre ce principe (les lettres A, B,… dénotent des noms de nœuds) :

A[] B  [0]
B C
C  [1] D  [0, 0]
E  [0, 1] F  [1, 0]
D E F G G  [1, 1] H  [0, 0, 1]
I  [1, 0, 0] J  [1, 0, 1]
K  [1, 1, 0]
H I J K

Dans tout l’exercice, toute séquence de bits déterminant la position d’un nœud, sera représentée par
la structure Liste décrite comme suit :
Type Nœud = structure
val : Entier
suiv : ^Noeud
Fin structure
Type Liste= ^Nœud

1. Ecrire une fonction récursive qui, étant donnée la séquence L de positionnement d’un nœud;
retourne sa valeur.
2. Ecrire une procédure qui, étant donnée la valeur d’un nœud de l’arbre ; retourne sa position.
3. Ecrire une procédure qui permet d’ajouter une feuille à l’arbre étant donnée une position
supposée correcte d’ajout.
4. La structure d'un arbre est entièrement caractérisée par l'ensemble des positions de ses feuilles.
On s’intéresse dans cette partie à la création d’un arbre à partir de la donnée des positions de ses
feuilles :
a) Ecrire une procédure permettant de créer un arbre filiforme (dégénéré) étant donnée la
position de sa feuille. Vous pouvez utiliser la procédure de la question 3.
b) Les positions des feuilles sont données sous forme d’une liste de positions ; donner la
représentation algorithmique cette structure de données.
c) Etant données les positions des feuilles d’un arbre ; écrire une fonction permettant de le
créer.
5. Dans la partie suivante, on s’intéresse aux arbres binaires de recherche :
a) Etant donnée la valeur X d’un nœud ; écrire une procédure qui retourne sa position
d’ajout dans un arbre binaire de recherche.
b) En utilisant les procédures développées dans les questions 3 et 5.a ; écrire une procédure
permettant de transformer un arbre binaire quelconque en un arbre binaire de recherche.

Exercice 3 (4pts)
On s’intéresse dans cet exercice au type abstrait Graphe orienté. Les opérations élémentaires
auxquelles nous nous intéressons sont la création d’un graphe, le test si un arc existe, le test si un
sommet existe, l’ajout d’un sommet identifié par son numéro, l’ajout d’un arc, la suppression d’un
sommet et la suppression d’un arc.
1. Donner la signature de ce type abstrait de données.
2. Donner les pré-conditions et axiomes relatives aux opérations énoncées.

 Bon Travail 

Vous aimerez peut-être aussi