You are on page 1of 12

Leçon 5 : Listes simplement chaînées

Rodrigue DJEUMEN

Rodrigue DJEUMEN Leçon 5 : Listes simplement chaînées 1 / 12


Sommaire

Sommaire

1 Sommaire

2 Structure de données

3 Opérations sur les listes simplement chaînées


Parcours d'une liste simplement chaînée
Création d'une liste

Création par addition en tête


Création par addition en queue
Suppression d'un élément

Suppression en tête
Suppression en queue

4 Exercices

5 Travaux Pratiques
Contexte
Travail à faire

Rodrigue DJEUMEN Leçon 5 : Listes simplement chaînées 2 / 12


Structure de données

Structure de donnée liste

Une liste est une suite d'un nombre variable d'objets de même type, appelés
éléments de la liste.
On dira donc qu'une liste simplement chaînée est une liste dans laquelle chaque
élément, sauf le dernier, pointe vers son successeur.
Pour dénir une liste simplement chaînée, il faut :
Décrire le type de ses éléments, qui est généralement un enregistrement constitué
de deux parties, une partie information et un pointeur qui référence l'élément
suivant,
Dénir un pointeur de tête qui permette d'accéder au premier élément de la liste.
Exemple : Dénir une liste simplement chaînée de nombres entiers.
typedef struct listEntier{
int info;
struct listEntier suivant;
}*ListEntier;
ListEntier tete;

Rodrigue DJEUMEN Leçon 5 : Listes simplement chaînées 3 / 12


Opérations sur les listes simplement chaînées Parcours d'une liste simplement chaînée

Parcours d'une liste

void parcours(ListeEntier liste){


ListeEntier ptr;
ptr = liste; //Sauvegarde de la tête de liste
while (ptr != NULL) do{
printf(ptr->info); //Traitement à effectuer
ptr = ptr->suivant;
}
}

Rodrigue DJEUMEN Leçon 5 : Listes simplement chaînées 4 / 12


Opérations sur les listes simplement chaînées Création d'une liste

Création en tête

Pour la création en tête, deux cas sont à considérer :

La liste est vide, dans ce cas, la création en tête revient simplement à

ajouter un nouvel élément.

La liste contient au moins un élément, dans ce cas, il faudrait insérer

le nouvel élément en tête.

ListeEntier creerTete(int t[],int n,ListeEntier ptr){


ListeEntier p;
int i;
ptr = NULL;
for(i=0;i<n;i++){
p = malloc(sizeof(ListeEntier));
p->info = t[i];
p->suivant = ptr;
ptr = p;
} return ptr;
}

Rodrigue DJEUMEN Leçon 5 : Listes simplement chaînées 5 / 12


Opérations sur les listes simplement chaînées Création d'une liste

Création en queue

Pour la création en queue, deux cas sont à considérer :


La liste est vide, dans ce cas, la création en queue revient simplement à
ajouter un nouvel élément.
La liste contient un ou plusieurs éléments, dans ce cas, il faudrait procéder
au parcours de la liste jusqu'à la n avant de rajouter l'élément.
ListeEntier insererQueue(int val,ListeEntier ptr){
ListeEntier p0;
if (ptr == NULL){
ptr = malloc(sizeof(ListeEntier));
ptr->info = val;
ptr->suivant = NULL; return ptr; }
else{
p0 = ptr;
while (p0->suivant != NULL)
p0 = p0->suivant;
p0->suivant = malloc(sizeof(ListeEntier));
p0->suivant->info = val;
p0->suivant->suivant = NULL;
return ptr;
}
}
Rodrigue DJEUMEN Leçon 5 : Listes simplement chaînées 6 / 12
Opérations sur les listes simplement chaînées Suppression d'un élément

Suppression en tête

void supprimerTete(ListeEntier ptr){


ListeEntier p;
p = ptr;
ptr = ptr->suivant;
free(p);
}

Rodrigue DJEUMEN Leçon 5 : Listes simplement chaînées 7 / 12


Opérations sur les listes simplement chaînées Suppression d'un élément

