Vous êtes sur la page 1sur 208

Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les

listes doub

Matière : Algorithmique et structures de données


Semestre : 02

Les listes chaînées

Tayeb BAHRAM

Université Dr. Tahar Moulay de Saïda


Faculté des sciences, Département de mathématiques
tayeb.bahram@univ-saida.dz
https://sites.google.com/view/algosd/accueil

03 Mai 2020

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

Plan

1 Introduction

2 Les pointeurs

3 Gestion dynamique de la mémoire

4 Les listes chaînées

5 Opérations sur les listes chaînées

6 Les listes doublement chaînées

7 Les listes particulières

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

1. Introduction

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

1. Introduction
Pour savoir la raison d’utiliser les listes, il faut retourner vers les tableaux ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

1. Introduction
Pour savoir la raison d’utiliser les listes, il faut retourner vers les tableaux ;
un tableau est une structure linéaire pour lequel les éléments de même type le
composant sont placés de façon contigüe en mémoire (cases mémoire) ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

1. Introduction
Pour savoir la raison d’utiliser les listes, il faut retourner vers les tableaux ;
un tableau est une structure linéaire pour lequel les éléments de même type le
composant sont placés de façon contigüe en mémoire (cases mémoire) ;
comme toutes les cases portent le même nom, elles se différencient par un indice
ou un numéro.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

1. Introduction
Pour savoir la raison d’utiliser les listes, il faut retourner vers les tableaux ;
un tableau est une structure linéaire pour lequel les éléments de même type le
composant sont placés de façon contigüe en mémoire (cases mémoire) ;
comme toutes les cases portent le même nom, elles se différencient par un indice
ou un numéro.
pour créer un tableau simple à une dimension, il faut connaître sa taille qui ne
pourra être modifiée au cours du programme.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

1. Introduction
Pour savoir la raison d’utiliser les listes, il faut retourner vers les tableaux ;
un tableau est une structure linéaire pour lequel les éléments de même type le
composant sont placés de façon contigüe en mémoire (cases mémoire) ;
comme toutes les cases portent le même nom, elles se différencient par un indice
ou un numéro.
pour créer un tableau simple à une dimension, il faut connaître sa taille qui ne
pourra être modifiée au cours du programme. Donc, il faut préciser la taille du
tableau ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

1. Introduction
Pour savoir la raison d’utiliser les listes, il faut retourner vers les tableaux ;
un tableau est une structure linéaire pour lequel les éléments de même type le
composant sont placés de façon contigüe en mémoire (cases mémoire) ;
comme toutes les cases portent le même nom, elles se différencient par un indice
ou un numéro.
pour créer un tableau simple à une dimension, il faut connaître sa taille qui ne
pourra être modifiée au cours du programme. Donc, il faut préciser la taille du
tableau ; Exemple :

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

1. Introduction
Pour savoir la raison d’utiliser les listes, il faut retourner vers les tableaux ;
un tableau est une structure linéaire pour lequel les éléments de même type le
composant sont placés de façon contigüe en mémoire (cases mémoire) ;
comme toutes les cases portent le même nom, elles se différencient par un indice
ou un numéro.
pour créer un tableau simple à une dimension, il faut connaître sa taille qui ne
pourra être modifiée au cours du programme. Donc, il faut préciser la taille du
tableau ; Exemple :

La structure de type tableau pose des problèmes pour modifier sa taille à moins
qu’on déclare un autre tableau, de même, pour ajouter un élément ou de
l’insérer au milieu ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

1. Introduction
Pour savoir la raison d’utiliser les listes, il faut retourner vers les tableaux ;
un tableau est une structure linéaire pour lequel les éléments de même type le
composant sont placés de façon contigüe en mémoire (cases mémoire) ;
comme toutes les cases portent le même nom, elles se différencient par un indice
ou un numéro.
pour créer un tableau simple à une dimension, il faut connaître sa taille qui ne
pourra être modifiée au cours du programme. Donc, il faut préciser la taille du
tableau ; Exemple :

La structure de type tableau pose des problèmes pour modifier sa taille à moins
qu’on déclare un autre tableau, de même, pour ajouter un élément ou de
l’insérer au milieu ; Exemple :

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

1. Introduction
Pour savoir la raison d’utiliser les listes, il faut retourner vers les tableaux ;
un tableau est une structure linéaire pour lequel les éléments de même type le
composant sont placés de façon contigüe en mémoire (cases mémoire) ;
comme toutes les cases portent le même nom, elles se différencient par un indice
ou un numéro.
pour créer un tableau simple à une dimension, il faut connaître sa taille qui ne
pourra être modifiée au cours du programme. Donc, il faut préciser la taille du
tableau ; Exemple :

La structure de type tableau pose des problèmes pour modifier sa taille à moins
qu’on déclare un autre tableau, de même, pour ajouter un élément ou de
l’insérer au milieu ; Exemple :

de ce fait les tableaux montrent une limite majeure ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

1. Introduction
Pour savoir la raison d’utiliser les listes, il faut retourner vers les tableaux ;
un tableau est une structure linéaire pour lequel les éléments de même type le
composant sont placés de façon contigüe en mémoire (cases mémoire) ;
comme toutes les cases portent le même nom, elles se différencient par un indice
ou un numéro.
pour créer un tableau simple à une dimension, il faut connaître sa taille qui ne
pourra être modifiée au cours du programme. Donc, il faut préciser la taille du
tableau ; Exemple :

La structure de type tableau pose des problèmes pour modifier sa taille à moins
qu’on déclare un autre tableau, de même, pour ajouter un élément ou de
l’insérer au milieu ; Exemple :

de ce fait les tableaux montrent une limite majeure ;


Solution : Il existe une autre structure, appelée liste chaînée qui permet plus aisément
d’insérer et de supprimer des valeurs dans une liste linéaire d’éléments sans faire une
déclaration.
Tayeb BAHRAM Université Dr. Tahar Moulay de Saida
Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

2.1 Mémoire centrale et adresse

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

2.1 Mémoire centrale et adresse


La mémoire centrale d’un ordinateur
est composée d’un très grand
nombre d’octets ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

2.1 Mémoire centrale et adresse


La mémoire centrale d’un ordinateur
est composée d’un très grand
nombre d’octets ;
chaque octet est repéré par un
numéro appelé adresse de l’octet ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

2.1 Mémoire centrale et adresse


La mémoire centrale d’un ordinateur
est composée d’un très grand
nombre d’octets ;
chaque octet est repéré par un
numéro appelé adresse de l’octet ;
chaque variable dans la mémoire
occupe des octets contigus,
c’est-à-dire des octets qui se suivent.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

2.1 Mémoire centrale et adresse


La mémoire centrale d’un ordinateur
est composée d’un très grand
nombre d’octets ;
chaque octet est repéré par un
numéro appelé adresse de l’octet ;
chaque variable dans la mémoire
occupe des octets contigus,
c’est-à-dire des octets qui se suivent.
Exemple : En langage C, un float
occupe 4 octets qui se suivent ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

2.1 Mémoire centrale et adresse


La mémoire centrale d’un ordinateur
est composée d’un très grand
nombre d’octets ;
chaque octet est repéré par un
numéro appelé adresse de l’octet ;
chaque variable dans la mémoire
occupe des octets contigus,
c’est-à-dire des octets qui se suivent.
Exemple : En langage C, un float
occupe 4 octets qui se suivent ;
l’adresse de la variable est l’adresse
de son premier octet.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

2.1 Mémoire centrale et adresse


La mémoire centrale d’un ordinateur
est composée d’un très grand
nombre d’octets ;
chaque octet est repéré par un
numéro appelé adresse de l’octet ;
chaque variable dans la mémoire
occupe des octets contigus,
c’est-à-dire des octets qui se suivent.
Exemple : En langage C, un float
occupe 4 octets qui se suivent ;
l’adresse de la variable est l’adresse
de son premier octet. Donc, pour
retrouver une variable, il suffit de
connaître l’adresse de
l’élément-mémoire où elle est
stockée ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

2.1 Mémoire centrale et adresse


La mémoire centrale d’un ordinateur On doit donc apprendre à se servir de la
est composée d’un très grand notion de pointeur...
nombre d’octets ;
chaque octet est repéré par un
numéro appelé adresse de l’octet ;
chaque variable dans la mémoire
occupe des octets contigus,
c’est-à-dire des octets qui se suivent.
Exemple : En langage C, un float
occupe 4 octets qui se suivent ;
l’adresse de la variable est l’adresse
de son premier octet. Donc, pour
retrouver une variable, il suffit de
connaître l’adresse de
l’élément-mémoire où elle est
stockée ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

2.2 Variables de type pointeur

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

2.2 Variables de type pointeur


L’adresse d’une variable peut elle-même être mémorisée dans une variable ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

2.2 Variables de type pointeur


L’adresse d’une variable peut elle-même être mémorisée dans une variable ;
les variables dont les valeurs sont des adresses d’appellent des pointeurs.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

2.2 Variables de type pointeur


L’adresse d’une variable peut elle-même être mémorisée dans une variable ;
les variables dont les valeurs sont des adresses d’appellent des pointeurs.
Donc, une variable est caractérisée par :

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

2.2 Variables de type pointeur


L’adresse d’une variable peut elle-même être mémorisée dans une variable ;
les variables dont les valeurs sont des adresses d’appellent des pointeurs.
Donc, une variable est caractérisée par :
1 Son adresse, c’est-à-dire l’adresse mémoire à partir de laquelle l’objet est
stockée ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

2.2 Variables de type pointeur


L’adresse d’une variable peut elle-même être mémorisée dans une variable ;
les variables dont les valeurs sont des adresses d’appellent des pointeurs.
Donc, une variable est caractérisée par :
1 Son adresse, c’est-à-dire l’adresse mémoire à partir de laquelle l’objet est
stockée ;
2 sa valeur, c’est-à-dire ce qui est stocké à cette adresse.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

2.2 Variables de type pointeur


L’adresse d’une variable peut elle-même être mémorisée dans une variable ;
les variables dont les valeurs sont des adresses d’appellent des pointeurs.
Donc, une variable est caractérisée par :
1 Son adresse, c’est-à-dire l’adresse mémoire à partir de laquelle l’objet est
stockée ;
2 sa valeur, c’est-à-dire ce qui est stocké à cette adresse.

Déclaration en Algorithmique

Var *nomPointeur : type

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

2.2 Variables de type pointeur


L’adresse d’une variable peut elle-même être mémorisée dans une variable ;
les variables dont les valeurs sont des adresses d’appellent des pointeurs.
Donc, une variable est caractérisée par :
1 Son adresse, c’est-à-dire l’adresse mémoire à partir de laquelle l’objet est
stockée ;
2 sa valeur, c’est-à-dire ce qui est stocké à cette adresse.

Déclaration en Algorithmique Déclaration en C

Var *nomPointeur : type type *nomPointeur ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

2.2 Variables de type pointeur


L’adresse d’une variable peut elle-même être mémorisée dans une variable ;
les variables dont les valeurs sont des adresses d’appellent des pointeurs.
Donc, une variable est caractérisée par :
1 Son adresse, c’est-à-dire l’adresse mémoire à partir de laquelle l’objet est
stockée ;
2 sa valeur, c’est-à-dire ce qui est stocké à cette adresse.

Déclaration en Algorithmique Déclaration en C

Var *nomPointeur : type type *nomPointeur ;


nomPonteur est l’identificateur dont la valeur est l’adresse d’un objet de type
"type" ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

2.2 Variables de type pointeur


