Vous êtes sur la page 1sur 1

Département Mathématiques, Physique & Informatique

Faculté Polydisciplinaire de Taza


Université Sidi Mohamed Ben Abdallah de Fès

Examen d'algorithmes Structures de données


Session de rattrapage
Durée: 2 heures

Le 11 Juillet 2013

Exercice 1: Fonctions récursives sur les listes simplement chainées (6 points)


Une liste simplement chainée est définie en langage C par:
typedef struct element
{
int val;
struct element *suivant;
} element;
typedef element* liste;
On suppose que l’on dispose des fonctions de manipulation suivantes pour de telles listes:
 Fonction Est_vide (liste l) : Renvoie vrai si la liste est vide et faux sinon
 Fonction Liste_vide () : Renvoie la liste vide
 Fonction Tête (liste l) : Renvoie la valeur contenue dans la tête de l

1. Écrire une fonction récursive qui insère un élément à la fin d’une liste.
2. Écrire une fonction récursive qui renvoie l'adresse du plus petit élément dans une liste.
3. Écrire une fonction récursive qui recherche l’élément le plus présent dans une liste puis renvoi sa
valeur.

Exercice 2: Tri Fusion des listes simplement chainées (6 points)


1. Écrire une fonction qui, étant données deux listes triées, fusionne les deux listes pour ne
faire qu’une seule liste triées. Quelle est la complexité de cette fonction ?
2. On peut utiliser la fonction précédente pour obtenir un algorithme de tri :
 Couper la liste en deux sous listes ;
 Par un appel récursif, trier les deux sous listes ;
 Fusionner les deux listes pour avoir une liste triée.
Écrire une fonction qui implante cet algorithme de tri.
3. Calculer la complexité de l'algorithme précédent.

Exercice 3 : Arbres binaires de recherche ABR: suppression (8 points)


1. Donner l'algorithme d'affichage par niveau des valeurs d'un arbre binaire.
2. Écrire une fonction qui étant donné un ABR non vide supprime et retourne la plus petite
valeur de cet ABR.
3. Écrire une fonction qui étant donné un ABR a supprime la racine de cet ABR. Si a et les deux
sous arbres gauche et droit sont tous non vide, on remplacera la racine par le plus grand nœud
du sous arbre gauche de a. Pourquoi ce choix est-il correct ?
4. Écrire une fonction qui étant donné un élément e et un arbre a, supprime e de a s’il est dans a
et sinon laisse a inchangé.

Bon courage…

Vous aimerez peut-être aussi