L2-GLIN301- Algorithmique et Structures de Données – Examen Session 1 – Janvier 2013 1
Durée : 2 heures ; tous les documents sont autorisés.
1 Listes chaînées
Question 1. (1,5 points) Donnez un algorithme longueurListe qui calcule la longueur d’une liste chaînée. Vous
donnerez bien sûr les nom, type et mode de passage du(des) paramètre(s), ainsi que la complexité de l’algorithme
(exprimée en fonction du nombre nd’éléments de la liste).
Question 2. (3 points) Scinder une liste en 2 consiste à en extraire 2 sous-listes consécutives de même longueur
(à 1 près selon la parité du nombre d’éléments de la liste). .
Algorithme 1 : scinder(dr L1 : Liste, rL2 : Liste)
Données :L1est une liste simplement chaînée d’entiers contenant au moins 2 éléments.
Résultat :L1est la première moitié de la liste en donnée ; L2est la seconde moitié de cette liste ;
Si la longueur de la liste donnée est paire, les listes résultats L1et L2sont de même longueur, sinon L1a un
élément de moins que L2
L’opération scinder ne doit créer aucune nouvelle cellule, elle opère en modifiant les champs succ des
cellules existantes. Elle peut utiliser l’algorithme longueurListe. La figure ci–dessous illustre l’opération scinder.
Quelle est la complexité de votre algorithme ?
Question 3. (4 points) On dispose de deux listes d’entiers simplement chaînées triées L1et L2. Il s’agit de
fusionner ces 2 listes pour obtenir une liste simplement chaînée triée contenant les éléments de L1et les éléments
de L2. Écrivez un algorithme pour cette opération illustrée par la figure ci-dessous :
Algorithme 2 : fusionner(dL1: Liste ; dL2: Liste) : Liste
Données :L1et L2sont 2 listes triées par ordre croissant
Résultat : Renvoie une liste triée par ordre croissant contenant les éléments de L1et les éléments de L2
Là encore on souhaite un algorithme qui modifie les champs successeurs des 2 listes sans recopier aucun
élément. Vous ne devez donc pas utiliser d’opération d’insertion, quelle qu’elle soit, ni l’opération créerListe. En
revanche, les chaînages des listes L1 et L2 peuvent (doivent) être modifiés.
Soient n1et n2les tailles respectives des listes L1et L2. Quel est le nombre maximum de comparaisons entre
éléments réalisées par votre algorithme ?
Question 4. (1,5 points) Utilisez les algorithmes longueurListe,scinder et fusionner pour réaliser le tri par
fusion d’une liste simplement chaînée :
Algorithme 3 : TriFusion(dr L: liste d’entier )
Données :Lune liste d’entier
Résultat :Lcontient les mêmes éléments qu’en entrée et est triée par ordre croissant.
Quel est l’ordre de grandeur du nombre de comparaisons exécutées par votre algorithme dans le pire des cas ?