L’adresse d’une variable peut elle-même être mémorisée dans une variable ;
les variables dont les valeurs sont des adresses d’appellent des pointeurs.
Donc, une variable est caractérisée par :
1 Son adresse, c’est-à-dire l’adresse mémoire à partir de laquelle l’objet est
stockée ;
2 sa valeur, c’est-à-dire ce qui est stocké à cette adresse.

Déclaration en Algorithmique Déclaration en C

Var *nomPointeur : type type *nomPointeur ;


nomPonteur est l’identificateur dont la valeur est l’adresse d’un objet de type
"type" ;
type est le type de l’objet pointé ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

2.2 Variables de type pointeur


L’adresse d’une variable peut elle-même être mémorisée dans une variable ;
les variables dont les valeurs sont des adresses d’appellent des pointeurs.
Donc, une variable est caractérisée par :
1 Son adresse, c’est-à-dire l’adresse mémoire à partir de laquelle l’objet est
stockée ;
2 sa valeur, c’est-à-dire ce qui est stocké à cette adresse.

Déclaration en Algorithmique Déclaration en C

Var *nomPointeur : type type *nomPointeur ;


nomPonteur est l’identificateur dont la valeur est l’adresse d’un objet de type
"type" ;
type est le type de l’objet pointé ;
La valeur d’un pointeur est un entier ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

2.2 Variables de type pointeur


L’adresse d’une variable peut elle-même être mémorisée dans une variable ;
les variables dont les valeurs sont des adresses d’appellent des pointeurs.
Donc, une variable est caractérisée par :
1 Son adresse, c’est-à-dire l’adresse mémoire à partir de laquelle l’objet est
stockée ;
2 sa valeur, c’est-à-dire ce qui est stocké à cette adresse.

Déclaration en Algorithmique Déclaration en C

Var *nomPointeur : type type *nomPointeur ;


nomPonteur est l’identificateur dont la valeur est l’adresse d’un objet de type
"type" ;
type est le type de l’objet pointé ;
La valeur d’un pointeur est un entier ;
On peut appliquer à un pointeur quelque opérations arithmétiques :

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

2.2 Variables de type pointeur


L’adresse d’une variable peut elle-même être mémorisée dans une variable ;
les variables dont les valeurs sont des adresses d’appellent des pointeurs.
Donc, une variable est caractérisée par :
1 Son adresse, c’est-à-dire l’adresse mémoire à partir de laquelle l’objet est
stockée ;
2 sa valeur, c’est-à-dire ce qui est stocké à cette adresse.

Déclaration en Algorithmique Déclaration en C

Var *nomPointeur : type type *nomPointeur ;


nomPonteur est l’identificateur dont la valeur est l’adresse d’un objet de type
"type" ;
type est le type de l’objet pointé ;
La valeur d’un pointeur est un entier ;
On peut appliquer à un pointeur quelque opérations arithmétiques :
Addition d’un entier à un pointeur,

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

2.2 Variables de type pointeur


L’adresse d’une variable peut elle-même être mémorisée dans une variable ;
les variables dont les valeurs sont des adresses d’appellent des pointeurs.
Donc, une variable est caractérisée par :
1 Son adresse, c’est-à-dire l’adresse mémoire à partir de laquelle l’objet est
stockée ;
2 sa valeur, c’est-à-dire ce qui est stocké à cette adresse.

Déclaration en Algorithmique Déclaration en C

Var *nomPointeur : type type *nomPointeur ;


nomPonteur est l’identificateur dont la valeur est l’adresse d’un objet de type
"type" ;
type est le type de l’objet pointé ;
La valeur d’un pointeur est un entier ;
On peut appliquer à un pointeur quelque opérations arithmétiques :
Addition d’un entier à un pointeur, Soustraction d’un entier à pointeur et

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

2.2 Variables de type pointeur


L’adresse d’une variable peut elle-même être mémorisée dans une variable ;
les variables dont les valeurs sont des adresses d’appellent des pointeurs.
Donc, une variable est caractérisée par :
1 Son adresse, c’est-à-dire l’adresse mémoire à partir de laquelle l’objet est
stockée ;
2 sa valeur, c’est-à-dire ce qui est stocké à cette adresse.

Déclaration en Algorithmique Déclaration en C

Var *nomPointeur : type type *nomPointeur ;


nomPonteur est l’identificateur dont la valeur est l’adresse d’un objet de type
"type" ;
type est le type de l’objet pointé ;
La valeur d’un pointeur est un entier ;
On peut appliquer à un pointeur quelque opérations arithmétiques :
Addition d’un entier à un pointeur, Soustraction d’un entier à pointeur et
Différence entre deux pointeurs (de même type).

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

Exemple en Algorithmique
Var age : entier
*pointeurSurAge : entier
Debut
age ← 10
pointeurSurAge ← &age
*pointeurSurAge ← *pointeurSurAge+5
Ecrire (*pointeurSurAge)
Fin

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

Exemple en Algorithmique Traduction en C


Var age : entier int main(void)
*pointeurSurAge : entier {
Debut int age=10 ;
age ← 10 int *pointeurSurAge=&age ;
pointeurSurAge ← &age *pointeurSurAge+=5 ;
*pointeurSurAge ← *pointeurSurAge+5 printf("%d", *pointeurSurAge) ;
Ecrire (*pointeurSurAge) return 0 ;
Fin
}

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

Exemple en Algorithmique Traduction en C


Var age : entier int main(void)
*pointeurSurAge : entier {
Debut int age=10 ;
age ← 10 int *pointeurSurAge=&age ;
pointeurSurAge ← &age *pointeurSurAge+=5 ;
*pointeurSurAge ← *pointeurSurAge+5 printf("%d", *pointeurSurAge) ;
Ecrire (*pointeurSurAge) return 0 ;
Fin
}
Le nom d’une variable reste toujours lié à la même adresse ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

Exemple en Algorithmique Traduction en C


Var age : entier int main(void)
*pointeurSurAge : entier {
Debut int age=10 ;
age ← 10 int *pointeurSurAge=&age ;
pointeurSurAge ← &age *pointeurSurAge+=5 ;
*pointeurSurAge ← *pointeurSurAge+5 printf("%d", *pointeurSurAge) ;
Ecrire (*pointeurSurAge) return 0 ;
Fin
}
Le nom d’une variable reste toujours lié à la même adresse ;
age signifie : "Je veux la valeur de la variable age" ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

Exemple en Algorithmique Traduction en C


Var age : entier int main(void)
*pointeurSurAge : entier {
Debut int age=10 ;
age ← 10 int *pointeurSurAge=&age ;
pointeurSurAge ← &age *pointeurSurAge+=5 ;
*pointeurSurAge ← *pointeurSurAge+5 printf("%d", *pointeurSurAge) ;
Ecrire (*pointeurSurAge) return 0 ;
Fin
}
Le nom d’une variable reste toujours lié à la même adresse ;
age signifie : "Je veux la valeur de la variable age" ;
&age signifie : "Je veux l’adresse à laquelle se trouve la
variable age".

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

Exemple en Algorithmique Traduction en C


Var age : entier int main(void)
*pointeurSurAge : entier {
Debut int age=10 ;
age ← 10 int *pointeurSurAge=&age ;
pointeurSurAge ← &age *pointeurSurAge+=5 ;
*pointeurSurAge ← *pointeurSurAge+5 printf("%d", *pointeurSurAge) ;
Ecrire (*pointeurSurAge) return 0 ;
Fin
}
Le nom d’une variable reste toujours lié à la même adresse ;
age signifie : "Je veux la valeur de la variable age" ;
&age signifie : "Je veux l’adresse à laquelle se trouve la
variable age".
Un pointeur est une variable qui peut pointer sur différentes
adresses.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

Exemple en Algorithmique Traduction en C


Var age : entier int main(void)
*pointeurSurAge : entier {
Debut int age=10 ;
age ← 10 int *pointeurSurAge=&age ;
pointeurSurAge ← &age *pointeurSurAge+=5 ;
*pointeurSurAge ← *pointeurSurAge+5 printf("%d", *pointeurSurAge) ;
Ecrire (*pointeurSurAge) return 0 ;
Fin
}
Le nom d’une variable reste toujours lié à la même adresse ;
age signifie : "Je veux la valeur de la variable age" ;
&age signifie : "Je veux l’adresse à laquelle se trouve la
variable age".
Un pointeur est une variable qui peut pointer sur différentes
adresses.
pointeurSurAge signifie : "Je veux la valeur de
pointeurSurAge" (cette valeur étant une adresse) ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

Exemple en Algorithmique Traduction en C


Var age : entier int main(void)
*pointeurSurAge : entier {
Debut int age=10 ;
age ← 10 int *pointeurSurAge=&age ;
pointeurSurAge ← &age *pointeurSurAge+=5 ;
*pointeurSurAge ← *pointeurSurAge+5 printf("%d", *pointeurSurAge) ;
Ecrire (*pointeurSurAge) return 0 ;
Fin
}
Le nom d’une variable reste toujours lié à la même adresse ;
age signifie : "Je veux la valeur de la variable age" ;
&age signifie : "Je veux l’adresse à laquelle se trouve la
variable age".
Un pointeur est une variable qui peut pointer sur différentes
adresses.
pointeurSurAge signifie : "Je veux la valeur de
pointeurSurAge" (cette valeur étant une adresse) ;
*pointeurSurAge signifie : "Je veux la valeur de la
variable qui se trouve à l’adresse contenue dans
pointeurSurAge".

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

Exemple en Algorithmique Traduction en C


Var age : entier int main(void)
*pointeurSurAge : entier {
Debut int age=10 ;
age ← 10 int *pointeurSurAge=&age ;
pointeurSurAge ← &age *pointeurSurAge+=5 ;
*pointeurSurAge ← *pointeurSurAge+5 printf("%d", *pointeurSurAge) ;
Ecrire (*pointeurSurAge) return 0 ;
Fin
}
Le nom d’une variable reste toujours lié à la même adresse ;
age signifie : "Je veux la valeur de la variable age" ;
&age signifie : "Je veux l’adresse à laquelle se trouve la
variable age".
Un pointeur est une variable qui peut pointer sur différentes
adresses.
pointeurSurAge signifie : "Je veux la valeur de
pointeurSurAge" (cette valeur étant une adresse) ;
*pointeurSurAge signifie : "Je veux la valeur de la
variable qui se trouve à l’adresse contenue dans
pointeurSurAge".

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

2.3 Passage par adresse des paramètres d’une fonction (ou


procédure)
Le gros intérêt des pointeurs (mais ce n’est pas le seul) est qu’on peut les
envoyer à des fonctions pour qu’elles modifient directement une variable en
mémoire, et non une copie comme on l’a déjà vu auparavant.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

2.3 Passage par adresse des paramètres d’une fonction (ou


procédure)
Le gros intérêt des pointeurs (mais ce n’est pas le seul) est qu’on peut les
envoyer à des fonctions pour qu’elles modifient directement une variable en
mémoire, et non une copie comme on l’a déjà vu auparavant.

Exemple en Algorithmique
Procedure doublePointeur(Var
pointeurSurNb : entier )
Debut
(*pointeurNb) ← (*pointeurNb) * 2
Fin
Var nb : entier
Debut
nb ← 10
doublePointeur(&nb)
Ecrire (nb)
Fin

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

2.3 Passage par adresse des paramètres d’une fonction (ou


procédure)
Le gros intérêt des pointeurs (mais ce n’est pas le seul) est qu’on peut les
envoyer à des fonctions pour qu’elles modifient directement une variable en
mémoire, et non une copie comme on l’a déjà vu auparavant.

Exemple en Algorithmique Traduction en C


