Vous êtes sur la page 1sur 16

Les listes simplement chaı̂nés

Structures de données en C

Laila AMIR

Tronc commun MIP & MIPC

Année universitaire 2018/2019

Laila AMIR
Les listes simplement chaı̂nés

Plan

1 Les listes simplement chaı̂nés


Qu’est ce qu’une liste chaı̂née
Déclarer une liste simplement chaı̂née
Insertion en tête de liste
Construction d’une liste simplement chaı̂née
Parcours de liste
Insertion en queue d’une liste
libération de mémoire

Laila AMIR
Qu’est ce qu’une liste chaı̂née
Déclarer une liste simplement chaı̂née
Insertion en tête de liste
Les listes simplement chaı̂nés Construction d’une liste simplement chaı̂née
Parcours de liste
Insertion en queue d’une liste
libération de mémoire

Outline

1 Les listes simplement chaı̂nés


Qu’est ce qu’une liste chaı̂née
Déclarer une liste simplement chaı̂née
Insertion en tête de liste
Construction d’une liste simplement chaı̂née
Parcours de liste
Insertion en queue d’une liste
libération de mémoire

Laila AMIR
Qu’est ce qu’une liste chaı̂née
Déclarer une liste simplement chaı̂née
Insertion en tête de liste
Les listes simplement chaı̂nés Construction d’une liste simplement chaı̂née
Parcours de liste
Insertion en queue d’une liste
libération de mémoire

Définition

Une liste chaı̂née est un ensemble de cellules liées entre elles par des
pointeurs. Chaque cellule est une structure contenant les champs suivants
:
une ou plusieurs donnée (s)
un pointeur suivant sur la cellule suivante.

Il existe plusieurs types de listes chaı̂nées dépendant de la manière dont on


se déplace dans la liste :
les listes simplement chaı̂nées,
les listes doublement chaı̂nées,
les listes circulaires.

Laila AMIR
Qu’est ce qu’une liste chaı̂née
Déclarer une liste simplement chaı̂née
Insertion en tête de liste
Les listes simplement chaı̂nés Construction d’une liste simplement chaı̂née
Parcours de liste
Insertion en queue d’une liste
libération de mémoire

Repésentation d’une liste chaı̂née simple

Une liste chaı̂née simple de cinq cellules est représentée graphiquement


comme suit :

d1, d2,..,d5 représentent les données des cellules qui sont les liées par des
pointeurs suivant et le dernier pointeur suivant vaut NULL, ce qui indique
la fin de la liste.

Laila AMIR
Qu’est ce qu’une liste chaı̂née
Déclarer une liste simplement chaı̂née
Insertion en tête de liste
Les listes simplement chaı̂nés Construction d’une liste simplement chaı̂née
Parcours de liste
Insertion en queue d’une liste
libération de mémoire

Déclarer une liste chaı̂née


Pour créer une liste chaı̂née, il faut d’abord déclarer une structure qui
représentera une cellule.;
Exemple : déclaration d’une liste dont les données sont des float.
typedef struct Cell
{
float donnee; //définition des données
struct Cell *suivant; //pointeur sur la structure suivante
//(de même type que celle qu’on est entrain de définir)
}TypeCellule;

On déclare ensuite la liste List avec un pointeur de type TypeCellule.


TypeCellule *List;
Laila AMIR
Qu’est ce qu’une liste chaı̂née
Déclarer une liste simplement chaı̂née
Insertion en tête de liste
Les listes simplement chaı̂nés Construction d’une liste simplement chaı̂née
Parcours de liste
Insertion en queue d’une liste
libération de mémoire

Déclarer une liste chaı̂née


Pour créer une liste chaı̂née, il faut d’abord déclarer une structure qui
représentera une cellule.;
Exemple : déclaration d’une liste dont les données sont des float.
typedef struct Cell
{
float donnee; //définition des données
struct Cell *suivant; //pointeur sur la structure suivante
//(de même type que celle qu’on est entrain de définir)
}TypeCellule;

On déclare ensuite la liste List avec un pointeur de type TypeCellule.


TypeCellule *List;
Laila AMIR
Qu’est ce qu’une liste chaı̂née
Déclarer une liste simplement chaı̂née
Insertion en tête de liste
Les listes simplement chaı̂nés Construction d’une liste simplement chaı̂née
Parcours de liste
Insertion en queue d’une liste
libération de mémoire

Insertion en tête de liste


Exemple : On suppose que l’on veut rajouter l’élément 6 au début de la
liste suivante : teteListe

a) on commence par créer une nouvelle cellule p et lui donner la valeur 6


et un pointeur suivant de type cellule

Laila AMIR
Qu’est ce qu’une liste chaı̂née
Déclarer une liste simplement chaı̂née
Insertion en tête de liste
Les listes simplement chaı̂nés Construction d’une liste simplement chaı̂née
Parcours de liste
Insertion en queue d’une liste
libération de mémoire

Insertion en tête de liste


b) on pointe le suivant de p sur l’ancienne tête de la liste

c) La celleule p devient tête de liste

