Vous êtes sur la page 1sur 6

Université Mohamed Khider-Biskra

Faculté des Sciences Exactes et Sciences de la Nature et de la Vie


Département d’informatique

2ème année LMD Algorithmique et Structures de données


18 Fév 2020 16:30-18:30, Amphis 1,2
Examen de rattrapage

Exercice 1 Listes linéaires chaı̂nées (6 pts : 2 + 2 + 2)

On souhaite dans cet exercice traiter des listes représentant le concept mathématique d’ensemble. chaque
ensemble est représenté par une liste linéaire chainée.
Exemple : l’ensemble {1, 3, 9, 0, 6} est représenté par la liste de la figure suivante :
T ete 7−→ [1] 7−→ [3] 7−→ [9] 7−→ [0] 7−→ [6] 7−→ N il

On vous demande d’écrire les procédures et fonctions suivantes :


1. Fonction Appartient(E :pointeur(TMaillon), x :entier) :Boolean ;
Une fonction récursive qui vérifie si l’élément x appartient à l’ensemble E ou non. Elle retourne Vrai
si x appartient à E Faux sinon.
2. Procédure Retirer(E1 :pointeur(TMaillon), var E2 :entier)
Une procédure itérative permettant de retirer tous les élément de l’ensemble E1 de l’ensemble E2 .
3. Procédure Intersect(E1 , E2 :pointeur(TMaillon), var E :pointeur(TMaillon))
Une procédure itérative permettant de créer l’ensemble E contenant l’intersection des deux ensembles
E1 et E2 .

Exercice 2 Arbres de recherche binaires (8.5 pts : 3 + 2.5 + 3)

Nous nous intéressons dans cet exercice aux arbres de recherche binaires d’entiers :

Écrire les procédures et fonctions suivantes sur les arbres binaires de recherches d’entiers.
1. Fonction ARB(R :Poniteur(TNoeud)) :booléen ;
Permettant de retourner Vrai si l’arbre de recherche binaire d’entiers de racine R est correct (respecte
les caractéristiques d’un ARB) et Faux sinon.

2. Fonction Frere(R :Pointeur(TNoeud), x :entier) :Pointeur(TNoeud) ;


Permettant de retourner le pointeur sur le frère de x dans l’arbre de racine R. par exemple, dans la
figure le frère de 8 est 14 et le frère de 20 est 12 tandis que 13 et 17 n’ont pas de frères.

3. Fonction Rang(R :Pointeur(TNoeud), x :entier) : entier ;


Permettant de retourner le rang de x dans l’arbre de recherche binaire de racine R. La rang de x dans
R est le nombre de nøeuds de valeur inférieure à x.
Par exemple, le rang de 14 est 4 (12, 8, 10, 13), le rang de 17 est 7.

Page 1 de 6
Exercice 3 Graphes (5.5 pts : 1.5 + 3 + 1)

On souhaite représenter un graphe orienté étiqueté en mémoire sous forme de liste d ?adjacences comme
suit :

Graphe Représentation

1. Donner la déclaration des structures de données nécessaires à la représentation d’un tel graphe en
mémoire.

2. Écrire la Procédure DFS(i :entier) permettant d’afficher tous les nœuds qu’on peut atteindre à
partir du nœud i.

3. Ecrire la Fonction Chemin(i, j : entier) permettant de retourner Vrai si un chemin existe entre les
deux nœuds i et j.

FFF Bonne chance FFF

Page 2 de 6
Corrigé type
Exercice 1 Listes linéaires chaı̂nées (6 pts : 2 + 2 + 2)

1. Fonction Appartient(E :pointeur(TMaillon), x :entier) :Boolean ;

Fonction Appartient( L : pointeur(TMaillon), x : réel) : booléen;


Début
Si (E=Nil) Alors
Appartient←Faux ;
Sinon
Si ( x = Valeur(E)) Alors
Appartient←Vrai ;
Sinon
Appartient←Appartient(Suivant(E),x) ;
Fin Si;
Fin Si;
Fin;
2 pts

2. Procédure Retirer(E1 :pointeur(TMaillon), var E2 :entier)

Procédure Retirer( E1 : pointeur(TMaillon), var E2 : pointeur(TMaillon));


var P 1, P 2, P P 2 : Pointeur(TMaillon) ;
Début
P 2 ← E2 ; P P 2 ← Nil ;
Tant que ((P2 6= Nil)) faire
P 1 ← E1 ;
Tant que ((P1 6= Nil) et (Valeur(P1 ) 6= Valeur(P2 )) faire
P 1 ← Suivant(P1 ) ;
Fin TQ;
Si ( P 1 6= Nil) Alors
Si (P P 2 6= Nil) Alors
Aff Adr(P P2 ,Suivant(P2 )) ;
Libérer(P2 ) ;
P 2 ← Suivant(P P2 ) ;
Sinon
E2 ← Suivant(E2 )) ;
Libérer(P2 ) ;
P 2 ← Suivant(E2 ) ;
Fin Si;
Sinon
P P2 ← P2 ;
P2 ← Suivant(P2 ))
Fin Si;
Fin TQ;
Fin;
2 pts