Procedure doublePointeur(Var void doublePointeur(int *pointeurSurNb)
pointeurSurNb : entier ) {
Debut (*pointeurSurNb)*=2 ;
(*pointeurNb) ← (*pointeurNb) * 2 }
Fin int main(void)
Var nb : entier {
Debut int nb=10 ;
nb ← 10 doublePointeur(&nb) ;
doublePointeur(&nb) printf("%d", nb) ;
Ecrire (nb) return 0 ;
Fin }

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.1 Allocation statique

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.1 Allocation statique


Dans les algorithmes que nous avons écrits jusqu’à présent, les variables que
nous avons déclarées sont :

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.1 Allocation statique


Dans les algorithmes que nous avons écrits jusqu’à présent, les variables que
nous avons déclarées sont :
1 Soit des variables globales (définies dans l’algorithme principal).

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.1 Allocation statique


Dans les algorithmes que nous avons écrits jusqu’à présent, les variables que
nous avons déclarées sont :
1 Soit des variables globales (définies dans l’algorithme principal).
2 Soit des variables locales (définies dans les sous-programmes).

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.1 Allocation statique


Dans les algorithmes que nous avons écrits jusqu’à présent, les variables que
nous avons déclarées sont :
1 Soit des variables globales (définies dans l’algorithme principal).
2 Soit des variables locales (définies dans les sous-programmes).

Ces variables doivent être déclarées explicitement pendant l’écriture des


algorithmes et ont une durée de vie précise (la durée de vie du bloc contenant la
déclaration) :

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.1 Allocation statique


Dans les algorithmes que nous avons écrits jusqu’à présent, les variables que
nous avons déclarées sont :
1 Soit des variables globales (définies dans l’algorithme principal).
2 Soit des variables locales (définies dans les sous-programmes).

Ces variables doivent être déclarées explicitement pendant l’écriture des


algorithmes et ont une durée de vie précise (la durée de vie du bloc contenant la
déclaration) :
Les variables globales sont créées au début de l’exécution et sont
conservées jusqu’à la fin de l’exécution.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.1 Allocation statique


Dans les algorithmes que nous avons écrits jusqu’à présent, les variables que
nous avons déclarées sont :
1 Soit des variables globales (définies dans l’algorithme principal).
2 Soit des variables locales (définies dans les sous-programmes).

Ces variables doivent être déclarées explicitement pendant l’écriture des


algorithmes et ont une durée de vie précise (la durée de vie du bloc contenant la
déclaration) :
Les variables globales sont créées au début de l’exécution et sont
conservées jusqu’à la fin de l’exécution.
Les variables locales sont créées au début de l’exécution du
sous-programme et sont supprimées à la fin de son exécution.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.1 Allocation statique


Dans les algorithmes que nous avons écrits jusqu’à présent, les variables que
nous avons déclarées sont :
1 Soit des variables globales (définies dans l’algorithme principal).
2 Soit des variables locales (définies dans les sous-programmes).

Ces variables doivent être déclarées explicitement pendant l’écriture des


algorithmes et ont une durée de vie précise (la durée de vie du bloc contenant la
déclaration) :
Les variables globales sont créées au début de l’exécution et sont
conservées jusqu’à la fin de l’exécution.
Les variables locales sont créées au début de l’exécution du
sous-programme et sont supprimées à la fin de son exécution.
L’opération de " création " de l’espace mémoire associé à une variable s’appelle
l’allocation.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.1 Allocation statique


Dans les algorithmes que nous avons écrits jusqu’à présent, les variables que
nous avons déclarées sont :
1 Soit des variables globales (définies dans l’algorithme principal).
2 Soit des variables locales (définies dans les sous-programmes).

Ces variables doivent être déclarées explicitement pendant l’écriture des


algorithmes et ont une durée de vie précise (la durée de vie du bloc contenant la
déclaration) :
Les variables globales sont créées au début de l’exécution et sont
conservées jusqu’à la fin de l’exécution.
Les variables locales sont créées au début de l’exécution du
sous-programme et sont supprimées à la fin de son exécution.
L’opération de " création " de l’espace mémoire associé à une variable s’appelle
l’allocation.
L’allocation est dite " statique " car décidée au moment de l’écriture de
l’algorithme et non évolutive lors de l’exécution.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.1 Allocation statique


Dans les algorithmes que nous avons écrits jusqu’à présent, les variables que
nous avons déclarées sont :
1 Soit des variables globales (définies dans l’algorithme principal).
2 Soit des variables locales (définies dans les sous-programmes).

Ces variables doivent être déclarées explicitement pendant l’écriture des


algorithmes et ont une durée de vie précise (la durée de vie du bloc contenant la
déclaration) :
Les variables globales sont créées au début de l’exécution et sont
conservées jusqu’à la fin de l’exécution.
Les variables locales sont créées au début de l’exécution du
sous-programme et sont supprimées à la fin de son exécution.
L’opération de " création " de l’espace mémoire associé à une variable s’appelle
l’allocation.
L’allocation est dite " statique " car décidée au moment de l’écriture de
l’algorithme et non évolutive lors de l’exécution.
Cela a de nombreux inconvénients. Par exemple, il n’est pas possible de
contrôler au mieux l’espace mémoire disponible.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.1 Allocation statique

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.1 Allocation statique


Si pour des variables simples (entiers, réels, . . . ) il n’est pas très pénalisant de
garder des variables jusqu’à la fin de l’exécution (même si elle ne nous servent
plus), il n’en est pas toujours ainsi.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.1 Allocation statique


Si pour des variables simples (entiers, réels, . . . ) il n’est pas très pénalisant de
garder des variables jusqu’à la fin de l’exécution (même si elle ne nous servent
plus), il n’en est pas toujours ainsi.
Fréquemment, par exemple dans le cas d’un vecteur, on ne peut pas connaître, a
priori lors de l’écriture de l’algorithme, le nombre d’éléments qu’il contiendra.
Cette taille n’est bien souvent calculable ou connu que pendant l’exécution du
programme.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.1 Allocation statique


Si pour des variables simples (entiers, réels, . . . ) il n’est pas très pénalisant de
garder des variables jusqu’à la fin de l’exécution (même si elle ne nous servent
plus), il n’en est pas toujours ainsi.
Fréquemment, par exemple dans le cas d’un vecteur, on ne peut pas connaître, a
priori lors de l’écriture de l’algorithme, le nombre d’éléments qu’il contiendra.
Cette taille n’est bien souvent calculable ou connu que pendant l’exécution du
programme.
Il est donc indispensable de disposer d’un mécanisme permettant de créer (et de
supprimer) des variables de différents types pendant l’exécution.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.1 Allocation statique


Si pour des variables simples (entiers, réels, . . . ) il n’est pas très pénalisant de
garder des variables jusqu’à la fin de l’exécution (même si elle ne nous servent
plus), il n’en est pas toujours ainsi.
Fréquemment, par exemple dans le cas d’un vecteur, on ne peut pas connaître, a
priori lors de l’écriture de l’algorithme, le nombre d’éléments qu’il contiendra.
Cette taille n’est bien souvent calculable ou connu que pendant l’exécution du
programme.
Il est donc indispensable de disposer d’un mécanisme permettant de créer (et de
supprimer) des variables de différents types pendant l’exécution.
C’est ce qu’on appelle la gestion dynamique(pendant l’exécution) de la
mémoire. Elle comprend deux opérations :

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.1 Allocation statique


Si pour des variables simples (entiers, réels, . . . ) il n’est pas très pénalisant de
garder des variables jusqu’à la fin de l’exécution (même si elle ne nous servent
plus), il n’en est pas toujours ainsi.
Fréquemment, par exemple dans le cas d’un vecteur, on ne peut pas connaître, a
priori lors de l’écriture de l’algorithme, le nombre d’éléments qu’il contiendra.
Cette taille n’est bien souvent calculable ou connu que pendant l’exécution du
programme.
Il est donc indispensable de disposer d’un mécanisme permettant de créer (et de
supprimer) des variables de différents types pendant l’exécution.
C’est ce qu’on appelle la gestion dynamique(pendant l’exécution) de la
mémoire. Elle comprend deux opérations :
1 Allouer.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.1 Allocation statique


Si pour des variables simples (entiers, réels, . . . ) il n’est pas très pénalisant de
garder des variables jusqu’à la fin de l’exécution (même si elle ne nous servent
plus), il n’en est pas toujours ainsi.
Fréquemment, par exemple dans le cas d’un vecteur, on ne peut pas connaître, a
priori lors de l’écriture de l’algorithme, le nombre d’éléments qu’il contiendra.
Cette taille n’est bien souvent calculable ou connu que pendant l’exécution du
programme.
Il est donc indispensable de disposer d’un mécanisme permettant de créer (et de
supprimer) des variables de différents types pendant l’exécution.
C’est ce qu’on appelle la gestion dynamique(pendant l’exécution) de la
mémoire. Elle comprend deux opérations :
1 Allouer.
2 Libérer.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.2 Allocation dynamique

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.2 Allocation dynamique


Définition
L’allocation dynamique de mémoire est la possibilité de réserver une zone mémoire à
l’exécution d’un programme.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.2 Allocation dynamique


Définition
L’allocation dynamique de mémoire est la possibilité de réserver une zone mémoire à
l’exécution d’un programme.

Il n’y a pas de déclaration explicite de variables.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.2 Allocation dynamique


Définition
L’allocation dynamique de mémoire est la possibilité de réserver une zone mémoire à
l’exécution d’un programme.

Il n’y a pas de déclaration explicite de variables.


L’accès se fait par le moyen d’un pointeur (une adresse mémoire).

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.2 Allocation dynamique


Définition
L’allocation dynamique de mémoire est la possibilité de réserver une zone mémoire à
l’exécution d’un programme.

Il n’y a pas de déclaration explicite de variables.


L’accès se fait par le moyen d’un pointeur (une adresse mémoire).
L’espace mémoire existe juste pour la durée nécessaire.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.2 Allocation dynamique


Définition
L’allocation dynamique de mémoire est la possibilité de réserver une zone mémoire à
l’exécution d’un programme.

Il n’y a pas de déclaration explicite de variables.


L’accès se fait par le moyen d’un pointeur (une adresse mémoire).
L’espace mémoire existe juste pour la durée nécessaire.
La nécessité de disposer d’un espace mémoire dans lequel faire l’allocation :
cette zone est nommée TAS (Heap).

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.2 Allocation dynamique


Définition
L’allocation dynamique de mémoire est la possibilité de réserver une zone mémoire à
l’exécution d’un programme.

Il n’y a pas de déclaration explicite de variables.


L’accès se fait par le moyen d’un pointeur (une adresse mémoire).
L’espace mémoire existe juste pour la durée nécessaire.
La nécessité de disposer d’un espace mémoire dans lequel faire l’allocation :
cette zone est nommée TAS (Heap).

1 Allocation dynamique de mémoire (Opérateur allouer)

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.2 Allocation dynamique


Définition
L’allocation dynamique de mémoire est la possibilité de réserver une zone mémoire à
l’exécution d’un programme.

Il n’y a pas de déclaration explicite de variables.


L’accès se fait par le moyen d’un pointeur (une adresse mémoire).
L’espace mémoire existe juste pour la durée nécessaire.
La nécessité de disposer d’un espace mémoire dans lequel faire l’allocation :
cette zone est nommée TAS (Heap).

1 Allocation dynamique de mémoire (Opérateur allouer)


Cette opération permet de réserver une zone mémoire et permet d’accéder
à cette zone en utilisant la valeur qu’elle retourne.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.2 Allocation dynamique


Définition
L’allocation dynamique de mémoire est la possibilité de réserver une zone mémoire à
l’exécution d’un programme.

