Vous êtes sur la page 1sur 3

TP3 NF16 – Listes Chaînées

Printemps 2008

Introduction
Une liste chaînée est une succession de structures de données allouées dynamiquement, où chaque
élément contient une référence sur le prochain élément de la liste. Les éléments d’une liste chaînée sont
appelés Noeuds ou cellules.
Dans ce TP nous allons utiliser une liste circulaire avec sentinelle. Le premier élément de la liste, la
sentinelle, est toujours présent et n’est pas utilisé pour le stockage de données. Cette version a pour
avantage de simplifier plusieurs opérations car la tête de la liste ne sera jamais modifiée. Cette liste est
appelée aussi liste circulaire, car le dernier élément pointe vers le premier (ici la sentinelle).

L’objectif de ce TP est de se familiariser avec les opérations les plus courantes des listes chaînées :
création d’une liste, insertion de noeuds, suppression de noeuds, recherche de données.

Le problème à traiter
Nous allons implémenter un système de gestion des notes des étudiants. A chaque individu est associé
un noeud contenant les informations suivantes :
Nom : Les nom et prénom de l'étudiant
ID : Un indice unique
Note : Sa note

Partie I

a) Déclarer une structure Element pour un élément d’une liste chaînée. Définir les champs pour stocker
les informations mentionnées ci-dessus.

b) Rédiger les fonctions pour la manipulation des listes chaînées :


b.1. NouveauNoeud(): Alloue la mémoire pour un noeud de type Element. Retourne son
adresse.
b.2. NouvelleListe() : Alloue la mémoire pour une liste vide. Retourne l'adresse de la
sentinelle.
b.3. InsertionNoeud() : Insère un noeud dans la bonne position – Les données doivent être
triées par le nom dans l'ordre lexicographique croissant.
b.4. AfficheListe() : Affiche les données contenues dans chaque élément d’une liste. L’
affichage commence par la tête. Format d’ affichage :
0 - BERNE Rodolphe, ID : 101, Note : 8
1 - GAILLOT Marc, ID : 102, Note : 16
2 - LIOCOURT Victorien, ID : 103, Note : 13
b.5. SupprimeListe() : Efface tous les éléments d’ une liste (la mémoire utilisée par les
éléments supprimés doit être libérée). La liste devient vide.
b.6. RechercheNote() : Retourne la sous-liste des noeuds dont les notes sont comprises entre
note_min et note_max(passés en 2 arguments à la fonction).
b.7. Statistique() : Affiche la note moyenne, la note la plus basse et la plus haute et le taux de
réussite (les notes >= à 10).
b.8. TrieNote() : Trie une liste selon l'ordre décroissant des notes.
b.9. SupprimeElement() : Supprime un élément d'une liste selon son ID.
b.10. LireFichier() : Ouvre un fichier dont le nom est spécifié et insère les données lues dans
une liste donnée.
b.11. EnregistreFichier() : Enregistre les données d'une liste dans un fichier.

La base de données est un fichier de type texte où les enregistrements ne sont pas triés. Les
données de chaque enregistrement sont en 3 lignes consécutives. La première ligne est le
nom. La deuxième ligne est le ID. Et la troisième ligne est la note. Exemple :
---------------------------------------------
BERNE Rodolphe
101
8
GAILLOT Marc
102
16
LIOCOURT Victorien
103
13

IMPORTANT: L’une des fonctions strcmp(), strncmp(), strcasecmp() ou strncasecmp() peut être utilisée pour
comparer deux chaînes de caractères. La donnée nom est en réalité composée d’un nom suivi d’un
prénom. Pour lire des espaces avec scanf(), utiliser la chaîne de format "%[^\n]s". Une autre alternative est
d'utiliser la fonction gets().

Partie 2

Construire une interface pour tester les fonctions ci-dessus. Les options qui doivent être présentes sont :
1 – Afficher Liste
2 – Insertion d'un élément à partir du clavier
3 – Lecture des données à partir d'un fichier
4 – Supprimer un élément
5 – Supprimer une liste
6 – Recherche par intervalle de note
7 – Afficher les statistiques
8 – Trier par notes décroissantes
9 – Enregistrer dans un fichier
0 – Sortie

Notes

Le programme doit être composé d'au moins 3 fichiers :


tp3.h
● Contient les constantes globales, les types définis et les prototypes de toutes les fonctions.
Inclure un commentaire pour chaque fonction déclarée en expliquant à quoi elle sert, quels
paramètres elle prend et quelle(s) valeur(s) elle retourne.
tp3.c
● Contient le corps des fonctions déclarées dans tp3.h. Il doit inclure l’ instruction #include "tp3.h".
tp3_main.c
● Contient uniquement la fonction main(). L’ instruction #include "tp3.h" doit aussi y être présente.
Prototypes de quelques fonctions utiles:
/* Ouverture de fichier */
FILE *fopen(const char *nomdufichier, const char *mode);
/* Lecture de données formatées à partir d’un fichier texte */
int fscanf(FILE *pointeurfichier, const char *format, ...)

/* Lectured’une chaîne de caractères à partir d’un fichier texte, terminée par \n


(newline), le résultat est affecté au tableau pointé par BCD . E est le nombre maximal de
caractères lus */
char *fgets(char *str, int n, FILE *pointeurfichier)

Vous aimerez peut-être aussi