Vous êtes sur la page 1sur 7

Correction Examen

Questions de cours : (4pts = 2+1+1)

1) Quelle est la différence entre le parcours préfixe et le parcours post-fixe ? Illustrer la


différence par un exemple de votre choix.

Soit l’arbre suivant : 9


Parcours préfixe :
9-7-3-2-4-8-12-10-13 7 12
Parcours postfixe :
3 8 10 13
2-4-3-8-7-10-13-12-9
2 4

2) Donner un exemple de chacune des structures de données linéaires et non linéaires.


Structures de données linéaires :
Les éléments sont organisés de façon séquentielle
Parcours par les boucles
Pas de notion de l’hiérarchie
Exemple : les tableaux, les Listes simplement chainées et les listes doubles chainées.

Structures de données non linéaires:


Les éléments sont liés de façon hiérarchique
Exemple : les arbres.

3) Ordonner en ordre décroissant les complexités d’ordres suivants : O(2n) ; O(log(n)) ;


O(nlog(n)) et O(n3).

O(n3) >> O(2n) >> O(nlog(n)) >> O(log(n))

Exercice 1 : (Liste simplement chaînée : 8 Pts = 2+1.5+1.5+1.5+1.5)

Le gérant d’une vidéothèque souhaite informatiser son système de gestion


d'emprunts de films. Un film est stocké dans un CD (compact Disque). Un CD ne
contient qu’un seul film. Un film est caractérisé par son code (codef) et le titre du film
(titre) en tant que chaine de caractères. Un CD est caractérisé par son code et le code
du film qu’il contient.
Un Client est caractérisé par son CIN et son nom. Il peut emprunter un CD qui
contient le film de son choix.
La liste des CDs empruntés par un client sont stockés dans une liste simplement

1
chaînée.
1) Définir les types client, film et CD.
Type
client= enregistrement
CIN:entier
nom:chaine
fin enregistrement

film= enregistrement
Code_film:entier
titre:chaine
fin enregistrement

CD= enregistrement
code_cd:entier
code_film:entier
fin enregistrement
2) Définir le type emprunt où on trouve le CIN du client et la liste des CDs qu’il a
empruntée.
Type
LC_CD= enregistrement
val:CD
suiv:^LC_CD
fin enregistrement

emprunt= enregistrement
CIN:entier
list_CD:^LC_CD
suiv:^emprunt
fin enregistrement

CIN = 1000 CIN = 2000


Code CD = 10 20 30 40 Code CD = 15 25 35 45 55
Code film = 1 2 3 4 Code film = 5 6 7 9 10

2
3) Ecrire une procédure pour insérer en queue un CD emprunté par un client
existant et qui est identifié par un CIN.
A compléter
Procédure insert (emp:^emprunt, C: entier, v:CD)
Variables
LC,L :^LC_CD
e:^emprunt
Debut
e← emp
tant que(e <>nil) et (e^.CIN <>C) faire
e←e^.suiv
fin tant que

LC = e^.list_CD
si (LC<>nil) alors
tant que(LC^.suiv<>nil) faire
LC←LC^.suiv
fin tant que

L←nouveau(^LC_CD)
L^.val←v
L^.suiv←nil
LC^.suiv←L
sinon
L←nouveau(^LC_CD)
L^.val←v
L^.suiv←nil
LC←L
Fin si

Fin

3
4) Ecrire une procédure qui supprime un CD de la liste des CD empruntés par un
client en se basant sur son CIN () et le code du CD à supprimer.

Procedure supp (emp: ^ emprunt,C: entier, Code: entier)


Variables
e: ^emprunt
L:^LC_CD

Debut
e←emp

si (e<>nil)

tant que (e<>nil et e^.CIN<> C) faire


e←e^.suiv
fin tant que
L←e.list_CD
tant que(L^.suiv^.suiv<>nil et L^.suiv^.CD.code_cd<>code) faire
L←L^.suiv
fin tant que

A compléter (voir cours : tête, position k, queue)

si( L^.suiv^.CD.code_cd=code) alors


………………………..
liberer(L1)
fin si