Il n’y a pas de déclaration explicite de variables.


L’accès se fait par le moyen d’un pointeur (une adresse mémoire).
L’espace mémoire existe juste pour la durée nécessaire.
La nécessité de disposer d’un espace mémoire dans lequel faire l’allocation :
cette zone est nommée TAS (Heap).

1 Allocation dynamique de mémoire (Opérateur allouer)


Cette opération permet de réserver une zone mémoire et permet d’accéder
à cette zone en utilisant la valeur qu’elle retourne.
On peut stocker cette valeur, une adresse mémoire, dans ce que l’on
appelle un pointeur.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.2 Allocation dynamique


Définition
L’allocation dynamique de mémoire est la possibilité de réserver une zone mémoire à
l’exécution d’un programme.

Il n’y a pas de déclaration explicite de variables.


L’accès se fait par le moyen d’un pointeur (une adresse mémoire).
L’espace mémoire existe juste pour la durée nécessaire.
La nécessité de disposer d’un espace mémoire dans lequel faire l’allocation :
cette zone est nommée TAS (Heap).

1 Allocation dynamique de mémoire (Opérateur allouer)


Cette opération permet de réserver une zone mémoire et permet d’accéder
à cette zone en utilisant la valeur qu’elle retourne.
On peut stocker cette valeur, une adresse mémoire, dans ce que l’on
appelle un pointeur.
2 Libération dynamique de mémoire (Opérateur libérer)

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

3.2 Allocation dynamique


Définition
L’allocation dynamique de mémoire est la possibilité de réserver une zone mémoire à
l’exécution d’un programme.

Il n’y a pas de déclaration explicite de variables.


L’accès se fait par le moyen d’un pointeur (une adresse mémoire).
L’espace mémoire existe juste pour la durée nécessaire.
La nécessité de disposer d’un espace mémoire dans lequel faire l’allocation :
cette zone est nommée TAS (Heap).

1 Allocation dynamique de mémoire (Opérateur allouer)


Cette opération permet de réserver une zone mémoire et permet d’accéder
à cette zone en utilisant la valeur qu’elle retourne.
On peut stocker cette valeur, une adresse mémoire, dans ce que l’on
appelle un pointeur.
2 Libération dynamique de mémoire (Opérateur libérer)
Elle ne doit être appliquée qu’à des pointeurs pointant sur une zone
allouée dynamiquement.
Tayeb BAHRAM Université Dr. Tahar Moulay de Saida
Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

a. Allocation/Libération d’un élément

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

a. Allocation/Libération d’un élément

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

a. Allocation/Libération d’un élément


Syntaxe : langage algorithmique

Allouer (p)

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

a. Allocation/Libération d’un élément


Syntaxe : langage algorithmique Syntaxe : langage C

Allouer (p) type*p=(type*) malloc (sizeof(type)) ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

a. Allocation/Libération d’un élément


Syntaxe : langage algorithmique Syntaxe : langage C

Allouer (p) type*p=(type*) malloc (sizeof(type)) ;


Réserve une zone mémoire d’une taille correspondant à la taille du sous-type du
pointeur p de type "type" (c’est-à-dire taille(type)) et mémorise l’adresse
mémoire de cette zone dans la variable pointeur p.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

a. Allocation/Libération d’un élément


Syntaxe : langage algorithmique Syntaxe : langage C

Allouer (p) type*p=(type*) malloc (sizeof(type)) ;


Réserve une zone mémoire d’une taille correspondant à la taille du sous-type du
pointeur p de type "type" (c’est-à-dire taille(type)) et mémorise l’adresse
mémoire de cette zone dans la variable pointeur p.

Syntaxe : langage algorithmique

Liberer (p)

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

a. Allocation/Libération d’un élément


Syntaxe : langage algorithmique Syntaxe : langage C

Allouer (p) type*p=(type*) malloc (sizeof(type)) ;


Réserve une zone mémoire d’une taille correspondant à la taille du sous-type du
pointeur p de type "type" (c’est-à-dire taille(type)) et mémorise l’adresse
mémoire de cette zone dans la variable pointeur p.

Syntaxe : langage algorithmique Syntaxe : langage C

Liberer (p) free(p) ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

a. Allocation/Libération d’un élément


Syntaxe : langage algorithmique Syntaxe : langage C

Allouer (p) type*p=(type*) malloc (sizeof(type)) ;


Réserve une zone mémoire d’une taille correspondant à la taille du sous-type du
pointeur p de type "type" (c’est-à-dire taille(type)) et mémorise l’adresse
mémoire de cette zone dans la variable pointeur p.

Syntaxe : langage algorithmique Syntaxe : langage C

Liberer (p) free(p) ;


Libère et restitue au système d’exploitation la zone mémoire pointée par le
pointeur p et rend indéterminée la valeur de p.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

a. Allocation/Libération d’un élément


Syntaxe : langage algorithmique Syntaxe : langage C

Allouer (p) type*p=(type*) malloc (sizeof(type)) ;


Réserve une zone mémoire d’une taille correspondant à la taille du sous-type du
pointeur p de type "type" (c’est-à-dire taille(type)) et mémorise l’adresse
mémoire de cette zone dans la variable pointeur p.

Syntaxe : langage algorithmique Syntaxe : langage C

Liberer (p) free(p) ;


Libère et restitue au système d’exploitation la zone mémoire pointée par le
pointeur p et rend indéterminée la valeur de p.

Exemple : langage algorithmique


Algorithme AllocationUnElement
Var *p : reel
Debut
Allouer (p) // Allocation de 4 octets
*p←6.4531 // Attribution d’une valeur
Liberer(p) // Libération de la zone
Fin
Tayeb BAHRAM Université Dr. Tahar Moulay de Saida
Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

a. Allocation/Libération d’un élément


Syntaxe : langage algorithmique Syntaxe : langage C

Allouer (p) type*p=(type*) malloc (sizeof(type)) ;


Réserve une zone mémoire d’une taille correspondant à la taille du sous-type du
pointeur p de type "type" (c’est-à-dire taille(type)) et mémorise l’adresse
mémoire de cette zone dans la variable pointeur p.

Syntaxe : langage algorithmique Syntaxe : langage C

Liberer (p) free(p) ;


Libère et restitue au système d’exploitation la zone mémoire pointée par le
pointeur p et rend indéterminée la valeur de p.

Exemple : langage algorithmique Exemple : langage C


Algorithme AllocationUnElement #include<stdlib.h>
Var *p : reel int main(void)
Debut {
Allouer (p) // Allocation de 4 octets float *p=(float*) malloc (sizeof(float)) ;
*p←6.4531 // Attribution d’une valeur *p=6.4531 ;
Liberer(p) // Libération de la zone free(p) ;
}
Fin
Tayeb BAHRAM Université Dr. Tahar Moulay de Saida
Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

b. Allocation/Libération d’un tableau

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

b. Allocation/Libération d’un tableau

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

b. Allocation/Libération d’un tableau


Syntaxe : langage algorithmique

Allouer (p, nb)

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

b. Allocation/Libération d’un tableau


Syntaxe : langage algorithmique Syntaxe : langage C

Allouer (p, nb) type*p=(type*) malloc (nb*sizeof(type)) ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

b. Allocation/Libération d’un tableau


Syntaxe : langage algorithmique Syntaxe : langage C

Allouer (p, nb) type*p=(type*) malloc (nb*sizeof(type)) ;


Réserve une zone de mémoire de type T[nb], met l’adresse correspondante dans
p et initialise chacun des éléments du tableau dynamique à la valeur nulle du
type T.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

b. Allocation/Libération d’un tableau


Syntaxe : langage algorithmique Syntaxe : langage C

Allouer (p, nb) type*p=(type*) malloc (nb*sizeof(type)) ;


Réserve une zone de mémoire de type T[nb], met l’adresse correspondante dans
p et initialise chacun des éléments du tableau dynamique à la valeur nulle du
type T.
Syntaxe : langage algorithmique

Liberer (p[])

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

b. Allocation/Libération d’un tableau


Syntaxe : langage algorithmique Syntaxe : langage C

Allouer (p, nb) type*p=(type*) malloc (nb*sizeof(type)) ;


Réserve une zone de mémoire de type T[nb], met l’adresse correspondante dans
p et initialise chacun des éléments du tableau dynamique à la valeur nulle du
type T.
Syntaxe : langage algorithmique Syntaxe : langage C

Liberer (p[]) free(p) ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

b. Allocation/Libération d’un tableau


Syntaxe : langage algorithmique Syntaxe : langage C

Allouer (p, nb) type*p=(type*) malloc (nb*sizeof(type)) ;


Réserve une zone de mémoire de type T[nb], met l’adresse correspondante dans
p et initialise chacun des éléments du tableau dynamique à la valeur nulle du
type T.
Syntaxe : langage algorithmique Syntaxe : langage C

Liberer (p[]) free(p) ;


Libère la zone mémoire allouée au pointeur p. Ce sont les crochets qui indique
au système que l’adresse dans réfère une structure tabulaire.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

b. Allocation/Libération d’un tableau


Syntaxe : langage algorithmique Syntaxe : langage C

Allouer (p, nb) type*p=(type*) malloc (nb*sizeof(type)) ;


Réserve une zone de mémoire de type T[nb], met l’adresse correspondante dans
p et initialise chacun des éléments du tableau dynamique à la valeur nulle du
type T.
Syntaxe : langage algorithmique Syntaxe : langage C

Liberer (p[]) free(p) ;


Libère la zone mémoire allouée au pointeur p. Ce sont les crochets qui indique
au système que l’adresse dans réfère une structure tabulaire.
Exemple : langage algorithmique
Algorithme AllocationUnTableau
Var *p : entier
Debut
Allouer (p,nbAmis) // Allocation TAS
// Traitements
Liberer(p[]) // Libération de la zone
Fin

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

b. Allocation/Libération d’un tableau


Syntaxe : langage algorithmique Syntaxe : langage C

Allouer (p, nb) type*p=(type*) malloc (nb*sizeof(type)) ;


Réserve une zone de mémoire de type T[nb], met l’adresse correspondante dans
p et initialise chacun des éléments du tableau dynamique à la valeur nulle du
type T.
Syntaxe : langage algorithmique Syntaxe : langage C

Liberer (p[]) free(p) ;


Libère la zone mémoire allouée au pointeur p. Ce sont les crochets qui indique
au système que l’adresse dans réfère une structure tabulaire.
Exemple : langage algorithmique Exemple : langage C
Algorithme AllocationUnTableau #include<stdlib.h>
Var *p : entier int main(void)
Debut {
Allouer (p,nbAmis) // Allocation TAS int *p=(int*) malloc
// Traitements (nb*sizeof(int)) ;
Liberer(p[]) // Libération de la zone // Traitements
free(p) ;
Fin
}
Tayeb BAHRAM Université Dr. Tahar Moulay de Saida
Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.1 Qu’est-ce qu’une liste chaînée ?

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.1 Qu’est-ce qu’une liste chaînée ?


Liste chaînée
Une liste chaînée est un ensemble de cellules liées entre elles par des pointeurs.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.1 Qu’est-ce qu’une liste chaînée ?


Liste chaînée
Une liste chaînée est un ensemble de cellules liées entre elles par des pointeurs.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.1 Qu’est-ce qu’une liste chaînée ?


Liste chaînée
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 :

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.1 Qu’est-ce qu’une liste chaînée ?


Liste chaînée
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 :


1 une ou plusieurs données comme dans n’importe quelle structure ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.1 Qu’est-ce qu’une liste chaînée ?