Laila AMIR
Qu’est ce qu’une liste chaı̂née
Déclarer une liste simplement chaı̂née
Insertion en tête de liste
Les listes simplement chaı̂nés Construction d’une liste simplement chaı̂née
Parcours de liste
Insertion en queue d’une liste
libération de mémoire

Insertion en tête de liste


La fonction suivante prend en paramètre une liste et une donnée, et ajoute
la donnée en tête de la liste. La fonction renvoie la nouvelle adresse de la
tête de liste.
TypeCellule* InsereEnTete(TypeCellule *ancienL, float d1)
{
TypeCellule *nouvL; //nouvelle tête de liste
//création d’une nouvelle cellule
nouvL =(TypeCellule *)malloc(sizeof(TypeCellule));
nouvL->donnee = d1; //ajout de d1 dans la cellule
nouvL->suivant = ancienL; //chaı̂nage
return nouvL; //on retourne la nouvelle tête de liste
}

Laila AMIR
Qu’est ce qu’une liste chaı̂née
Déclarer une liste simplement chaı̂née
Insertion en tête de liste
Les listes simplement chaı̂nés Construction d’une liste simplement chaı̂née
Parcours de liste
Insertion en queue d’une liste
libération de mémoire

Construction d’une liste chaı̂née

Exercice de TP : écrire une fonction construireListe qui permet de


construire une liste chaı̂née à partir des insertions successives des cellules
en tête.
La fonction renvoie la nouvelle adresse de la tête de liste.

Indications :
Utiliser la structure TypeCellule et la fonction InsereEnTete
Prototype : TypeCellule* construireListe()
N’oubliez pas l’initialisation -> liste vide (= NULL).

Laila AMIR
Qu’est ce qu’une liste chaı̂née
Déclarer une liste simplement chaı̂née
Insertion en tête de liste
Les listes simplement chaı̂nés Construction d’une liste simplement chaı̂née
Parcours de liste
Insertion en queue d’une liste
libération de mémoire

Parcours de liste

L’idée de parcours d’une liste chaı̂née est de :

prendre un pointeur auxiliaire p;


on fait pointer p sur la première cellule de la liste, puis le pointeur p
passe à la cellule suivante (par une affectation p= p-> suivant ), etc;
le parcours s’arrête lorsque p vaut NULL.

Laila AMIR
Qu’est ce qu’une liste chaı̂née
Déclarer une liste simplement chaı̂née
Insertion en tête de liste
Les listes simplement chaı̂nés Construction d’une liste simplement chaı̂née
Parcours de liste
Insertion en queue d’une liste
libération de mémoire

Parcours de liste (suite)

Exemple : affichage d’une liste chaı̂née.

void Affichage(TypeCellule* L)
{
TypeCellule* p;
p= L;
while ( p != NULL)
{
printf(”%f”, p->donnee);
p= p-> suivant;
}
}

Laila AMIR
Qu’est ce qu’une liste chaı̂née
Déclarer une liste simplement chaı̂née
Insertion en tête de liste
Les listes simplement chaı̂nés Construction d’une liste simplement chaı̂née
Parcours de liste
Insertion en queue d’une liste
libération de mémoire

Insertion en queue d’une liste

L’ajout d’une cellule en queue de la liste est plus compliqué que l’insertion
en tête de la liste. Elle nécessite un parcours de la liste pour rechercher
l’adresse du dernier élément.

Laila AMIR
Qu’est ce qu’une liste chaı̂née
Déclarer une liste simplement chaı̂née
Insertion en tête de liste
Les listes simplement chaı̂nés Construction d’une liste simplement chaı̂née
Parcours de liste
Insertion en queue d’une liste
libération de mémoire

Insertion en queue d’une liste


TypeCellule* InsereEnQueue(TypeCellule *ancienL, float d1)
{
TypeCellule *nouvL, *p;
//création d’une nouvelle cellule
nouvL =(TypeCellule *)malloc(sizeof(TypeCellule));
nouvL->donnee = d1; //ajout de d1 dans la cellule
nouvL->suivant = NULL; //la nouvelle dernière cellule
if (ancienL == NULL) ancienL = nouvL; //si la liste est vide
else { //recherche de la dernière cellule
for (p = ancienL; p->suivant != NULL; p = p->suivant)
{}
p->suivant = nouvL;
}
return ancienL;
}
Laila AMIR
Qu’est ce qu’une liste chaı̂née
Déclarer une liste simplement chaı̂née
Insertion en tête de liste
Les listes simplement chaı̂nés Construction d’une liste simplement chaı̂née
Parcours de liste
Insertion en queue d’une liste
libération de mémoire

libération de mémoire
Pour libérer la mémoire d’une liste chaı̂née, il faut détruire chacune des
cellules avec la fonction free.
void liberation(TypeCellule* List)
{
TypeCellule* p;
while (List !=NULL)
{
p=List;
List = List->suivant; //cellule suivante
free(p); //destruction de la cellule
}
List = NULL; //on réinitialise la liste à vide
}

Laila AMIR

Vous aimerez peut-être aussi