Vous êtes sur la page 1sur 4

Programmation en C

ENSIT
Série N°7 (TD/TP)

Les Listes Chainées A.U 2019/2020

Exercice:

On veut gérer une liste chaînée simple d’étudiants. Chaque étudiant est caractérisé par son
matricule, son nom, son groupe et sa moyenne annuelle.
1) Définir les types Etudiant, Cellule, Liste.
2) Écrire une fonction Remplir qui remplit et retourne un étudiant.
3) Écrire une fonction Créer_Cellule qui prend comme paramètres un étudiant E et
retourne un pointeur sur la cellule créée.
4) Écrire une fonction Insèrer_Tête qui insère un étudiant donné en tête de liste.
5) Écrire une fonction Affiche_Liste qui affiche tous les étudiants de la liste.
6) Écrire une fonction Recherche_Etudiant qui recherche si un étudiant, dont on donne
le nom_prenom, existe dans la liste ou non. S’il est trouvé la fonction retourne
l’adresse de la cellule contenant l’étudiant recherché, sinon la fonction retourne
NULL.
7) Écrire une fonction Modif_Moyenne qui modifie la moyenne d’un étudiant dont on
donne le nom_prenom et la nouvelle moyenne annuelle.
8) Écrire une fonction Supprime_ Etudiant qui supprime de la liste un étudiant dont on
donne le nom_prenom.
9) Écrire un programme principal qui utilise les fonctions et les procédures précédentes

1
Programmation en C
ENSIT
Série N°7 (TD/TP)

Les Listes Chainées A.U 2019/2020

Correction:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef struct Etudiant


{
char nom[20];
char groupe[10];
int mat;
float moyenne;
}etudiant;

typedef struct Cellule


{
etudiant elem;
struct Cellule *next;
}cellule;

typedef cellule *liste;

etudiant Remplir ()
{
etudiant E;
printf("\n\nDonner le matricule de l'etudiant : " );
scanf("%d",&E.mat);
printf("Donner le nom de l'etudiant : " );
gets(E.nom);
printf("Donner le groupe de l'etudiant : " );
gets(E.groupe);
printf("Donner la moyenne de l'etudiant : ");
scanf("%f",&E.moyenne);
return E;
}

liste Creer_Cellule(etudiant E)
{
liste p;

p=(liste) malloc(sizeof(cellule));
if(p)
{
p->elem=E;
p->next=NULL;
}
else
{
printf("Espace memoire indisponible\n");
}

2
return p;
}

void Inserer_Tete(liste *tete,etudiant E)


{
liste p;
p=Creer_Cellule(E);
if(p)
{
if(*tete==NULL)
*tete=p;
else
{
p->next=*tete;
*tete=p;
}
}
}

void Affiche_Liste(liste tete)


{
liste p;
p=tete;

while ( p != NULL) {
printf("\n\nla matricule de l'etudiant est: %d\n",p->elem.mat);
printf("le nom de l'etudiant est : %s\n",p->elem.nom);
printf("le groupe de l'etudiant est : %s\n",p->elem.groupe);
printf("la moyenne de l'etudiant est : %.2f\n",p->elem.moyenne);

p = p->next;
}
}

int main()
{
liste tete=NULL;
int n,i;
float moy;
char nom[20];
etudiant E;

do
{
printf("Donner le nombre d'etudiants a inserer en tete de liste : ");
scanf("%d",&n);
}while(n<1||n>100);

for(i=0;i<n;i++)
{
E=Remplir();
Inserer_Tete(&tete, E);
}

Affiche_Liste(tete);

return 0;

3
}