Liste chaînée
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 :


1 une ou plusieurs données comme dans n’importe quelle structure ;
2 un pointeur suivant sur la cellule suivante.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.1 Qu’est-ce qu’une liste chaînée ?


Liste chaînée
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 :


1 une ou plusieurs données comme dans n’importe quelle structure ;
2 un pointeur suivant sur la cellule suivante.

On accède à la liste par un pointeur tête sur la première cellule, puis en


parcourant la liste d’une cellule à l’autre en suivant les pointeurs suivant ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.1 Qu’est-ce qu’une liste chaînée ?


Liste chaînée
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 :


1 une ou plusieurs données comme dans n’importe quelle structure ;
2 un pointeur suivant sur la cellule suivante.

On accède à la liste par un pointeur tête sur la première cellule, puis en


parcourant la liste d’une cellule à l’autre en suivant les pointeurs suivant ;
Le dernier pointeur suivant vaut NULL , ce qui indique la fin de la liste.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.1 Qu’est-ce qu’une liste chaînée ?


Liste chaînée
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 :


1 une ou plusieurs données comme dans n’importe quelle structure ;
2 un pointeur suivant sur la cellule suivante.

On accède à la liste par un pointeur tête sur la première cellule, puis en


parcourant la liste d’une cellule à l’autre en suivant les pointeurs suivant ;
Le dernier pointeur suivant vaut NULL , ce qui indique la fin de la liste.

La structure de données de la liste chaînée contient deux parties :

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.1 Qu’est-ce qu’une liste chaînée ?


Liste chaînée
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 :


1 une ou plusieurs données comme dans n’importe quelle structure ;
2 un pointeur suivant sur la cellule suivante.

On accède à la liste par un pointeur tête sur la première cellule, puis en


parcourant la liste d’une cellule à l’autre en suivant les pointeurs suivant ;
Le dernier pointeur suivant vaut NULL , ce qui indique la fin de la liste.

La structure de données de la liste chaînée contient deux parties :


1 la valeur que vous voulez stocker ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.1 Qu’est-ce qu’une liste chaînée ?


Liste chaînée
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 :


1 une ou plusieurs données comme dans n’importe quelle structure ;
2 un pointeur suivant sur la cellule suivante.

On accède à la liste par un pointeur tête sur la première cellule, puis en


parcourant la liste d’une cellule à l’autre en suivant les pointeurs suivant ;
Le dernier pointeur suivant vaut NULL , ce qui indique la fin de la liste.

La structure de données de la liste chaînée contient deux parties :


1 la valeur que vous voulez stocker ;
2 l’adresse de l’élément suivant, s’il existe sinon l’adresse sera NULL, et
désignera le bout de la chaîne.
Tayeb BAHRAM Université Dr. Tahar Moulay de Saida
Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.2 Déclarer une liste chaînée

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.2 Déclarer une liste chaînée


Pour créer une liste chaînée, il faut déclarer une nouvelle structure de données :
la structure qui représentera une cellule.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.2 Déclarer une liste chaînée


Pour créer une liste chaînée, il faut déclarer une nouvelle structure de données :
la structure qui représentera une cellule.

Syntaxe : Langage algorithmique


Structure Cellule
{
donnee : DonneeType // n’importe
quel type
*suivant : Cellule
}

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.2 Déclarer une liste chaînée


Pour créer une liste chaînée, il faut déclarer une nouvelle structure de données :
la structure qui représentera une cellule.

Syntaxe : Langage algorithmique Syntaxe : Langage C


Structure Cellule typedef struct Cellule
{ {
donnee : DonneeType // n’importe DonneeType donnee ; // n’importe quel
quel type type
*suivant : Cellule struct Cellule* suivant ;
} Cellule ;
}

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.2 Déclarer une liste chaînée


Pour créer une liste chaînée, il faut déclarer une nouvelle structure de données :
la structure qui représentera une cellule.

Syntaxe : Langage algorithmique Syntaxe : Langage C


Structure Cellule typedef struct Cellule
{ {
donnee : DonneeType // n’importe DonneeType donnee ; // n’importe quel
quel type type
*suivant : Cellule struct Cellule* suivant ;
} Cellule ;
}
donnee est le contenu de la cellule ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.2 Déclarer une liste chaînée


Pour créer une liste chaînée, il faut déclarer une nouvelle structure de données :
la structure qui représentera une cellule.

Syntaxe : Langage algorithmique Syntaxe : Langage C


Structure Cellule typedef struct Cellule
{ {
donnee : DonneeType // n’importe DonneeType donnee ; // n’importe quel
quel type type
*suivant : Cellule struct Cellule* suivant ;
} Cellule ;
}
donnee est le contenu de la cellule ;
suivant pointe vers la cellule suivante, ou vaut NULL (fin de liste)

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.2 Déclarer une liste chaînée


Pour créer une liste chaînée, il faut déclarer une nouvelle structure de données :
la structure qui représentera une cellule.

Syntaxe : Langage algorithmique Syntaxe : Langage C


Structure Cellule typedef struct Cellule
{ {
donnee : DonneeType // n’importe DonneeType donnee ; // n’importe quel
quel type type
*suivant : Cellule struct Cellule* suivant ;
} Cellule ;
}
donnee est le contenu de la cellule ;
suivant pointe vers la cellule suivante, ou vaut NULL (fin de liste)

Exemple : Langage algorithmique


Structure Cellule
{
donnee : reel // ici un réel
*suivant : Cellule
}
Tayeb BAHRAM Université Dr. Tahar Moulay de Saida
Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.2 Déclarer une liste chaînée


Pour créer une liste chaînée, il faut déclarer une nouvelle structure de données :
la structure qui représentera une cellule.

Syntaxe : Langage algorithmique Syntaxe : Langage C


Structure Cellule typedef struct Cellule
{ {
donnee : DonneeType // n’importe DonneeType donnee ; // n’importe quel
quel type type
*suivant : Cellule struct Cellule* suivant ;
} Cellule ;
}
donnee est le contenu de la cellule ;
suivant pointe vers la cellule suivante, ou vaut NULL (fin de liste)

Exemple : Langage algorithmique Exemple : Langage C


Structure Cellule typedef struct Cellule
{ {
donnee : reel // ici un réel float donnee ; // ici un réel
*suivant : Cellule struct Liste* suivant ;
} Cellule ;
}
Tayeb BAHRAM Université Dr. Tahar Moulay de Saida
Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.3 Initialiser une liste chaînée

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.3 Initialiser une liste chaînée


Une liste simple est une collection d’objets accessibles les uns après les autres.
Elle peut être

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.3 Initialiser une liste chaînée


Une liste simple est une collection d’objets accessibles les uns après les autres.
Elle peut être
1 vide ; et la convention pour reprèsenter la liste vide consiste à utiliser le
pointeur NULL ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.3 Initialiser une liste chaînée


Une liste simple est une collection d’objets accessibles les uns après les autres.
Elle peut être
1 vide ; et la convention pour reprèsenter la liste vide consiste à utiliser le
pointeur NULL ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.3 Initialiser une liste chaînée


Une liste simple est une collection d’objets accessibles les uns après les autres.
Elle peut être
1 vide ; et la convention pour reprèsenter la liste vide consiste à utiliser le
pointeur NULL ;
2 composé d’un élément et du reste de la liste.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.3 Initialiser une liste chaînée


Une liste simple est une collection d’objets accessibles les uns après les autres.
Elle peut être
1 vide ; et la convention pour reprèsenter la liste vide consiste à utiliser le
pointeur NULL ;
2 composé d’un élément et du reste de la liste.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.3 Initialiser une liste chaînée


Une liste simple est une collection d’objets accessibles les uns après les autres.
Elle peut être
1 vide ; et la convention pour reprèsenter la liste vide consiste à utiliser le
pointeur NULL ;
2 composé d’un élément et du reste de la liste.

L’utilisation primaire d’une liste consiste à la déclarer et à l’initialiser à la liste


vide.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.3 Initialiser une liste chaînée


Une liste simple est une collection d’objets accessibles les uns après les autres.
Elle peut être
1 vide ; et la convention pour reprèsenter la liste vide consiste à utiliser le
pointeur NULL ;
2 composé d’un élément et du reste de la liste.

L’utilisation primaire d’une liste consiste à la déclarer et à l’initialiser à la liste


vide.

Syntaxe : langage algorithmique


Var *liste : Cellule ;
liste ← NULL ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.3 Initialiser une liste chaînée


Une liste simple est une collection d’objets accessibles les uns après les autres.
Elle peut être
1 vide ; et la convention pour reprèsenter la liste vide consiste à utiliser le
pointeur NULL ;
2 composé d’un élément et du reste de la liste.

L’utilisation primaire d’une liste consiste à la déclarer et à l’initialiser à la liste


vide.

Syntaxe : langage algorithmique Syntaxe : langage C


Var *liste : Cellule ; Cellule *liste ;
liste = NULL ;
liste ← NULL ;
Ou
Cellule *liste = NULL ;

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.4 Création d’une liste d’un élément

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.4 Création d’une liste d’un élément


La création d’une liste d’un élément demande d’allouer de la mémoire au
gestionnaire de mémoire.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.4 Création d’une liste d’un élément


La création d’une liste d’un élément demande d’allouer de la mémoire au
gestionnaire de mémoire.
Il convient de toujours tester le retour d’une allocation (Allouer et malloc) car
la documentation dit que le retour peut être NULL si le système ne dispose plus
de mémoire suffisante.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.4 Création d’une liste d’un élément


La création d’une liste d’un élément demande d’allouer de la mémoire au
gestionnaire de mémoire.
Il convient de toujours tester le retour d’une allocation (Allouer et malloc) car
la documentation dit que le retour peut être NULL si le système ne dispose plus
de mémoire suffisante.
Si l’allocation a réussi, il n’y a plus qu’à affecter les champs de la structure
Cellule.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.4 Création d’une liste d’un élément


La création d’une liste d’un élément demande d’allouer de la mémoire au
gestionnaire de mémoire.
Il convient de toujours tester le retour d’une allocation (Allouer et malloc) car
la documentation dit que le retour peut être NULL si le système ne dispose plus
de mémoire suffisante.
Si l’allocation a réussi, il n’y a plus qu’à affecter les champs de la structure
Cellule.

Exemple : Langage algorithmique


Fonction Creation (donnee : reel) : Cellule
Var *Element : Cellule
Debut
Allouer(Element)
Si (Element<>NULL) Alors
Element->donnee ← donnee
Element->suivant ← NULL
FinSi
Retourner(Element)
Fin

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

4.4 Création d’une liste d’un élément


La création d’une liste d’un élément demande d’allouer de la mémoire au
gestionnaire de mémoire.
Il convient de toujours tester le retour d’une allocation (Allouer et malloc) car
la documentation dit que le retour peut être NULL si le système ne dispose plus
de mémoire suffisante.
Si l’allocation a réussi, il n’y a plus qu’à affecter les champs de la structure
Cellule.

Exemple : Langage algorithmique Exemple : Langage C


Fonction Creation (donnee : reel) : Cellule Cellule* Creation (float donnee)
Var *Element : Cellule {
Debut Cellule* Element = NULL ;
Allouer(Element) Element=(Cellule*) malloc
Si (Element<>NULL) Alors (sizeof(Cellule)) ;
Element->donnee ← donnee if (Element !=NULL)
Element->suivant ← NULL {
FinSi Element->donnee=donnee ;
Retourner(Element) Element->suivant=NULL ;
Fin }
return Element ;
}
Tayeb BAHRAM Université Dr. Tahar Moulay de Saida
Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.1 Insertion en tête de liste

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.1 Insertion en tête de liste


