Devoir - WordPress.com

publicité
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
Téléchargement