Page 3 de 6
3. Procédure Intersect(E1 , E2 :pointeur(TMaillon), var E :pointeur(TMaillon)) E2 .

Procédure Intersect( E1 , E2 : pointeur(TMaillon), var E : pointeur(TMaillon));


var P, P 1, P 2 : Pointeur(TMaillon) ;
Début
P 1 ← E1 ;
E ← Nil ;
Tant que ((P1 6= Nil)) faire
P 2 ← E2 ;
Tant que ((P2 6= Nil) et (Valeur(P2 ) 6= Valeur(P1 )) faire
P 2 ← Suivant(P2 ) ;
Fin TQ;
Si ( P 2 6= Nil) Alors
Allouer(P ) ;
Aff Valuer(P ,Valeur(P2 )) ;
Aff Adr(P ,E) ;
E←P;
Fin Si;
Fin TQ;
Fin;
2 pts

Exercice 2 Arbres de recherche binaires (8.5 pts : 3 + 2.5 + 3)

1. Fonction ARB(R :Poniteur(TNoeud)) :booléen ;

Fonction ARB( R : pointeur(TNoeud)) : booléen;


Début
Si (R=Nil) Alors
ARB← Vrai ;
Sinon
Si ( (F G(R) 6= NIL) et (Valeur(R)< Valeur(FG(R)) ou (F D(R) 6= NIL) et
(Valeur(R)> Valeur(FD(R)) ) Alors
ARB← Faux ;
Sinon
ARB ← ARB(FG(R)) et ARB(FD(R)) ;
Fin Si;
Fin Si;
Fin;
3 pts

Page 4 de 6
2. Fonction Frere(R :Pointeur(TNoeud), x :entier) :Pointeur(TNoeud) ;

Fonction Frere( R : pointeur(TNoeud), x : entier) : pointeur(TNoeud);


var P N, N : Pointeur(TNoeud) ;
Début
P N ← Nil ;
N ← R;
Tant que ((N 6= Nil) et Valeur(N) 6= x ) faire
PN ← N ;
Si ( Valeur(N ) > x ) Alors
N ← FG(N ) ;
Sinon
N ← FD(N ) ;
Fin Si;
Fin TQ;
Si ( N = Nil ou P N = Nil ) Alors
Frere← Nil ;
Sinon
Si ( Valeur(N )>Valeur(P N ) ) Alors
Frere← FG(P N ) ;
Sinon
Frere← FD(P N ) ;
Fin Si;
Fin Si;
Fin;
2.5 pts

3. Fonction Rang(R :Pointeur(TNoeud), x :entier) : entier ;

Fonction Rang( R : pointeur(TNoeud), x : entier) : entier;


var P N, N : Pointeur(TNoeud) ;
Début
Si (R = Nil) Alors
Rang ← 0 ;
Sinon
Si (Valeur(R) > x ) Alors
Rang ← Rang(FG(R),x) ;
Sinon
Rang ← 1 + Rang(FG(R),x) + Rang(FD(R),x) ;
Fin Si;
Fin Si;
Fin;
3 pts

Page 5 de 6
Exercice 3 Graphes (5.5 pts : 1.5 + 3 + 1)

1. Déclaration des structures de données nécessaires à la représentation du graphe en mémoire :

Type TMaillon = Structure


Successeur : entier ;
Pois : réel ;
Suivant : Pointeur(TMaillon) ;
Fin ;
Var Graphe : Tableau[1..n] de Pointeur(TMaillon) ;
1.5 pt

2. Procédure DFS(i :entier)

Var Visité : Tableau[1..n] de booleen ; // initialisé à faux avant l’appel


Procédure DFS( i : entier ;);
var P : Pointeur(TMaillon) ;
Début
Visité[i] ← Vrai ;
Ecrire(i) ;
P ← Graphe[i] ;
Tant que (P 6= Nil) faire
Si (non Visité[Successeur(P )]) Alors
DFS(Successeur(P ))
Fin Si;
P ← Suivant(P ) ;
Fin TQ;
Fin;
3 pts

3. Fonction Chemin(i, j : entier)

Fonction Chemin( i, j : entier) : entier;


var s : entier ;
Début
Pour s de 1 à n faire
Visité[s] ← Faux ;
Fin Pour;
DFS(i) ;
Chemin ← Visité[j] ;
Fin;
1 pt

Page 6 de 6

Vous aimerez peut-être aussi