Suppression en queue

void supprimerQueue(ListeEntier ptr){


ListeEntier prec,cour;
if (ptr->suivant == NULL){
free(ptr);
ptr = NULL;
}
else{
prec = ptr;
cour = ptr;
while (cour->suivant != NULL) do{
cour = prec->suivant;
if (cour->suivant != NULL)
prec = cour;
}
prec->suivant = NULL;
free(cour);
}
}

Rodrigue DJEUMEN Leçon 5 : Listes simplement chaînées 8 / 12


Exercices

Exercices

Exercice 1 : Écrire une fonction permettant d'insérer un élément dans une liste,
à une position k ∈ N quelconque.
Exercice 2 : Écrire une fonction permettant de rechercher un élément dans une
liste.
Exercice 3 : Écrire une fonction permettant de supprimer un élément dans une
liste, à une position k ∈ N quelconque.
Exercice 4 : Une liste bilatère est une liste qui peut se parcourir dans les deux
sens. Dans de telles listes, chaque élément e comporte deux pointeurs AVANT et
APRES.
1 Proposer une structure de donnée décrivant la liste bilatère.
2 Écrire une fonction permettant de créer une liste bilatère à partir des
éléments d'un tableau.
3 Écrire une fonction permettant de rechercher un élément dans une liste
bilatère.
4 Écrire une fonction permettant d'insérer un élément dans une liste bilatère, à
la position k ∈ N quelconque.
Rodrigue DJEUMEN Leçon 5 : Listes simplement chaînées 9 / 12
Exercices

Exercice 5 : Une liste circulaire est une liste dans laquelle, le dernier

élément est relié au premier ; on obtient ainsi un anneau.

1 Proposer une structure de donnée décrivant la liste circulaire.

2 Écrire une fonction permettant de créer une liste circulaire à partir des

éléments d'un tableau.

3 Écrire une fonction permettant de rechercher un élément dans une

liste circulaire.

4 Écrire une fonction permettant d'insérer un élément dans une liste

circulaire, à la position k ∈N quelconque.

Rodrigue DJEUMEN Leçon 5 : Listes simplement chaînées 10 / 12


Exercices Contexte

Travaux Pratiques

La structure ELECAM vous contacte, an que vous lui réalisiez un logiciel,
pouvant l'aider dans la gestion des élections au Cameroun. Plus précisément, ce
logiciel doit pouvoir représenter l'organisation administrative du Cameroun avec le
nombre d'électeurs, suivant le schéma ci-après :

Dans cette représentation, le Cameroun est subdivisé en régions, lesquelles régions


sont à leurs tours subdivisées en département ; on connaît le nombre total
d'électeurs dans chaque département.

Rodrigue DJEUMEN Leçon 5 : Listes simplement chaînées 11 / 12


Exercices Travail à faire

Travail à faire

1 Dénir le type Departement ;


2 Dénir le type Region ;
3 Dénir le type Cameroun ;
4 Écrire une fonction lesDepartements(Region reg ), qui ache la liste des départements
d'une région ;
5 Écrire la fonction int nbreElecteurReg (Region reg ), qui calcule et retourne le nombre total
d'électeurs d'une région ;
6 Écrire la fonction int nbreElecteurCmr (Cameroun cmr ), qui utilise la fonction de la
question 5 pour calculer et retourner le nombre total d'électeurs au Cameroun ;
7 Écrire la fonction void addDepartement(R égion reg , Departement dep), permettant
d'ajouter un département dans une région ;
8 Écrire la fonction char ∗ dept 2Str (Departement dep) , qui transforme les informations
d'un département en une chaîne de caractère (sérialisation) ;
9 On souhaite sauvegarder les données d'une région dans un chier ; écrire une fonction
void saveData(Region reg ) , qui déclare un chier texte, le crée en lui donnant le nom de
la région et y enregistre toutes les données des départements de cette région. On suppose
que dans le chier chaque ligne correspond à un département ;

Rodrigue DJEUMEN Leçon 5 : Listes simplement chaînées 12 / 12

You might also like