Vous êtes sur la page 1sur 2

Exercices sur les listes chaines

Exercice 1: extraction des informations


Le but de cet exercice est de complter la fonction read_file_content. Cette fonction va initialiser un
tableau avec des informations concernant une liste dtudiants. Ces informations sont initialement
renseignes dans un fichier. La fonction read_file_content parcourt ce fichier et stocke les
informations concernant les tudiants dans dans un tableau Student_t students_array[160] dont chaque
entre est du type :
typedef struct student {
char lastname[30];
char firstname[20];
int group;
} Student_t;
Le tableau dtudiants a t dclar dans le code source qui vous est fourni:
Student_t students_array [160];
Compltez la fonction read_file_content:
Signature (ou prototype)
void read_file_content(Student_t * array, FILE * file);
Paramtres
array: tableau dans lequel les informations des tudiants doivent tre enregistrs.
file: fichier (dj ouvert) contenant les informations sur les tudiants.
Indications
a. La fonction met jour la valeur de la variable globale number_of_students, qui comptabilise le
nombre dtudiants rfrencs dans le fichier.
b. Pour lire le fichier, on utilise encore la fonction fscanf, dans une boucle while :
ret_lec = fscanf(fichier, "%s %s %d", array[i].nom,
array[i].prenom, &array[i].info);
Cette fonction renvoie EOF quand elle atteint la fin du fichier.
Aprs lecture du fichier, on visualisera lcran (depuis la fonction main) le contenu du tableau
students_array.
Exercice 2: Cration dune liste chaine
On va crer une liste chaine partir des informations contenues dans le tableau
students_array. Chaque lment de la liste a le type suivant :
typedef struct link{
Student_t student;
struct link * next;
} Link_t;
Voici la liste des fonctions complter :
new_link qui cre un nouvel lment de la chaine partir dune entre du tableau (utilisation
de malloc),
chain qui insre un maillon au dbut de la liste,
Voici leurs signatures :
Link_t * new_link(Student_t a_student);
Link_t * chain(Maillon_t * beginning, Link_t * new_link);
Ces fonctions sont complter dans le fichier main.c.
Visualiser le contenu de la liste en compltant la fonction display_linked_list qui affiche la liste
lcran (utilisation de printf):
void display_linked_list(Maillon_t * debut);
Exercice 3: Recherche dun maillon
Dans cet exercice, vous allez coder la fonction search, qui vrifie si un nom se trouve dans la liste et
renvoie ladresse de llment correspondant, ou NULL si aucun ne correspond.
Signature
Link_t * search (Link_t * beginning, char * name_to_search);
Paramtres
beginning: le dbut de la liste chaine
name_to_search: le nom pour lequel on cherche un maillon qui correspond

Valeur de retour
Le premier maillon correspondant au nom recherch, ou NULL si le nom recherch napparait pas
dans la liste.
Indication
Utilisez strcmp() pour comparer des chaines de caractres; Utilisez la commande man, ou internet,
pour avoir de la documentation sur cette fonction.
Exercice 4: Insertion dans la liste
Dans cet exercice, vous allez coder la fonction insert, qui insre un maillon dans la liste suppose trie
et renvoie le dbut de la liste. La liste chaine rsultant doit prserver le tri.
Signature
Link_t * insert (Link_t * beginning, Link_t * new_link);
Paramtre
befinning: le dbut de la liste avant insertion. La liste est suppose trie.
new_link: le maillon insrer.
Valeur de retour
Le dbut de la liste aprs insertion.
Indication
Continuez utiliser la fonction strcmp().
Exercice 5: trier la liste
Dans cet exercice, vous allez coder la fonction sort qui trie la liste en la copiant dans une nouvelle
liste.
Signature
Link_t * sort (Link_t * beginning);
Paramtre
beginning: dbut de la liste trier
Valeur de retour
Nouvelle liste rsultant du tri.
Indication
Le tri se fera sur le nom et de la faon suivante :
Prendre un un les maillons de la liste chainee de debut debut pour construire
une nouvelle liste chanee triee en utilisant insert.
Renvoyer le debut de la nouvelle liste trie.
Continuez utiliser la fonction strcmp().
Exercice 6: restitution de la mmoire
Dans ce dernier exercice, vous allez coder la fonction free_list, qui rend la memoire occupe par une
liste chainee.
Signature
void free_list (Link_t * first);
Paramtre
first: dbut de la zone mmoire restituer
Cette fonction ne renvoie rien.