fin si
fin
5) Ecrire une procédure qui permet d’afficher le CIN ainsi que tous les codes des CDs
empruntés.
Procédure affichage (e: ^emprunt)
Variables
L:^LC_CD
Debut
Tant que(e<>nil) faire
ecrire(e.CIN)
L←e^.list_CD
tant que(L<>nil) faire
ecrire(L^.CD.code_cd)
` L←L^.suiv
fin tant que
e←e^.suiv
Fin tant que
Fin

Exercice 2 : (Arbre binaire de recherche : 8 Pts = 1+1.5+2+1+1.5+1)

4
Dans cet exercice, vous pouvez exploiter les procédures et les fonctions définies dans l’exercice 1.

On suppose que la vidéothèque veut utiliser une autre version de l’application basée sur une
structure de données arbre binaire de recherche.

1) On vous demande de définir la structure de données arbre binaire de recherche où dans un


nœud on trouve le CIN du client et un champ contenant les CD empruntés sous forme d’une
liste chainée.

Type
CD= enregistrement
code_cd:entier
code_film:entier
fin enregistrement

LC_CD = enregistrement
val:CD
suiv:^LC_CD
fin enregistrement

ABR=Enregistrement
CIN_ABR: entier
list_cd:^LC_CD
fg:^ABR
fd:^ABR
fin enregistrement

2) Ecrire une procédure permettant de rajouter un client à l’arbre binaire de recherche. On


suppose que durant l’ajout du client, la listé des CDs empruntée est vide.

Procedure ajout (Var r:^ABR, CIN:entier, L: ^LC_CD )


Debut
si(r=nil) alors
r←nouveau(^ABR) 1000
r^.CIN_ABR←CIN 15 25 33
r.list_cd←nil
r^.fg←nil
r^.fd←nil
sinon 500 2000
10 20 30 17 27 37
si(r^.CIN_ABR>CIN) alors
ajout(r^.fg,CIN,L)
sinon
ajout(r^.fd,CIN,L) Fig : Exemple d’arbre
fin si
fin si

fin

3) Ecrire une procédure qui cherche un client par son CIN dans l’arbre binaire de recherche.

Procedure recherche_client (r:^ABR,CIN:entier,Var re:^ABR)


Variables

Debut

5
si (r=nil) alors
re←nil
sinon
si (r.CIN_ABR=CIN) alors
re←r
sinon
si(r^.CIN_ABR>CIN) alors
re←recherche(r.^fg.CIN,re)
sinon
re←recherche (r.^fd.CIN,re)
fin si
fin si
fin si
Fin

4) Ecrire une procédure permettant de rajouter dans l’arbre binaire de recherche un CD. Le CD
est emprunté par un client et devra être stocké dans la liste chaînées du nœud du client
reconnu par son CIN.

procedure rajouter ( r:^ABR,CIN:entier,L: LC_CD)


Variables
re:^ABR

Début
recherche_client(r,CIN,re)
si (re=nil) alors
ecrire (“client non stocké“)
sinon
ajout_CD (re,CIN,L)
A compléter (voir cours : insertqueue)

fin si
Fin

5) Ecrire une procédure qui permet d’afficher pour chaque client la liste des CDs qu’il a
empruntés et qui est stocké dans l’arbre binaire de recherche.

Procédure préfixe(r:^ABR)
Variable

6
L :LC_CD
Début
si (r<>nil) alors
écrire (r^.CIN_ABR)
L← r^. list_cd
tantque (L<>nil) faire
ecrire (L^.val.code_cd)
ecrire (L^.val.code_film)
L←L^.suiv
fin tantque

préfixe(r^.fg)
préfixe (r^.fd)
fin si

Fin
6) Ecrire une procédure permettant de supprimer un CD d’une liste de Cds d’un client donné.

procedure supp(r^:ABR ,CIN:entier,CODE_CD:entier)


variable
re:^ABR
L,L1: ^LC_CD

debut
recherche_client(r,CIN,re)
si (re=nil)
ecrire (“client non stocké ‘’)
sinon
L←re^.list_cd
……………

A compléter (voir cours : suptête, supposition k, supqueue)

fin si
fin

Bonne chance.

Vous aimerez peut-être aussi