@Brahim DERDOURI Examen-AlgoSD-L2-Info UNIVERSITE DE CERGY-PONTOISE DEPARTEMENT D'INFORMATIQUE Algo & Structures de Données- L2-Info, 2022-23 © Brahim Derdouri Vendredi 6 Janvier 2022 DUREE 2h00 HEURES DOCUMENTS NON AUTORISES EXAMEN D’ALGO-SD L2-INfO-S3 **********************************************PARTIE 1 ************************************** Exercice 1 : Implémentation contiguë d’un Ensemble (4.5Pts=1.0+0.75+1.25+1.5) Le but de cet exercice est la gestion des ensembles en utilisant une représentation contiguë. Un ensemble est constitué d’un nombre fini sans répétitions de ses éléments. On représente le type ensemble par la structure dynamique suivante : typedef int TElement; typedef struct { int nbElemMax; //nbre d’éléments max qu’un ensemble peut contenir. int nbElem; // nombre d’éléments présents dans l’ensemble. TElement *tab; //Stockage des éléments de l’ensemble. } Ensemble ; Ecrire en C, les algorithmes suivantes : 1) Effectuer L’allocation mémoire d’un ensemble en fonction d’un entier donné représentant le nombre maximum d’éléments qui peut contenir l’ensemble. 2) Effectuer la libération mémoire d’un ensemble donné. Ecrire en C (ou en algorithmique) les algorithmes suivants : 3) Déterminer l’intersection de deux ensembles donnés qu’on suppose quelconque. L’intersection de deux ensembles sera 4) placée dans un troisième ensemble. Tester si un ensemble trié donné est inclus dans un autre ensemble trié donné. @Brahim DERDOURI Examen-AlgoSD-L2-Info **********************************************PARTIE 2 ************************************** Exercice3 : Arbre d’Expression (5Pts=4*1.25) On considère les expressions arithmétiques (chaîne de caractères) sur les entiers n’utilisant que les opérateurs binaires +, -, *, /. Ces expressions peuvent être représentées par des arbres binaires dite aussi arbres d’expressions dont les nœuds internes sont étiquetés par l’un des quatre opérateurs tandis que les feuilles sont étiquetées par des entiers. Pour simplifier, on suppose que les opérandes sont des entiers composé d’un seul chiffre. 1) Ecrire en C, un algorithme qui effectue l’évaluation d’un arbre d’expression donné. Ecrire en C (ou en algorithmique) les algorithmes suivants : 2) Déterminer le plus grand opérande présent dans un arbre d’expression donné supposé non vide. 3) En parcourant l’arbre d’expression qu’une seule fois, déterminer le nombre d’opérandes et le nombre d’opérateurs présent dans un arbre d’expression donné. 4) Tester si deux arbres d’expressions donnés aExp et bExp ont les mêmes structures, en ignorant les données associées aux nœuds. L’arbre d’expression représentant l’expression Exp=((3+(6*2))-(4*(9-3))) L’arbre d’expression est représenté par la structure de données suivante : typedef char TElement; typedef struct noeud{ TElement donnee; struct noeud *filsG; struct noeud *filsD; }*ArbreExp; Rappels : 1) On dit qu'un ensemble A est inclus dans un ensemble B si tous les éléments de A sont aussi éléments de B. Exercice4 : Arbre Binaire && Arbre Binaire de Recherche (5.0Pts=1.25+1+0.75+0.5+1.5+0.5) 2) L’intersection de deux ensembles A et B est formée par les éléments qui sont dans A et dans B, c’est-à-dire par les éléments présents à la fois dans A et B (en évitant les répétitions des éléments identiques) 1) L’arbre binaire (resp l’arbre binaire de recherche) est représenté par la structure de données ci-contre : typedef int TElement; typedef struct noeud{ TElement donnee; Ecrire en C, l’algorithme d’insertion d’un élément struct noeud *filsG; donné dans un arbre binaire de recherche donné. struct noeud *filsD; }*Arbre; Exercice 2 : Implémentation chaînée d’un Ensemble (5.5Pts=0.75+0.75+1+1.25+0.75+1) Le but de cet exercice est la gestion des ensembles en utilisant une représentation chaînée. Un ensemble est constitué d’un nombre fini sans répétitions de ses éléments. Pour faciliter la gestion des ensembles, on rajoutera deux adresses : la première adresse pour indiquer la tête et la seconde adresse pour indiquer la queue. Un ensemble est représenté par la structure de données suivante : tyedef int TElement; typedef struct{ TElement donnee ; struct cellule* suivant ; }*Liste ; typedef struct { Liste tete; Liste queue; }Ensemble; 32 20 17 32 29 27 Ecrire en C, les algorithmes ci-dessous : 1) L’insertion en tête d’un élément donné dans un ensemble donné. 2) L’insertion en queue d’un élément donné dans un ensemble donné. 3) L’insertion classée d’un élément donné dans un ensemble trié donné. (Après l’insertion l’ensemble restera trié.) 4) Transformer un ensemble quelconque en un ensemble trié. 5) La suppression en tête dans un ensemble donné supposé non vide. 6) La suppression d’un élément donné dans un ensemble trié donné supposé non vide. 14 32 11 43 32 Figure 1 Figure 2 2) Ecrire en langage algorithmique (ou en C), l’algorithme de construction d’un arbre binaire de recherche à partir d’un arbre binaire donné parcouru selon le parcours en largeur. 3) Appliquer graphiquement (sous forme d’arbres) votre algorithme de construction à l’arbre binaire ci-dessus (figure1). 4) Décrire le principe de suppression d’un élément donné dans un arbre binaire de recherche donné. 5) Ecrire en C, l’algorithme de suppression d’un élément donné dans un arbre binaire de recherche donné. 6) Appliquer votre algorithme à la suppression de l’élément 5 dans l’arbre binaire de recherche ci-dessus (figure2). 1 2 @Brahim DERDOURI Examen-AlgoSD-L2-Info NOTES CHAQUE PARTIE DOIT ETRE REDIGEE SUR UNE FEUILLE SEPAREE Les réponses aux questions doivent être claires et justifiées. Pour chaque algorithme (ou fonction en C), vous aurez soin d’expliquer les différentes actions de l’algorithme ainsi que le passage des paramètres. Chaque algorithme (ou fonction en C) supplémentaire utilisé doit être défini. On suppose connues les primitives des piles et des files et donc vous pouvez l’utiliser sans les redéfinir. *************************************************Annexes*********************************************** On suppose connu les algorithmes suivants : EXERCICE 1 : IMPLEMENTATION CONTIGUË D’UN ENSEMBLE Fonction nbEltsMax : Ensemble Entier Fonction nbElts : Ensemble Entier Fonction iEmeElts : Entier x Tableau TElement Fonction initE : Ensemble Ensemble Fonction estVideE : Ensemble Boolean Fonction estPleinE : Ensemble Boolean EXERCICE 2 : IMPLEMENTATION CHAINEE D’UN ENSEMBLE Fonction donnee : Liste TElement Fonction suivant : Liste Liste Fonction initL : [] Liste Fonction estVideL : Liste Boolean Fonction tete : Ensemble Liste Fonction queue : Ensemble Liste EXERCICE 3 & 4 : STRUCTURE ARBRES BINAIRES Fonction donneeA : Arbre TElement Fonction filsGauche : Arbre Arbre Fonction filsDroit : Arbre Arbre Fonction initA : [] Arbre Fonction estVideA : Arbre Booléenne Fonction creatFeuille : TElement Arbre Fonction creatNoeud : TElement x Arbre x Arbre Arbre STRUCTURE PILE STRUCTURE FILE Fonction initP : []Pile Fonction initF : []File Fonction estVideP : Pile Booléenne Fonction estVideF : File Booléenne Fonction estPleinP: Pile Booléenne Fonction estPleinF: File Booléenne Fonction sommetP : Pile TElementP Fonction sommetF : File TElementF Fonction empiler : TElementPxPile Pile Fonction enfiler : TElementFxFile File Fonction depiler : Pile Pile Fonction defiler : File File 3