Idée :

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.1 Insertion en tête de liste


Idée : Créer une fonction qui prend en paramètre une liste et une donnée, et
ajoute la donnée en tête de liste.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.1 Insertion en tête de liste


Idée : Créer une fonction qui prend en paramètre une liste et une donnée, et
ajoute la donnée en tête de liste.
La fonction renvoie la nouvelle adresse de la tête de liste.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.1 Insertion en tête de liste


Idée : Créer une fonction qui prend en paramètre une liste et une donnée, et
ajoute la donnée en tête de liste.
La fonction renvoie la nouvelle adresse de la tête de liste.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.1 Insertion en tête de liste


Idée : Créer une fonction qui prend en paramètre une liste et une donnée, et
ajoute la donnée en tête de liste.
La fonction renvoie la nouvelle adresse de la tête de liste.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.1 Insertion en tête de liste


Idée : Créer une fonction qui prend en paramètre une liste et une donnée, et
ajoute la donnée en tête de liste.
La fonction renvoie la nouvelle adresse de la tête de liste.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.1 Insertion en tête de liste


Idée : Créer une fonction qui prend en paramètre une liste et une donnée, et
ajoute la donnée en tête de liste.
La fonction renvoie la nouvelle adresse de la tête de liste.

Exemple : Langage algorithmique


Fonction InsertionEnTete (ancienneL : Cellule, donnee :
TypeDonnee) : Cellule
Var *nouvelleL : Cellule
Debut
// Creation d’une nouvelle cellule
Allouer(nouvelleL)
Si (nouvelleL<>NULL) Alors
nouvelleL->donnee ← donnee
nouvelleL->suivant ← ancienneL
FinSi
Retourner(nouvelleL)
Fin
Tayeb BAHRAM Université Dr. Tahar Moulay de Saida
Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.1 Insertion en tête de liste


Idée : Créer une fonction qui prend en paramètre une liste et une donnée, et
ajoute la donnée en tête de liste.
La fonction renvoie la nouvelle adresse de la tête de liste.

Exemple : Langage algorithmique Exemple : Langage C


Fonction InsertionEnTete (ancienneL : Cellule, donnee : Cellule* InsertionEnTete (Cellule* ancienneL,
TypeDonnee) : Cellule TypeDonnee donnee)
Var *nouvelleL : Cellule {
Debut Cellule* nouvelleL = NULL ;
// Creation d’une nouvelle cellule nouvelleL=(Cellule*) malloc (sizeof(Cellule)) ;
Allouer(nouvelleL) if (nouvelleL !=NULL)
Si (nouvelleL<>NULL) Alors {
nouvelleL->donnee ← donnee nouvelleL->donnee=donnee ;
nouvelleL->suivant ← ancienneL nouvelleL->suivant=ancienneL ;
FinSi }
Retourner(nouvelleL) return nouvelleL ;
Fin }
Tayeb BAHRAM Université Dr. Tahar Moulay de Saida
Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.2 Calcul de la longueur d’une liste chaînée

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.2 Calcul de la longueur d’une liste chaînée


Principe : On suit les pointeurs suivant jusqu’à rencontrer NULL et on compte le
nombre de cellules rencontrées.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.2 Calcul de la longueur d’une liste chaînée


Principe : On suit les pointeurs suivant jusqu’à rencontrer NULL et on compte le
nombre de cellules rencontrées.
Exemple : Langage algorithmique
Fonction CLL (Var tete : Cellue) : entier
Var i : entier
*p : Cellule
Debut
p ← tete
i ←0
TantQue (p <> NULL) Faire
i ←i +1
p ← p->suivant
FinTantQue
Retourner (i)
Fin

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.2 Calcul de la longueur d’une liste chaînée


Principe : On suit les pointeurs suivant jusqu’à rencontrer NULL et on compte le
nombre de cellules rencontrées.
Exemple : Langage algorithmique Exemple : Langage C
Fonction CLL (Var tete : Cellue) : entier int CLL (Cellule* tete)
Var i : entier {
*p : Cellule int i = 0 ;
Debut Cellule *p = tete ;
p ← tete while (p! = NULL)
i ←0 {
TantQue (p <> NULL) Faire i++ ;
i ←i +1 p=p->suivant ;
p ← p->suivant }
FinTantQue return i ;
Retourner (i) }
Fin

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.2 Calcul de la longueur d’une liste chaînée


Principe : On suit les pointeurs suivant jusqu’à rencontrer NULL et on compte le
nombre de cellules rencontrées.
Exemple : Langage algorithmique Exemple : Langage C
Fonction CLL (Var tete : Cellue) : entier int CLL (Cellule* tete)
Var i : entier {
*p : Cellule int i = 0 ;
Debut Cellule *p = tete ;
p ← tete while (p! = NULL)
i ←0 {
TantQue (p <> NULL) Faire i++ ;
i ←i +1 p=p->suivant ;
p ← p->suivant }
FinTantQue return i ;
Retourner (i) }
Fin

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.2 Calcul de la longueur d’une liste chaînée


Principe : On suit les pointeurs suivant jusqu’à rencontrer NULL et on compte le
nombre de cellules rencontrées.
Exemple : Langage algorithmique Exemple : Langage C
Fonction CLL (Var tete : Cellue) : entier int CLL (Cellule* tete)
Var i : entier {
*p : Cellule int i = 0 ;
Debut Cellule *p = tete ;
p ← tete while (p! = NULL)
i ←0 {
TantQue (p <> NULL) Faire i++ ;
i ←i +1 p=p->suivant ;
p ← p->suivant }
FinTantQue return i ;
Retourner (i) }
Fin

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.2 Calcul de la longueur d’une liste chaînée


Principe : On suit les pointeurs suivant jusqu’à rencontrer NULL et on compte le
nombre de cellules rencontrées.
Exemple : Langage algorithmique Exemple : Langage C
Fonction CLL (Var tete : Cellue) : entier int CLL (Cellule* tete)
Var i : entier {
*p : Cellule int i = 0 ;
Debut Cellule *p = tete ;
p ← tete while (p! = NULL)
i ←0 {
TantQue (p <> NULL) Faire i++ ;
i ←i +1 p=p->suivant ;
p ← p->suivant }
FinTantQue return i ;
Retourner (i) }
Fin

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.2 Calcul de la longueur d’une liste chaînée


Principe : On suit les pointeurs suivant jusqu’à rencontrer NULL et on compte le
nombre de cellules rencontrées.
Exemple : Langage algorithmique Exemple : Langage C
Fonction CLL (Var tete : Cellue) : entier int CLL (Cellule* tete)
Var i : entier {
*p : Cellule int i = 0 ;
Debut Cellule *p = tete ;
p ← tete while (p! = NULL)
i ←0 {
TantQue (p <> NULL) Faire i++ ;
i ←i +1 p=p->suivant ;
p ← p->suivant }
FinTantQue return i ;
Retourner (i) }
Fin

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.2 Calcul de la longueur d’une liste chaînée


Principe : On suit les pointeurs suivant jusqu’à rencontrer NULL et on compte le
nombre de cellules rencontrées.
Exemple : Langage algorithmique Exemple : Langage C
Fonction CLL (Var tete : Cellue) : entier int CLL (Cellule* tete)
Var i : entier {
*p : Cellule int i = 0 ;
Debut Cellule *p = tete ;
p ← tete while (p! = NULL)
i ←0 {
TantQue (p <> NULL) Faire i++ ;
i ←i +1 p=p->suivant ;
p ← p->suivant }
FinTantQue return i ;
Retourner (i) }
Fin

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.2 Calcul de la longueur d’une liste chaînée


Principe : On suit les pointeurs suivant jusqu’à rencontrer NULL et on compte le
nombre de cellules rencontrées.
Exemple : Langage algorithmique Exemple : Langage C
Fonction CLL (Var tete : Cellue) : entier int CLL (Cellule* tete)
Var i : entier {
*p : Cellule int i = 0 ;
Debut Cellule *p = tete ;
p ← tete while (p! = NULL)
i ←0 {
TantQue (p <> NULL) Faire i++ ;
i ←i +1 p=p->suivant ;
p ← p->suivant }
FinTantQue return i ;
Retourner (i) }
Fin

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.3 Construction d’une liste chaînée

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.3 Construction d’une liste chaînée


Les listes chaînées se construisent par des insertions successives.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.3 Construction d’une liste chaînée


Les listes chaînées se construisent par des insertions successives.
Avec des insertions en tête de la liste, la liste obtenue est classée à l’envers, le
dernier élément saisi étant le premier élément de la liste.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.3 Construction d’une liste chaînée


Les listes chaînées se construisent par des insertions successives.
Avec des insertions en tête de la liste, la liste obtenue est classée à l’envers, le
dernier élément saisi étant le premier élément de la liste.

5.4 Insertion en queue de liste

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.3 Construction d’une liste chaînée


Les listes chaînées se construisent par des insertions successives.
Avec des insertions en tête de la liste, la liste obtenue est classée à l’envers, le
dernier élément saisi étant le premier élément de la liste.

5.4 Insertion en queue de liste


L’ajout d’une cellule en queue de liste est un peu compliquée que l’insertion en
tête de la liste.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.3 Construction d’une liste chaînée


Les listes chaînées se construisent par des insertions successives.
Avec des insertions en tête de la liste, la liste obtenue est classée à l’envers, le
dernier élément saisi étant le premier élément de la liste.

5.4 Insertion en queue de liste


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

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.3 Construction d’une liste chaînée


Les listes chaînées se construisent par des insertions successives.
Avec des insertions en tête de la liste, la liste obtenue est classée à l’envers, le
dernier élément saisi étant le premier élément de la liste.

5.4 Insertion en queue de liste


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

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.3 Construction d’une liste chaînée


Les listes chaînées se construisent par des insertions successives.
Avec des insertions en tête de la liste, la liste obtenue est classée à l’envers, le
dernier élément saisi étant le premier élément de la liste.

5.4 Insertion en queue de liste


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

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.3 Construction d’une liste chaînée


Les listes chaînées se construisent par des insertions successives.
Avec des insertions en tête de la liste, la liste obtenue est classée à l’envers, le
dernier élément saisi étant le premier élément de la liste.

5.4 Insertion en queue de liste


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

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.4 Supprimer le premier élément d’une liste chaînée

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.4 Supprimer le premier élément d’une liste chaînée


Il y a deux actions, dans cet ordre, à réaliser :

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.4 Supprimer le premier élément d’une liste chaînée


Il y a deux actions, dans cet ordre, à réaliser :
1 faire pointer la tête de liste sur le deuxième élément de la liste,

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.4 Supprimer le premier élément d’une liste chaînée


Il y a deux actions, dans cet ordre, à réaliser :
1 faire pointer la tête de liste sur le deuxième élément de la liste,
2 libérer l’espace mémoire occupé par l’élément supprimé.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.4 Supprimer le premier élément d’une liste chaînée


Il y a deux actions, dans cet ordre, à réaliser :
1 faire pointer la tête de liste sur le deuxième élément de la liste,
2 libérer l’espace mémoire occupé par l’élément supprimé.

Il est nécessaire de déclarer un pointeur local qui va pointer sur l’élément à


supprimer, et permettre de libérer l’espace qu’il occupait.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.4 Supprimer le premier élément d’une liste chaînée


Il y a deux actions, dans cet ordre, à réaliser :
1 faire pointer la tête de liste sur le deuxième élément de la liste,
2 libérer l’espace mémoire occupé par l’élément supprimé.

Il est nécessaire de déclarer un pointeur local qui va pointer sur l’élément à


