Cliquer ici pour imprimer

Dernière modification : 18/10/2022 à 17:55

TP3 - Listes
TP3 - Listes

Listes de Elmt_t

Vous allez écrire une librairie de gestion de liste chaînée comme vu en cours (mais pas tout à fait).
Pour cela commencez par créer six fichiers :

elmt_t.h / elmt_c

Dans elmt_t.h

Dans elmt_t.c, définissez les fonctions de elmt_t.h

list.h / list.c

Pour l’instant les listes ne sont pas supposées triées.

Dans le fichier List.h :

Vous allez maintenant ajouter déclarer dans List.h et définir dans List.c les fonctions suivantes (fonctions de bases vues en cours).
Pour l’instant on ne touche pas à test.c, par contre après avoir écrit chaque fonction, on vérifie que le code compile avant de passer à la fonction suivante.

A ce stade, vous devez écrire une fonction main() dans test.c et tester vos fonctions.
Lorsque tout est OK, ajoutez les fonctions suivantes (vous testerez au fur et à mesure) :

double_list.h / double_list.c

Dans un nouveau répertoire, recopiez vos fichier en changeant le nom de list.h en double_list.h et list.c en double_list.c.

Adaptez bien tous les includes dans les .c

Modifiez ensuite la définition du type Cell pour que la structure contienne :

Le dernier maillon a un champ next qui vaut NULL et le premier maillon un champ prev qui vaut NULL.

La liste est dite doublement chaînée. Adaptez toutes les fonctions (sauf mirror qui n’a plus d’intérêt).

double_circle_list.h / double_circle_list.c

Même procédé, on créé par copier/coller dans un nouveau répertoire une troisième librairie.
Cette fois la liste est circulaire : le dernier maillon a un champ next qui pointe sur le premier maillon et le premier maillon un champ prev qui pointe sur le dernier maillon.

Une fois toutes les fonctions modifiées et testées, adaptez la fonction search_k pour qu’elle parcourt la liste dans le sens minimisant les opérations.

Enfin, ajoutez les fonctions :

procédure shuffle(Liste L)
  pour chaque élément e de L
    # tirer un nombre aléatoire entre 0 et taille(L)
        r ← random(0,taille(L))
        # échanger l'élément avec celui en position r
        swap(e, search_k(L,r))
procédure shuffle(Liste L)
  pour chaque élément e de L
    # tirer un nombre aléatoire entre 0 et taille(L)
        r ← random(0,taille(L))
        # échanger l'élément avec celui en position r
        swap(e, search_k(L,r))