Sigle de cours Nom de cours Professeure Date Durée 420-202-RE Structures de données et programmation orientée objet Manal TAOUFIKI 31/05/2016 2heures Examen intra Directives 1) Vous avez 6 exercices et 20 questions sur un total de 5 pages (excluant cette page). 2) La pondération de cet examen est de 20 points. 3) Aucune documentation n’est permise. 4) Les cellulaires, agendas électroniques ou téléavertisseurs sont interdits. 5) Vous devez répondre sur le questionnaire 1/6 Exercise1 : [2 points] Cochez la bonne réponse pour les Questions à Choix Multiple (QCM) suivantes. 1) Push() et Pop() sont deux fonctions qui doivent être implémentées dans les:[Q1 ; 0.5point] □ Listes □ Piles □ Files □ Arbres 2) La pile marche selon le principe :[Q2 ; 0.5point] □ LILO □ FIFO □ LIFO □ FILO 3) La file marche selon le principe :[Q3 ; 0.5point] □ LILO □ FIFO □ LIFO □ FILO 4) Une liste simplement chainée doit contenir :[Q4 ; 0.5point] □ un cycle □ une racine □ un nœud □ un entête Exercise2 : [1.5 points] Remplir les lacunes par UN choix approprié parmi les choix donnés : 1) Dans le tas, l’élément qui a une haute priorité est toujours dans le nœud ____________________:[Q5 ; 0.5point] i) Fils ii) Père iii) Premier nœud de sous arbre gauche iv) Premier nœud de sous arbre droit 2) ____________________________ est un arbre dont la différence de hauteur entre son fils gauche et son fils droit est au plus égale à 1. [Q6 ; 0.5point] i) Arbre binaire de recherche ii) AVL iii) Arbre binaire complet iv) Arbre dégénéré 2/6 3) Une propriété des arbres AVL, qui ont n nœuds, est que les fonctions : Find(), Insert() et Delete prennent un temps de _____________:[Q7 ; 0.5point] i) O(log(n)) ii) O(n) iii) O(nlog(n)) iv) O(n) Exercice 3 :[2 points] Cochez V si l’énoncé est vrai et F s’il est faux. 1) Un arbre déséquilibré à N nœuds peut être équilibré en utilisant O(log(n)) rotations. [Q8; 0.5point] □V □F 2) L’algorithme de Dijkistra peut être utilisé pour prouver qu’un arbre est couvrant minimal. [Q9; 0.5point] □V □F 3) Dans une liste circulaire doublement chaînée avec 10 nœuds, nous aurons besoin de changer 4 liens si nous voulons supprimer un nœud autre que la tête de la liste. [Q10; 0.5point] □V □F 4) Si le tableau suivant {6, 2, 7, 13, 5, 4} est ajouté à une file, dans l’ordre indiqué, le premier élément à supprimer sera 4. [Q11 ; 0.5point] □V □F Exercice 4 : [2.5 points] Associez chaque scenario à la structure de données la plus appropriée en indiquant le numéro correspondant. [Q12; 2.5point] Scenario 1. Une épicerie décide de servir le premier arrivé. 2. Aléatoirement et facilement, on peut accéder à n’importe quel élément de la liste avec une complexité O(1). 3. 4. 5. Structure de données a. ___Liste chainée b. ___Liste doublement chainée Un programme a besoin de se souvenir des opérations qu’il a effectuées dans l’ordre opposé. On peut ajouter un élément au début ou à la fin de la liste avec une complexité O(1) Cette structure se distingue par la gestion souple de la mémoire. Par contre, pour arriver la fin de liste de n élément, le programme prend un ordre O(n). 3/6 c. ___Pile d. ___File e. ___Tableau Exercice 5 : [2 points] Considérez l'arbre binaire suivant: 1) Donner le résultat de l'affichage de l'arbre binaire s’il est parcouru en pré-ordre. Séparez les éléments par des virgules. [Q13; 0.5point] 2) Donner le résultat de l'affichage de l'arbre binaire s’il est parcouru en post-ordre. Séparez les éléments par des virgules. [Q14; 0.5point] 3) Donner le résultat de l'affichage de l'arbre binaire s’il est parcouru en ordre. Séparez les éléments par des virgules. [Q15; 0.5point] 4) Donner le résultat de l'affichage de l'arbre binaire s’il est parcouru par niveau. Séparez les éléments par des virgules. [Q16; 0.5point] 4/6 Exercice 6 : [10 points] Supposons que vous disposez d’une liste DOUBLEMENT CHAINEE L avec au moins un nœud interne M qui ne soit pas le dernier nœud. Vous pouvez supposer que chaque nœud a un pointeur Suivant (qui pointe sur le nœud suivant) et un pointeur Précédent (qui pointe sur le nœud précédent) et un élément entier comme suit : class noeud { public : Int element ; noeud * Suivant ; noeud * Precedent ; } 1) Vous ne pouvez PAS changer les données pour accomplir l'une des opérations suivantes. 2) On notera que, pour chaque opération, vous avez besoin de manipuler au moins deux pointeurs Suivant et Précédent. Questions Réponse 1) Supprimer le premier nœud. [Q17; 1 point] Void supprimer() { } 2) Insérer un nœud immédiatement après M. [Q18; 2 points] 3) Echanger le contenu de l’entête de la liste et le nœud M sans échanger leurs donnés. [Q19; 3points] Void insert (nœud *N) { } Void Echanger (nœud * entête, nœud *M) { } 5/6 4) Chercher une valeur entière x dans la liste. Cette fonction est supposée retourner « true » si x existe dans la liste autrement, elle retourne « false ». Remarquez que tous les éléments de la classe Nœud sont publics. [Q20; 4 points] Boolean cherche(int x) { } 6/6