supprimer, et permettre de libérer l’espace qu’il occupait.
Exemple : Langage algorithmique
Procedure SupprimerPremierElement (Var tete : Cellue)
Var p* : Cellule
Debut
Si (tete <> NULL) alors
p ← tete
tete ← p->suivant
Liberer(p)
Sinon
Ecrire("La liste est vide")
FinSi
Retourner (i)
Fin

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.4 Supprimer le premier élément d’une liste chaînée


Il y a deux actions, dans cet ordre, à réaliser :
1 faire pointer la tête de liste sur le deuxième élément de la liste,
2 libérer l’espace mémoire occupé par l’élément supprimé.

Il est nécessaire de déclarer un pointeur local qui va pointer sur l’élément à


supprimer, et permettre de libérer l’espace qu’il occupait.
Exemple : Langage algorithmique Exemple : Langage C
Procedure SupprimerPremierElement (Var tete : Cellue) void SupprimerPremierElement (Cellule* tete)
Var p* : Cellule {
Debut if (tete! = NULL)
Si (tete <> NULL) alors {
p ← tete // pointeur sur l’élément à supprimer
tete ← p->suivant Cellule *p = tete ;
Liberer(p) tete = p->suivant ;
Sinon free(p) ;
Ecrire("La liste est vide") p = NULL ;
FinSi }
Retourner (i) }
Fin

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.5 Supprimer d’une liste chaînée un élément portant une valeur


donnée

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.5 Supprimer d’une liste chaînée un élément portant une valeur


donnée
Il faut :

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.5 Supprimer d’une liste chaînée un élément portant une valeur


donnée
Il faut :
1 traiter à part la suppression du premier élément car il faut modifier le
pointeur de tête,

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.5 Supprimer d’une liste chaînée un élément portant une valeur


donnée
Il faut :
1 traiter à part la suppression du premier élément car il faut modifier le
pointeur de tête,
2 trouver l’adresse P de l’élément à supprimer,

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.5 Supprimer d’une liste chaînée un élément portant une valeur


donnée
Il faut :
1 traiter à part la suppression du premier élément car il faut modifier le
pointeur de tête,
2 trouver l’adresse P de l’élément à supprimer,
3 sauvegarder l’adresse Prec de l’élément précédant l’élément pointé par P
pour connaître l’adresse de l’élément précédant l’élément à supprimer,
puis faire pointer l’élément précédent sur l’élément suivant l’élément à
supprimer,

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.5 Supprimer d’une liste chaînée un élément portant une valeur


donnée
Il faut :
1 traiter à part la suppression du premier élément car il faut modifier le
pointeur de tête,
2 trouver l’adresse P de l’élément à supprimer,
3 sauvegarder l’adresse Prec de l’élément précédant l’élément pointé par P
pour connaître l’adresse de l’élément précédant l’élément à supprimer,
puis faire pointer l’élément précédent sur l’élément suivant l’élément à
supprimer,
4 Libérer l’espace mémoire occupé par l’élément supprimé.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.5 Supprimer d’une liste chaînée un élément portant une valeur


donnée
Il faut :
1 traiter à part la suppression du premier élément car il faut modifier le
pointeur de tête,
2 trouver l’adresse P de l’élément à supprimer,
3 sauvegarder l’adresse Prec de l’élément précédant l’élément pointé par P
pour connaître l’adresse de l’élément précédant l’élément à supprimer,
puis faire pointer l’élément précédent sur l’élément suivant l’élément à
supprimer,
4 Libérer l’espace mémoire occupé par l’élément supprimé.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

5.5 Supprimer d’une liste chaînée un élément portant une valeur


donnée
Il faut :
1 traiter à part la suppression du premier élément car il faut modifier le
pointeur de tête,
2 trouver l’adresse P de l’élément à supprimer,
3 sauvegarder l’adresse Prec de l’élément précédant l’élément pointé par P
pour connaître l’adresse de l’élément précédant l’élément à supprimer,
puis faire pointer l’élément précédent sur l’élément suivant l’élément à
supprimer,
4 Libérer l’espace mémoire occupé par l’élément supprimé.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

6.1 Qu’est-ce qu’une liste doublement chaînée ?

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

6.1 Qu’est-ce qu’une liste doublement chaînée ?


Liste doublement chaînée
Une liste doublement chaînée est une liste chaînée, dans laquelle on peut accéder à
l’élément prédécesseur.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

6.1 Qu’est-ce qu’une liste doublement chaînée ?


Liste doublement chaînée
Une liste doublement chaînée est une liste chaînée, dans laquelle on peut accéder à
l’élément prédécesseur.

Une cellule est une structure qui comporte trois champs :

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

6.1 Qu’est-ce qu’une liste doublement chaînée ?


Liste doublement chaînée
Une liste doublement chaînée est une liste chaînée, dans laquelle on peut accéder à
l’élément prédécesseur.

Une cellule est une structure qui comporte trois champs :


1 le champ information : il contient des informations sur l’élément
représenté par la cellule.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

6.1 Qu’est-ce qu’une liste doublement chaînée ?


Liste doublement chaînée
Une liste doublement chaînée est une liste chaînée, dans laquelle on peut accéder à
l’élément prédécesseur.

Une cellule est une structure qui comporte trois champs :


1 le champ information : il contient des informations sur l’élément
représenté par la cellule.
2 le champ suivant : il représente un pointeur qui contient l’adresse de la
cellule suivante.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

6.1 Qu’est-ce qu’une liste doublement chaînée ?


Liste doublement chaînée
Une liste doublement chaînée est une liste chaînée, dans laquelle on peut accéder à
l’élément prédécesseur.

Une cellule est une structure qui comporte trois champs :


1 le champ information : il contient des informations sur l’élément
représenté par la cellule.
2 le champ suivant : il représente un pointeur qui contient l’adresse de la
cellule suivante.
3 le champ précédent : il représente un pointeur qui contient l’adresse de la
cellule précédente.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

6.1 Qu’est-ce qu’une liste doublement chaînée ?


Liste doublement chaînée
Une liste doublement chaînée est une liste chaînée, dans laquelle on peut accéder à
l’élément prédécesseur.

Une cellule est une structure qui comporte trois champs :


1 le champ information : il contient des informations sur l’élément
représenté par la cellule.
2 le champ suivant : il représente un pointeur qui contient l’adresse de la
cellule suivante.
3 le champ précédent : il représente un pointeur qui contient l’adresse de la
cellule précédente.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

6.1 Qu’est-ce qu’une liste doublement chaînée ?


Liste doublement chaînée
Une liste doublement chaînée est une liste chaînée, dans laquelle on peut accéder à
l’élément prédécesseur.

Une cellule est une structure qui comporte trois champs :


1 le champ information : il contient des informations sur l’élément
représenté par la cellule.
2 le champ suivant : il représente un pointeur qui contient l’adresse de la
cellule suivante.
3 le champ précédent : il représente un pointeur qui contient l’adresse de la
cellule précédente.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

7.1 Les piles

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

7.1 Les piles


pile
Une pile est une structure de données dans laquelle on peut ajouter et supprimer des
éléments suivant la regèle du dernier arrivé premier sorti ou encore LIFO (Last In First
Out)

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

7.1 Les piles


pile
Une pile est une structure de données dans laquelle on peut ajouter et supprimer des
éléments suivant la regèle du dernier arrivé premier sorti ou encore LIFO (Last In First
Out)

Une pile peut être implémentée par un tableau ou par une liste chaînée. Dans
les deux cas, il est commode de réaliser sur les piles des opérations de base,
appelées primitives de gestion des piles.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

7.1 Les piles


pile
Une pile est une structure de données dans laquelle on peut ajouter et supprimer des
éléments suivant la regèle du dernier arrivé premier sorti ou encore LIFO (Last In First
Out)

Une pile peut être implémentée par un tableau ou par une liste chaînée. Dans
les deux cas, il est commode de réaliser sur les piles des opérations de base,
appelées primitives de gestion des piles.
Les primitives de gestion des piles sont les suivantes :

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

7.1 Les piles


pile
Une pile est une structure de données dans laquelle on peut ajouter et supprimer des
éléments suivant la regèle du dernier arrivé premier sorti ou encore LIFO (Last In First
Out)

Une pile peut être implémentée par un tableau ou par une liste chaînée. Dans
les deux cas, il est commode de réaliser sur les piles des opérations de base,
appelées primitives de gestion des piles.
Les primitives de gestion des piles sont les suivantes :
1 Initialiser : cette fonction crée une pile vide.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

7.1 Les piles


pile
Une pile est une structure de données dans laquelle on peut ajouter et supprimer des
éléments suivant la regèle du dernier arrivé premier sorti ou encore LIFO (Last In First
Out)

Une pile peut être implémentée par un tableau ou par une liste chaînée. Dans
les deux cas, il est commode de réaliser sur les piles des opérations de base,
appelées primitives de gestion des piles.
Les primitives de gestion des piles sont les suivantes :
1 Initialiser : cette fonction crée une pile vide.
2 EstVide : renvoie 1 si la pile est vide, sinon 0.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

7.1 Les piles


pile
Une pile est une structure de données dans laquelle on peut ajouter et supprimer des
éléments suivant la regèle du dernier arrivé premier sorti ou encore LIFO (Last In First
Out)

Une pile peut être implémentée par un tableau ou par une liste chaînée. Dans
les deux cas, il est commode de réaliser sur les piles des opérations de base,
appelées primitives de gestion des piles.
Les primitives de gestion des piles sont les suivantes :
1 Initialiser : cette fonction crée une pile vide.
2 EstVide : renvoie 1 si la pile est vide, sinon 0.
3 EstPleine : renvoie 1 si la pile est pleine, 0 sinon.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

7.1 Les piles


pile
Une pile est une structure de données dans laquelle on peut ajouter et supprimer des
éléments suivant la regèle du dernier arrivé premier sorti ou encore LIFO (Last In First
Out)

Une pile peut être implémentée par un tableau ou par une liste chaînée. Dans
les deux cas, il est commode de réaliser sur les piles des opérations de base,
appelées primitives de gestion des piles.
Les primitives de gestion des piles sont les suivantes :
1 Initialiser : cette fonction crée une pile vide.
2 EstVide : renvoie 1 si la pile est vide, sinon 0.
3 EstPleine : renvoie 1 si la pile est pleine, 0 sinon.
4 AccederSommet : cette fonction permet l’accès à l’information contenue
dans le sommet de la pile.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

7.1 Les piles


pile
Une pile est une structure de données dans laquelle on peut ajouter et supprimer des
éléments suivant la regèle du dernier arrivé premier sorti ou encore LIFO (Last In First
Out)

Une pile peut être implémentée par un tableau ou par une liste chaînée. Dans
les deux cas, il est commode de réaliser sur les piles des opérations de base,
appelées primitives de gestion des piles.
Les primitives de gestion des piles sont les suivantes :
1 Initialiser : cette fonction crée une pile vide.
2 EstVide : renvoie 1 si la pile est vide, sinon 0.
3 EstPleine : renvoie 1 si la pile est pleine, 0 sinon.
4 AccederSommet : cette fonction permet l’accès à l’information contenue
dans le sommet de la pile.
5 Empiler : cette fonction permet d’ajouter un élément au sommet de la
pile.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

7.1 Les piles


pile
Une pile est une structure de données dans laquelle on peut ajouter et supprimer des
éléments suivant la regèle du dernier arrivé premier sorti ou encore LIFO (Last In First
Out)

Une pile peut être implémentée par un tableau ou par une liste chaînée. Dans
les deux cas, il est commode de réaliser sur les piles des opérations de base,
appelées primitives de gestion des piles.
Les primitives de gestion des piles sont les suivantes :
1 Initialiser : cette fonction crée une pile vide.
2 EstVide : renvoie 1 si la pile est vide, sinon 0.
3 EstPleine : renvoie 1 si la pile est pleine, 0 sinon.
4 AccederSommet : cette fonction permet l’accès à l’information contenue
dans le sommet de la pile.
5 Empiler : cette fonction permet d’ajouter un élément au sommet de la
pile.
6 Depiler : cette fonction supprime le sommet de la pile.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

7.1 Les piles


pile
Une pile est une structure de données dans laquelle on peut ajouter et supprimer des
éléments suivant la regèle du dernier arrivé premier sorti ou encore LIFO (Last In First
Out)

Une pile peut être implémentée par un tableau ou par une liste chaînée. Dans
les deux cas, il est commode de réaliser sur les piles des opérations de base,
appelées primitives de gestion des piles.
Les primitives de gestion des piles sont les suivantes :
1 Initialiser : cette fonction crée une pile vide.
2 EstVide : renvoie 1 si la pile est vide, sinon 0.
3 EstPleine : renvoie 1 si la pile est pleine, 0 sinon.
4 AccederSommet : cette fonction permet l’accès à l’information contenue
dans le sommet de la pile.
5 Empiler : cette fonction permet d’ajouter un élément au sommet de la
pile.
6 Depiler : cette fonction supprime le sommet de la pile.
7 Vider : cette fonction vide la pile.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

7.1 Les piles


pile
Une pile est une structure de données dans laquelle on peut ajouter et supprimer des
éléments suivant la regèle du dernier arrivé premier sorti ou encore LIFO (Last In First
Out)

Une pile peut être implémentée par un tableau ou par une liste chaînée. Dans
les deux cas, il est commode de réaliser sur les piles des opérations de base,
appelées primitives de gestion des piles.
Les primitives de gestion des piles sont les suivantes :
1 Initialiser : cette fonction crée une pile vide.
2 EstVide : renvoie 1 si la pile est vide, sinon 0.
3 EstPleine : renvoie 1 si la pile est pleine, 0 sinon.
4 AccederSommet : cette fonction permet l’accès à l’information contenue
dans le sommet de la pile.
5 Empiler : cette fonction permet d’ajouter un élément au sommet de la
pile.
6 Depiler : cette fonction supprime le sommet de la pile.
7 Vider : cette fonction vide la pile.
8 Detruire : cette fonction permet de détruire la pile.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

7.2 Les files

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

7.2 Les files


file
Une file est une structure de données dans laquelle on peut ajouter et supprimer des
éléments suivant la regèle du premier arrivé premier sorti ou encore FIFO (First In
First Out)

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

7.2 Les files


file
Une file est une structure de données dans laquelle on peut ajouter et supprimer des
éléments suivant la regèle du premier arrivé premier sorti ou encore FIFO (First In
First Out)

Une file peut être implémentée par une liste chaînée, ou par un tableau avec une
gestion circulaire.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

7.2 Les files


file
Une file est une structure de données dans laquelle on peut ajouter et supprimer des
éléments suivant la regèle du premier arrivé premier sorti ou encore FIFO (First In
First Out)

Une file peut être implémentée par une liste chaînée, ou par un tableau avec une
gestion circulaire.
Comme dans le cas des piles, la gestion par tableaux présente l’inconvénient que
la la file a une capacité limitée, contrairement à la gestion par listes chaînées.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

7.2 Les files


file
Une file est une structure de données dans laquelle on peut ajouter et supprimer des
éléments suivant la regèle du premier arrivé premier sorti ou encore FIFO (First In
First Out)

Une file peut être implémentée par une liste chaînée, ou par un tableau avec une
gestion circulaire.
Comme dans le cas des piles, la gestion par tableaux présente l’inconvénient que
la la file a une capacité limitée, contrairement à la gestion par listes chaînées.
Comme le cas des piles, on gère les files à l’aide des primitives.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

7.2 Les files


file
Une file est une structure de données dans laquelle on peut ajouter et supprimer des
éléments suivant la regèle du premier arrivé premier sorti ou encore FIFO (First In
First Out)

Une file peut être implémentée par une liste chaînée, ou par un tableau avec une
gestion circulaire.
Comme dans le cas des piles, la gestion par tableaux présente l’inconvénient que
la la file a une capacité limitée, contrairement à la gestion par listes chaînées.
Comme le cas des piles, on gère les files à l’aide des primitives.
Les primitives de gestion des files sont les suivantes :

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

7.2 Les files


file
Une file est une structure de données dans laquelle on peut ajouter et supprimer des
éléments suivant la regèle du premier arrivé premier sorti ou encore FIFO (First In
First Out)

Une file peut être implémentée par une liste chaînée, ou par un tableau avec une
gestion circulaire.
Comme dans le cas des piles, la gestion par tableaux présente l’inconvénient que
la la file a une capacité limitée, contrairement à la gestion par listes chaînées.
Comme le cas des piles, on gère les files à l’aide des primitives.
Les primitives de gestion des files sont les suivantes :
1 Initialiser : cette fonction crée une file vide.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

7.2 Les files


file
Une file est une structure de données dans laquelle on peut ajouter et supprimer des
éléments suivant la regèle du premier arrivé premier sorti ou encore FIFO (First In
First Out)

Une file peut être implémentée par une liste chaînée, ou par un tableau avec une
gestion circulaire.
Comme dans le cas des piles, la gestion par tableaux présente l’inconvénient que
la la file a une capacité limitée, contrairement à la gestion par listes chaînées.
Comme le cas des piles, on gère les files à l’aide des primitives.
Les primitives de gestion des files sont les suivantes :
1 Initialiser : cette fonction crée une file vide.
2 EstVide : renvoie 1 si la file est vide, sinon 0.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

7.2 Les files


file
Une file est une structure de données dans laquelle on peut ajouter et supprimer des
éléments suivant la regèle du premier arrivé premier sorti ou encore FIFO (First In
First Out)

Une file peut être implémentée par une liste chaînée, ou par un tableau avec une
gestion circulaire.
Comme dans le cas des piles, la gestion par tableaux présente l’inconvénient que
la la file a une capacité limitée, contrairement à la gestion par listes chaînées.
Comme le cas des piles, on gère les files à l’aide des primitives.
Les primitives de gestion des files sont les suivantes :
1 Initialiser : cette fonction crée une file vide.
2 EstVide : renvoie 1 si la file est vide, sinon 0.
3 EstPleine : renvoie 1 si la file est pleine, 0 sinon.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

7.2 Les files


file
Une file est une structure de données dans laquelle on peut ajouter et supprimer des
éléments suivant la regèle du premier arrivé premier sorti ou encore FIFO (First In
First Out)

Une file peut être implémentée par une liste chaînée, ou par un tableau avec une
gestion circulaire.
Comme dans le cas des piles, la gestion par tableaux présente l’inconvénient que
la la file a une capacité limitée, contrairement à la gestion par listes chaînées.
Comme le cas des piles, on gère les files à l’aide des primitives.
Les primitives de gestion des files sont les suivantes :
1 Initialiser : cette fonction crée une file vide.
2 EstVide : renvoie 1 si la file est vide, sinon 0.
3 EstPleine : renvoie 1 si la file est pleine, 0 sinon.
4 AccederTete : cette fonction permet l’accès à l’information contenue dans
la tête de la file.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

7.2 Les files


file
Une file est une structure de données dans laquelle on peut ajouter et supprimer des
éléments suivant la regèle du premier arrivé premier sorti ou encore FIFO (First In
First Out)

Une file peut être implémentée par une liste chaînée, ou par un tableau avec une
gestion circulaire.
Comme dans le cas des piles, la gestion par tableaux présente l’inconvénient que
la la file a une capacité limitée, contrairement à la gestion par listes chaînées.
Comme le cas des piles, on gère les files à l’aide des primitives.
Les primitives de gestion des files sont les suivantes :
1 Initialiser : cette fonction crée une file vide.
2 EstVide : renvoie 1 si la file est vide, sinon 0.
3 EstPleine : renvoie 1 si la file est pleine, 0 sinon.
4 AccederTete : cette fonction permet l’accès à l’information contenue dans
la tête de la file.
5 Enfiler : cette fonction permet d’ajouter un élément en queue de la file.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

7.2 Les files


file
Une file est une structure de données dans laquelle on peut ajouter et supprimer des
éléments suivant la regèle du premier arrivé premier sorti ou encore FIFO (First In
First Out)

Une file peut être implémentée par une liste chaînée, ou par un tableau avec une
gestion circulaire.
Comme dans le cas des piles, la gestion par tableaux présente l’inconvénient que
la la file a une capacité limitée, contrairement à la gestion par listes chaînées.
Comme le cas des piles, on gère les files à l’aide des primitives.
Les primitives de gestion des files sont les suivantes :
1 Initialiser : cette fonction crée une file vide.
2 EstVide : renvoie 1 si la file est vide, sinon 0.
3 EstPleine : renvoie 1 si la file est pleine, 0 sinon.
4 AccederTete : cette fonction permet l’accès à l’information contenue dans
la tête de la file.
5 Enfiler : cette fonction permet d’ajouter un élément en queue de la file.
6 Defiler : cette fonction supprime la tête de la file.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

7.2 Les files


file
Une file est une structure de données dans laquelle on peut ajouter et supprimer des
éléments suivant la regèle du premier arrivé premier sorti ou encore FIFO (First In
First Out)

Une file peut être implémentée par une liste chaînée, ou par un tableau avec une
gestion circulaire.
Comme dans le cas des piles, la gestion par tableaux présente l’inconvénient que
la la file a une capacité limitée, contrairement à la gestion par listes chaînées.
Comme le cas des piles, on gère les files à l’aide des primitives.
Les primitives de gestion des files sont les suivantes :
1 Initialiser : cette fonction crée une file vide.
2 EstVide : renvoie 1 si la file est vide, sinon 0.
3 EstPleine : renvoie 1 si la file est pleine, 0 sinon.
4 AccederTete : cette fonction permet l’accès à l’information contenue dans
la tête de la file.
5 Enfiler : cette fonction permet d’ajouter un élément en queue de la file.
6 Defiler : cette fonction supprime la tête de la file.
7 Vider : cette fonction vide la file.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées
Introduction Les pointeurs Gestion dynamique de la mémoire Les listes chaînées Opérations sur les listes chaînées Les listes doub

7.2 Les files


file
Une file est une structure de données dans laquelle on peut ajouter et supprimer des
éléments suivant la regèle du premier arrivé premier sorti ou encore FIFO (First In
First Out)

Une file peut être implémentée par une liste chaînée, ou par un tableau avec une
gestion circulaire.
Comme dans le cas des piles, la gestion par tableaux présente l’inconvénient que
la la file a une capacité limitée, contrairement à la gestion par listes chaînées.
Comme le cas des piles, on gère les files à l’aide des primitives.
Les primitives de gestion des files sont les suivantes :
1 Initialiser : cette fonction crée une file vide.
2 EstVide : renvoie 1 si la file est vide, sinon 0.
3 EstPleine : renvoie 1 si la file est pleine, 0 sinon.
4 AccederTete : cette fonction permet l’accès à l’information contenue dans
la tête de la file.
5 Enfiler : cette fonction permet d’ajouter un élément en queue de la file.
6 Defiler : cette fonction supprime la tête de la file.
7 Vider : cette fonction vide la file.
8 Detruire : cette fonction permet de détruire la file.

Tayeb BAHRAM Université Dr. Tahar Moulay de Saida


Les listes chaînées