SlideShare une entreprise Scribd logo
D´efinition d’une liste chaˆın´ee
Ajout d’un ´el´ement
suppression d’un ´el´ement
Autres op´erations sur les listes
Chapitre 5
Les listes simplement chaˆın´ees
Module 5: Algorithmique et programmation
Master Math´ematiques, Cryptologie et S´ecurit´e Informatique (MMCSI)
Texte
Texte
Texte
mlahby@gmail.com
22 novembre 2014
Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 1/ 16
D´efinition d’une liste chaˆın´ee
Ajout d’un ´el´ement
suppression d’un ´el´ement
Autres op´erations sur les listes
Plan
1 D´efinition d’une liste chaˆın´ee
2 Ajout d’un ´el´ement
Ajouter au debut : la fonction InsertDebut()
Ajouter `a la fin : la fonction InsertFin()
Ajout dans une liste tri´ee : la fonction InsertOrd()
3 suppression d’un ´el´ement
Supprimer au debut : la fonction SupprimerDebut()
Supprimer `a la fin : la fonction SupprimerFin()
Supprimer une valeur : la fonction SupprimerVal()
4 Autres op´erations sur les listes
Affichage d’une liste : la fonction AfficherListe()
Rechercher un ´el´ement : la fonction Rechercher()
Inverser une liste : la fonction InverserListe()
Trier une liste : la fonction TrierListe()
Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 2/ 16
D´efinition d’une liste chaˆın´ee
Ajout d’un ´el´ement
suppression d’un ´el´ement
Autres op´erations sur les listes
Introduction
Pour stocker des donn´ees en m´emoire, nous avons utilis´e des variables simples (type
int, double. . .), des tableaux et des structures personnalis´ees. Si vous souhaitez
stocker une s´erie de donn´ees, le plus simple est en g´en´eral d’utiliser des tableaux.
Toutefois, les tableaux se r´ev`elent parfois assez limit´es. Par exemple, si vous cr´eez un
tableau de 10 cases et que vous vous rendez compte plus tard dans votre programme
que vous avez besoin de plus d’espace, il sera impossible d’agrandir ce tableau. De
mˆeme, il n’est pas possible d’ins´erer une case au milieu du tableau.
Les mod`eles de donn´ees dynamiques (liste chaˆın´ee, pile, file...) repr´esentent une fa¸con
d’organiser les donn´ees en m´emoire de mani`ere beaucoup plus exible. Comme `a la
base le langage C ne propose pas ce syst`eme de stockage, nous allons devoir le cr´eer
nous-mˆemes de toutes pi`eces. Les mod`eles de donn´ees dynamiques Une structure
dynamique est une structure dont la taille peut varier au cours de l’ex´ecution du
programme , l’acc`es aux informations stock´ees d´epend de la structure. Ce type de
structure utilise des pointeurs, dans ce chapitre nous allons traiter un seul type de
structures dynamiques : liste chain´ee.
Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 3/ 16
D´efinition d’une liste chaˆın´ee
Ajout d’un ´el´ement
suppression d’un ´el´ement
Autres op´erations sur les listes
D´efinition
Une liste est une s´equence finie d’´el´ements ;
Les ´el´ements sont rep´er´es selon leur rang ;
Il existe une relation d’ordre sur le rang des ´el´ements : le rang du premier
´el´ement est 1, le rang du second est 2, . . .
L’ajout et la suppression d’un ´el´ement peut se faire `a n’importe quel rang valide
de la liste
Une liste chaˆın´ee est un moyen d’organiser une s´erie de donn´ees en m´emoire ;
Cela consiste `a assembler des structures en les liant entre elles `a l’aide de
pointeurs.
Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 4/ 16
D´efinition d’une liste chaˆın´ee
Ajout d’un ´el´ement
suppression d’un ´el´ement
Autres op´erations sur les listes
Listes : cellule
La cellule est la composante principale d’une liste ;
Une liste est un ensemble de cellules (´el´ements) chaˆın´ees entre elles `a l’aide de
liens ;
Une cellule est une structure qui comporte deux champs :
1 Le champ info : il contient des informations sur l’´el´ement repr´esent´e par la
cellule ;
2 Le champ suivant : il repr´esente un pointeur qui contient l’adresse de la
cellule suivante.
Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 5/ 16
D´efinition d’une liste chaˆın´ee
Ajout d’un ´el´ement
suppression d’un ´el´ement
Autres op´erations sur les listes
D´eclation d’une liste
Syntaxe pour d´efinifir le type liste
typedef struct cellule{
int info ; //le champ info peut avoir n’importe quel type
struct cellule *suiv ; //pointeur contenant l’adresse de la cellule suivante
}liste ;
D´eclaration d’une liste
Pour cr´eer une liste chaˆın´ee, il suffit de d´eclarer un pointeur qui
contient l’adresse de la premi`ere cellule :
liste *L ;
Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 6/ 16
D´efinition d’une liste chaˆın´ee
Ajout d’un ´el´ement
suppression d’un ´el´ement
Autres op´erations sur les listes
Ajouter au debut : la fonction InsertDebut()
Ajouter `a la fin : la fonction InsertFin()
Ajout dans une liste tri´ee : la fonction InsertOrd()
Prototype : InsertDebut(liste *L, int x)
D´efinition de la fonction
liste *InsertDebut(liste *L, int x)
{ liste *c ;
c=(liste*)malloc(1*sizeof(liste)) ;
if(c !=NULL)
{
c− > info = x;
c− > suiv = L;
L=c ;
return(c);
}
else
return(L) ;
}
Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 7/ 16
D´efinition d’une liste chaˆın´ee
Ajout d’un ´el´ement
suppression d’un ´el´ement
Autres op´erations sur les listes
Ajouter au debut : la fonction InsertDebut()
Ajouter `a la fin : la fonction InsertFin()
Ajout dans une liste tri´ee : la fonction InsertOrd()
Prototype : InsertFin(liste *L, int v)
D´efinition de la fonction
liste *InsertFin(liste *L, int x)
{ liste *c ;
c=(liste*)malloc(1*sizeof(liste)) ;
if(c !=NULL)
{ c− > info = x;
c− > suiv = NULL
}
if (L! = NULL) //liste n’est pa vide
//Chercher l’adresse de la derniere
{ P=L ;
while(P− > suiv! = NULL)
P = P− > suiv;
//brancher
P− > suiv = C;
return L ; }
else
L=C ;
return L ;
}
Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 8/ 16
D´efinition d’une liste chaˆın´ee
Ajout d’un ´el´ement
suppression d’un ´el´ement
Autres op´erations sur les listes
Ajouter au debut : la fonction InsertDebut()
Ajouter `a la fin : la fonction InsertFin()
Ajout dans une liste tri´ee : la fonction InsertOrd()
Prototype : InsertOrd(liste *L, int x)
Fonction it´erative
liste *InsertOrd(liste *L, int x)
{ liste *C,*P,*N ;
while(C! = NULL&&C− > info! = x)
{P = C;
C = C− > suiv; }
N = (liste∗)malloc(sizeof (liste));
N− > info = x;
if (P == NULL)
L = insertdebut(L, x);
else
{ P− > suiv = N;
N− > suiv = C;
}
return(L) ;
}
Fonction r´ecursive
liste *InsertOrdR(liste *L, int x)
{
if(L !=NULL)
if (x < L− > info)
return(InsertDebut(L, x));
else
return(InsertDebut(L− > info, InsertOrdR(L− >
suiv, x)));
else
return(InsertDebut(L, x));
}
Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 9/ 16
D´efinition d’une liste chaˆın´ee
Ajout d’un ´el´ement
suppression d’un ´el´ement
Autres op´erations sur les listes
Supprimer au debut : la fonction SupprimerDebut()
Supprimer `a la fin : la fonction SupprimerFin()
Supprimer une valeur : la fonction SupprimerVal()
Prototype :SupprimerDebut(liste *L)
D´efinition de la fonction
liste *SupprimerDebut(liste *L)
{ liste *p ; //pour lib´erer la cellule
qu’on va supprimer
if(L !=NULL)
{P = L;
L = L− > suiv;
free(p);
return(L);
}
else
return(NULL) ; // o`u return(L) ;
}
Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 10/ 16
D´efinition d’une liste chaˆın´ee
Ajout d’un ´el´ement
suppression d’un ´el´ement
Autres op´erations sur les listes
Supprimer au debut : la fonction SupprimerDebut()
Supprimer `a la fin : la fonction SupprimerFin()
Supprimer une valeur : la fonction SupprimerVal()
Prototype : SupprimerFin(liste *L)
D´efinition de la fonction
liste *SupprimerFin(liste *L)
{ liste *p,*c ;
p=NULL ; //pour m´emoriser l’adresse
if (L! = NULL) //liste n’est pa vide
{c = L; //pour parcourir la liste
while(c− > suiv! = NULL)
{p = c;//contient l’adress de l’avt dernier
c = c− > suiv; }
if (p == NULL)//L contient un seul ´el´ement
{L = L− > suiv;
free(c); }
else
{
P− > suiv = NULL;
free(c);
}
return(L);
}
Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 11/ 16
D´efinition d’une liste chaˆın´ee
Ajout d’un ´el´ement
suppression d’un ´el´ement
Autres op´erations sur les listes
Supprimer au debut : la fonction SupprimerDebut()
Supprimer `a la fin : la fonction SupprimerFin()
Supprimer une valeur : la fonction SupprimerVal()
Prototype : SupprimerVal(liste *L, int x)
D´efinition de la fonction
liste *SupprimerVal(liste *L, int x)
{ liste *C,*P ;
if(L !=NULL){
if (L− > info == x)
{C = L;
L = L− > suiv;
free(C); //liberer la cellule
}
else
{C = L;
while(C! = NULL&&C− > info! = x)
{P = C;
C = C− > suiv; }
if (C! = NULL)
{P− > suiv = C− > suiv;
free(C); }
} }
return(L) ;
}
Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 12/ 16
D´efinition d’une liste chaˆın´ee
Ajout d’un ´el´ement
suppression d’un ´el´ement
Autres op´erations sur les listes
Affichage d’une liste : la fonction AfficherListe()
Rechercher un ´el´ement : la fonction Rechercher()
Inverser une liste : la fonction InverserListe()
Trier une liste : la fonction TrierListe()
Prototype : AfficherListe(liste *L)
Fonction it´erative
void AfficherListeIt(liste *L)
{ liste *P ;
P=L ; //pour sauvegarder la tˆete de L
while(P! = NULL)
{
printf (”%d− > ”, P− > info);
P = P− > suiv;
}
printf(”NULL”) ;
}
Fonction r´ecursive
void AfficherListeRe(liste *L)
{
if (L! = NULL)
{
printf (”%d− > ”, L− > info);
AfficherListeRe(L− > suiv)
}
}
Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 13/ 16
D´efinition d’une liste chaˆın´ee
Ajout d’un ´el´ement
suppression d’un ´el´ement
Autres op´erations sur les listes
Affichage d’une liste : la fonction AfficherListe()
Rechercher un ´el´ement : la fonction Rechercher()
Inverser une liste : la fonction InverserListe()
Trier une liste : la fonction TrierListe()
Prototype : Rechercher(liste *L,int x)
Fonction it´erative
int RechercherIt(liste *L,int x)
{ liste *P ;
P=L ; //pour sauvegarder la tˆete de L
while(P! = NULL&&P− > info! = x))
{
P = P− > suiv;
}
if (P! = NULL)
return(1);
else
return(0);
}
Fonction r´ecursive
int RechercherRe(liste *L,int x)
{
if (L == NULL)
return(0);
if (L! = NULL&&L− > info == x)
return(1);
return(RechercherRe(L− > suiv, x));
}
Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 14/ 16
D´efinition d’une liste chaˆın´ee
Ajout d’un ´el´ement
suppression d’un ´el´ement
Autres op´erations sur les listes
Affichage d’une liste : la fonction AfficherListe()
Rechercher un ´el´ement : la fonction Rechercher()
Inverser une liste : la fonction InverserListe()
Trier une liste : la fonction TrierListe()
Prototype : InverserListe(liste *L, int x)
Fonction it´erative : on
construit une nouvelle liste
liste *InverserListeIt(liste *L)
{ liste *LI ;
LI=NULL ; //liste vide
while(L! = NULL)
{
LI = InsertDebut(LI, L− > info);
L = L− > suiv;
}
return(LI) ;
}
Fonction r´ecursive : on affiche
la liste sans constuire une
nouvelle liste
void InverserListeRe(liste *L)
{
if (L! = NULL)
{
AfficherListeRe(L− > suiv);
printf (”%d− > ”, L− > info);
}
}
Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 15/ 16
D´efinition d’une liste chaˆın´ee
Ajout d’un ´el´ement
suppression d’un ´el´ement
Autres op´erations sur les listes
Affichage d’une liste : la fonction AfficherListe()
Rechercher un ´el´ement : la fonction Rechercher()
Inverser une liste : la fonction InverserListe()
Trier une liste : la fonction TrierListe()
Prototype : TriSelection(liste *L)
Solution 1 : Boucle for
void TriSelection(liste *L)
{ liste *p,*q,*min ;
int aide ;
for(p = L; p− > suiv! = NULL; p = p− > suiv)
{min = p;
for(q = p− > suiv; q! = NULL; q = q− > suiv)
{
if (q− > info < min− > info)
min = q;
}
aide = p− > info;
p− > info = min− > info;
min− > info = aide;
}
}
Solution 2 : Boucle while
void TriSelection(liste *L)
{ liste *p,*q,*min ;
int aide ;
p=L ;
while(p− > suiv! = NULL)
{min = p;
q = p− > suiv;
while(q! = NULL)
{
if (q− > info < min− > info)
min = q;
q = q− > suiv;
}
aide = p− > info;
p− > info = min− > info;
min− > info = aide;
p = p− > suiv;
}
}
Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 16/ 16

Contenu connexe

Tendances

Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références
Aziz Darouichi
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El Hassani
Shellmates
 
Travaux Dirigés : Algorithmique et Structure de Données
Travaux Dirigés : Algorithmique et Structure de DonnéesTravaux Dirigés : Algorithmique et Structure de Données
Travaux Dirigés : Algorithmique et Structure de Données
Anass41
 
Cours : les arbres Prof. KHALIFA MANSOURI
Cours : les arbres Prof. KHALIFA MANSOURI Cours : les arbres Prof. KHALIFA MANSOURI
Cours : les arbres Prof. KHALIFA MANSOURI
Mansouri Khalifa
 
UML
UMLUML
TD4-UML-Correction
TD4-UML-CorrectionTD4-UML-Correction
TD4-UML-Correction
Lilia Sfaxi
 
Les listes en Python
Les listes en PythonLes listes en Python
Les listes en Python
ABDESSELAM ARROU
 
exercices base de données - sql
exercices  base de données - sql exercices  base de données - sql
exercices base de données - sql
Yassine Badri
 
Correction examen-java-avancé-1
Correction examen-java-avancé-1Correction examen-java-avancé-1
Correction examen-java-avancé-1
vangogue
 
PL/SQL:les curseurs
PL/SQL:les curseursPL/SQL:les curseurs
PL/SQL:les curseurs
Abdelouahed Abdou
 
Chapitre 4 récursivité
Chapitre 4 récursivitéChapitre 4 récursivité
Chapitre 4 récursivité
Sana Aroussi
 
Python avancé : Classe et objet
Python avancé : Classe et objetPython avancé : Classe et objet
Python avancé : Classe et objet
ECAM Brussels Engineering School
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
Abdoulaye Dieng
 
Algorithmique et Structures de Données II
Algorithmique et Structures de Données IIAlgorithmique et Structures de Données II
Algorithmique et Structures de Données II
Riadh Bouslimi
 
Fascicule tp programmation c
Fascicule tp programmation cFascicule tp programmation c
Fascicule tp programmation c
Missaoui Abdelbaki
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
Haytam EL YOUSSFI
 
Architecture des ordinateurs Elaboré par- ABIDA Mounir.ppt
Architecture des ordinateurs Elaboré par- ABIDA Mounir.pptArchitecture des ordinateurs Elaboré par- ABIDA Mounir.ppt
Architecture des ordinateurs Elaboré par- ABIDA Mounir.ppt
wafawafa52
 
Cours algo: Les pointeurs
Cours algo: Les pointeursCours algo: Les pointeurs
Cours algo: Les pointeurs
Sana REFAI
 
Corrige tp java
Corrige tp javaCorrige tp java
Corrige tp java
Maya Medjdoub
 
Cours des bases de données
Cours des bases de données Cours des bases de données
Cours des bases de données
yassine kchiri
 

Tendances (20)

Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références Chapitre4: Pointeurs et références
Chapitre4: Pointeurs et références
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El Hassani
 
Travaux Dirigés : Algorithmique et Structure de Données
Travaux Dirigés : Algorithmique et Structure de DonnéesTravaux Dirigés : Algorithmique et Structure de Données
Travaux Dirigés : Algorithmique et Structure de Données
 
Cours : les arbres Prof. KHALIFA MANSOURI
Cours : les arbres Prof. KHALIFA MANSOURI Cours : les arbres Prof. KHALIFA MANSOURI
Cours : les arbres Prof. KHALIFA MANSOURI
 
UML
UMLUML
UML
 
TD4-UML-Correction
TD4-UML-CorrectionTD4-UML-Correction
TD4-UML-Correction
 
Les listes en Python
Les listes en PythonLes listes en Python
Les listes en Python
 
exercices base de données - sql
exercices  base de données - sql exercices  base de données - sql
exercices base de données - sql
 
Correction examen-java-avancé-1
Correction examen-java-avancé-1Correction examen-java-avancé-1
Correction examen-java-avancé-1
 
PL/SQL:les curseurs
PL/SQL:les curseursPL/SQL:les curseurs
PL/SQL:les curseurs
 
Chapitre 4 récursivité
Chapitre 4 récursivitéChapitre 4 récursivité
Chapitre 4 récursivité
 
Python avancé : Classe et objet
Python avancé : Classe et objetPython avancé : Classe et objet
Python avancé : Classe et objet
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Algorithmique et Structures de Données II
Algorithmique et Structures de Données IIAlgorithmique et Structures de Données II
Algorithmique et Structures de Données II
 
Fascicule tp programmation c
Fascicule tp programmation cFascicule tp programmation c
Fascicule tp programmation c
 
Python For Data Science - French Course
Python For Data Science - French CoursePython For Data Science - French Course
Python For Data Science - French Course
 
Architecture des ordinateurs Elaboré par- ABIDA Mounir.ppt
Architecture des ordinateurs Elaboré par- ABIDA Mounir.pptArchitecture des ordinateurs Elaboré par- ABIDA Mounir.ppt
Architecture des ordinateurs Elaboré par- ABIDA Mounir.ppt
 
Cours algo: Les pointeurs
Cours algo: Les pointeursCours algo: Les pointeurs
Cours algo: Les pointeurs
 
Corrige tp java
Corrige tp javaCorrige tp java
Corrige tp java
 
Cours des bases de données
Cours des bases de données Cours des bases de données
Cours des bases de données
 

En vedette

Langage c partie_2
Langage c partie_2Langage c partie_2
Langage c partie_2
Mohamed Lahby
 
Programmation Java
Programmation JavaProgrammation Java
Programmation Java
Mohamed Lahby
 
Chapitre 3 Les algorithmes de recherche et de tris
Chapitre 3 Les algorithmes de recherche et de trisChapitre 3 Les algorithmes de recherche et de tris
Chapitre 3 Les algorithmes de recherche et de tris
Mohamed Lahby
 
Chapitre 4: Architecture simplifiée d’un ordinateur
Chapitre 4: Architecture simplifiée d’un ordinateur Chapitre 4: Architecture simplifiée d’un ordinateur
Chapitre 4: Architecture simplifiée d’un ordinateur
Mohamed Lahby
 
Chapitre 8: Les arbres
Chapitre 8: Les  arbresChapitre 8: Les  arbres
Chapitre 8: Les arbres
Mohamed Lahby
 
Chap1 introduction à l'algoritmique
Chap1 introduction à l'algoritmiqueChap1 introduction à l'algoritmique
Chap1 introduction à l'algoritmique
Mohamed Lahby
 
Chapitre 2: Modèle de référence OSI
Chapitre 2: Modèle de référence OSIChapitre 2: Modèle de référence OSI
Chapitre 2: Modèle de référence OSI
Mohamed Lahby
 

En vedette (7)

Langage c partie_2
Langage c partie_2Langage c partie_2
Langage c partie_2
 
Programmation Java
Programmation JavaProgrammation Java
Programmation Java
 
Chapitre 3 Les algorithmes de recherche et de tris
Chapitre 3 Les algorithmes de recherche et de trisChapitre 3 Les algorithmes de recherche et de tris
Chapitre 3 Les algorithmes de recherche et de tris
 
Chapitre 4: Architecture simplifiée d’un ordinateur
Chapitre 4: Architecture simplifiée d’un ordinateur Chapitre 4: Architecture simplifiée d’un ordinateur
Chapitre 4: Architecture simplifiée d’un ordinateur
 
Chapitre 8: Les arbres
Chapitre 8: Les  arbresChapitre 8: Les  arbres
Chapitre 8: Les arbres
 
Chap1 introduction à l'algoritmique
Chap1 introduction à l'algoritmiqueChap1 introduction à l'algoritmique
Chap1 introduction à l'algoritmique
 
Chapitre 2: Modèle de référence OSI
Chapitre 2: Modèle de référence OSIChapitre 2: Modèle de référence OSI
Chapitre 2: Modèle de référence OSI
 

Similaire à Les listes simplement chaînées en langage C

Chapitre 3 structures séquentielles
Chapitre 3 structures séquentiellesChapitre 3 structures séquentielles
Chapitre 3 structures séquentielles
Sana Aroussi
 
5- understandinggJava_Collections_v4.pdf
5- understandinggJava_Collections_v4.pdf5- understandinggJava_Collections_v4.pdf
5- understandinggJava_Collections_v4.pdf
AliouDiallo24
 
Marzouk collection-map
Marzouk collection-mapMarzouk collection-map
Marzouk collection-map
abderrahim marzouk
 
POO-JAVA-partie-2.pdf
POO-JAVA-partie-2.pdfPOO-JAVA-partie-2.pdf
POO-JAVA-partie-2.pdf
YasushiTsubakik
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptx
LamissGhoul1
 
Algorithm et structure de donnée
Algorithm et structure de donnéeAlgorithm et structure de donnée
Structures donneenew
Structures donneenewStructures donneenew
Structures donneenew
Rachid Lajouad
 
Structures donnee
Structures donneeStructures donnee
Structures donnee
Rachid Lajouad
 

Similaire à Les listes simplement chaînées en langage C (8)

Chapitre 3 structures séquentielles
Chapitre 3 structures séquentiellesChapitre 3 structures séquentielles
Chapitre 3 structures séquentielles
 
5- understandinggJava_Collections_v4.pdf
5- understandinggJava_Collections_v4.pdf5- understandinggJava_Collections_v4.pdf
5- understandinggJava_Collections_v4.pdf
 
Marzouk collection-map
Marzouk collection-mapMarzouk collection-map
Marzouk collection-map
 
POO-JAVA-partie-2.pdf
POO-JAVA-partie-2.pdfPOO-JAVA-partie-2.pdf
POO-JAVA-partie-2.pdf
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptx
 
Algorithm et structure de donnée
Algorithm et structure de donnéeAlgorithm et structure de donnée
Algorithm et structure de donnée
 
Structures donneenew
Structures donneenewStructures donneenew
Structures donneenew
 
Structures donnee
Structures donneeStructures donnee
Structures donnee
 

Dernier

Iris et les hommes.pptx
Iris      et         les      hommes.pptxIris      et         les      hommes.pptx
Iris et les hommes.pptx
Txaruka
 
Newsletter SPW Agriculture en province du Luxembourg du 03-06-24
Newsletter SPW Agriculture en province du Luxembourg du 03-06-24Newsletter SPW Agriculture en province du Luxembourg du 03-06-24
Newsletter SPW Agriculture en province du Luxembourg du 03-06-24
BenotGeorges3
 
Calendrier du 3 juin 2024 et compte rendu.pdf
Calendrier du 3 juin 2024 et compte rendu.pdfCalendrier du 3 juin 2024 et compte rendu.pdf
Calendrier du 3 juin 2024 et compte rendu.pdf
frizzole
 
Mémoire de licence en finance comptabilité et audit
Mémoire de licence en finance comptabilité et auditMémoire de licence en finance comptabilité et audit
Mémoire de licence en finance comptabilité et audit
MelDjobo
 
Méthodologie de recherche et de rédaction de mémoire.pptx
Méthodologie de recherche et de rédaction de mémoire.pptxMéthodologie de recherche et de rédaction de mémoire.pptx
Méthodologie de recherche et de rédaction de mémoire.pptx
LamoussaPaulOuattara1
 
1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx
1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx
1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx
schneiderbeatrice78
 
Contrôle fiscale en république de guinée
Contrôle fiscale en république de guinéeContrôle fiscale en république de guinée
Contrôle fiscale en république de guinée
bangalykaba146
 
Festival de Cannes 2024.pptx
Festival      de      Cannes     2024.pptxFestival      de      Cannes     2024.pptx
Festival de Cannes 2024.pptx
Txaruka
 
4 expositions à voir à Paris.pptx
4   expositions    à   voir   à Paris.pptx4   expositions    à   voir   à Paris.pptx
4 expositions à voir à Paris.pptx
Txaruka
 
Cours SE - Gestion de la mémoire- Cours IG IPSET.pdf
Cours SE - Gestion de la mémoire- Cours IG IPSET.pdfCours SE - Gestion de la mémoire- Cours IG IPSET.pdf
Cours SE - Gestion de la mémoire- Cours IG IPSET.pdf
MedBechir
 
Exame DELF - A2 Francês pout tout public
Exame DELF - A2  Francês pout tout publicExame DELF - A2  Francês pout tout public
Exame DELF - A2 Francês pout tout public
GiselaAlves15
 
Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"
Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"
Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"
IES Turina/Rodrigo/Itaca/Palomeras
 
Bilan schéma pour réun concertation SDLP V4.pptx
Bilan schéma pour réun concertation SDLP V4.pptxBilan schéma pour réun concertation SDLP V4.pptx
Bilan schéma pour réun concertation SDLP V4.pptx
bibliogard
 
M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...
M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...
M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...
M2i Formation
 
SYLLABUS DU COURS MARKETING DTS 1-2.pdf
SYLLABUS DU COURS  MARKETING DTS 1-2.pdfSYLLABUS DU COURS  MARKETING DTS 1-2.pdf
SYLLABUS DU COURS MARKETING DTS 1-2.pdf
Moukagni Evrard
 
Projet de fin d'étude licence en sciece.pptx
Projet de fin d'étude licence en sciece.pptxProjet de fin d'étude licence en sciece.pptx
Projet de fin d'étude licence en sciece.pptx
elfangourabdelouahab
 

Dernier (16)

Iris et les hommes.pptx
Iris      et         les      hommes.pptxIris      et         les      hommes.pptx
Iris et les hommes.pptx
 
Newsletter SPW Agriculture en province du Luxembourg du 03-06-24
Newsletter SPW Agriculture en province du Luxembourg du 03-06-24Newsletter SPW Agriculture en province du Luxembourg du 03-06-24
Newsletter SPW Agriculture en province du Luxembourg du 03-06-24
 
Calendrier du 3 juin 2024 et compte rendu.pdf
Calendrier du 3 juin 2024 et compte rendu.pdfCalendrier du 3 juin 2024 et compte rendu.pdf
Calendrier du 3 juin 2024 et compte rendu.pdf
 
Mémoire de licence en finance comptabilité et audit
Mémoire de licence en finance comptabilité et auditMémoire de licence en finance comptabilité et audit
Mémoire de licence en finance comptabilité et audit
 
Méthodologie de recherche et de rédaction de mémoire.pptx
Méthodologie de recherche et de rédaction de mémoire.pptxMéthodologie de recherche et de rédaction de mémoire.pptx
Méthodologie de recherche et de rédaction de mémoire.pptx
 
1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx
1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx
1-IMP-Tuto-Recherche simple avancée-V4-20240425-BS.pptx
 
Contrôle fiscale en république de guinée
Contrôle fiscale en république de guinéeContrôle fiscale en république de guinée
Contrôle fiscale en république de guinée
 
Festival de Cannes 2024.pptx
Festival      de      Cannes     2024.pptxFestival      de      Cannes     2024.pptx
Festival de Cannes 2024.pptx
 
4 expositions à voir à Paris.pptx
4   expositions    à   voir   à Paris.pptx4   expositions    à   voir   à Paris.pptx
4 expositions à voir à Paris.pptx
 
Cours SE - Gestion de la mémoire- Cours IG IPSET.pdf
Cours SE - Gestion de la mémoire- Cours IG IPSET.pdfCours SE - Gestion de la mémoire- Cours IG IPSET.pdf
Cours SE - Gestion de la mémoire- Cours IG IPSET.pdf
 
Exame DELF - A2 Francês pout tout public
Exame DELF - A2  Francês pout tout publicExame DELF - A2  Francês pout tout public
Exame DELF - A2 Francês pout tout public
 
Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"
Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"
Evaluación docentes "Un cielo, dos países: El camino de los descubrimientos"
 
Bilan schéma pour réun concertation SDLP V4.pptx
Bilan schéma pour réun concertation SDLP V4.pptxBilan schéma pour réun concertation SDLP V4.pptx
Bilan schéma pour réun concertation SDLP V4.pptx
 
M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...
M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...
M2i Webinar - « Participation Financière Obligatoire » et CPF : une opportuni...
 
SYLLABUS DU COURS MARKETING DTS 1-2.pdf
SYLLABUS DU COURS  MARKETING DTS 1-2.pdfSYLLABUS DU COURS  MARKETING DTS 1-2.pdf
SYLLABUS DU COURS MARKETING DTS 1-2.pdf
 
Projet de fin d'étude licence en sciece.pptx
Projet de fin d'étude licence en sciece.pptxProjet de fin d'étude licence en sciece.pptx
Projet de fin d'étude licence en sciece.pptx
 

Les listes simplement chaînées en langage C

  • 1. D´efinition d’une liste chaˆın´ee Ajout d’un ´el´ement suppression d’un ´el´ement Autres op´erations sur les listes Chapitre 5 Les listes simplement chaˆın´ees Module 5: Algorithmique et programmation Master Math´ematiques, Cryptologie et S´ecurit´e Informatique (MMCSI) Texte Texte Texte mlahby@gmail.com 22 novembre 2014 Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 1/ 16
  • 2. D´efinition d’une liste chaˆın´ee Ajout d’un ´el´ement suppression d’un ´el´ement Autres op´erations sur les listes Plan 1 D´efinition d’une liste chaˆın´ee 2 Ajout d’un ´el´ement Ajouter au debut : la fonction InsertDebut() Ajouter `a la fin : la fonction InsertFin() Ajout dans une liste tri´ee : la fonction InsertOrd() 3 suppression d’un ´el´ement Supprimer au debut : la fonction SupprimerDebut() Supprimer `a la fin : la fonction SupprimerFin() Supprimer une valeur : la fonction SupprimerVal() 4 Autres op´erations sur les listes Affichage d’une liste : la fonction AfficherListe() Rechercher un ´el´ement : la fonction Rechercher() Inverser une liste : la fonction InverserListe() Trier une liste : la fonction TrierListe() Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 2/ 16
  • 3. D´efinition d’une liste chaˆın´ee Ajout d’un ´el´ement suppression d’un ´el´ement Autres op´erations sur les listes Introduction Pour stocker des donn´ees en m´emoire, nous avons utilis´e des variables simples (type int, double. . .), des tableaux et des structures personnalis´ees. Si vous souhaitez stocker une s´erie de donn´ees, le plus simple est en g´en´eral d’utiliser des tableaux. Toutefois, les tableaux se r´ev`elent parfois assez limit´es. Par exemple, si vous cr´eez un tableau de 10 cases et que vous vous rendez compte plus tard dans votre programme que vous avez besoin de plus d’espace, il sera impossible d’agrandir ce tableau. De mˆeme, il n’est pas possible d’ins´erer une case au milieu du tableau. Les mod`eles de donn´ees dynamiques (liste chaˆın´ee, pile, file...) repr´esentent une fa¸con d’organiser les donn´ees en m´emoire de mani`ere beaucoup plus exible. Comme `a la base le langage C ne propose pas ce syst`eme de stockage, nous allons devoir le cr´eer nous-mˆemes de toutes pi`eces. Les mod`eles de donn´ees dynamiques Une structure dynamique est une structure dont la taille peut varier au cours de l’ex´ecution du programme , l’acc`es aux informations stock´ees d´epend de la structure. Ce type de structure utilise des pointeurs, dans ce chapitre nous allons traiter un seul type de structures dynamiques : liste chain´ee. Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 3/ 16
  • 4. D´efinition d’une liste chaˆın´ee Ajout d’un ´el´ement suppression d’un ´el´ement Autres op´erations sur les listes D´efinition Une liste est une s´equence finie d’´el´ements ; Les ´el´ements sont rep´er´es selon leur rang ; Il existe une relation d’ordre sur le rang des ´el´ements : le rang du premier ´el´ement est 1, le rang du second est 2, . . . L’ajout et la suppression d’un ´el´ement peut se faire `a n’importe quel rang valide de la liste Une liste chaˆın´ee est un moyen d’organiser une s´erie de donn´ees en m´emoire ; Cela consiste `a assembler des structures en les liant entre elles `a l’aide de pointeurs. Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 4/ 16
  • 5. D´efinition d’une liste chaˆın´ee Ajout d’un ´el´ement suppression d’un ´el´ement Autres op´erations sur les listes Listes : cellule La cellule est la composante principale d’une liste ; Une liste est un ensemble de cellules (´el´ements) chaˆın´ees entre elles `a l’aide de liens ; Une cellule est une structure qui comporte deux champs : 1 Le champ info : il contient des informations sur l’´el´ement repr´esent´e par la cellule ; 2 Le champ suivant : il repr´esente un pointeur qui contient l’adresse de la cellule suivante. Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 5/ 16
  • 6. D´efinition d’une liste chaˆın´ee Ajout d’un ´el´ement suppression d’un ´el´ement Autres op´erations sur les listes D´eclation d’une liste Syntaxe pour d´efinifir le type liste typedef struct cellule{ int info ; //le champ info peut avoir n’importe quel type struct cellule *suiv ; //pointeur contenant l’adresse de la cellule suivante }liste ; D´eclaration d’une liste Pour cr´eer une liste chaˆın´ee, il suffit de d´eclarer un pointeur qui contient l’adresse de la premi`ere cellule : liste *L ; Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 6/ 16
  • 7. D´efinition d’une liste chaˆın´ee Ajout d’un ´el´ement suppression d’un ´el´ement Autres op´erations sur les listes Ajouter au debut : la fonction InsertDebut() Ajouter `a la fin : la fonction InsertFin() Ajout dans une liste tri´ee : la fonction InsertOrd() Prototype : InsertDebut(liste *L, int x) D´efinition de la fonction liste *InsertDebut(liste *L, int x) { liste *c ; c=(liste*)malloc(1*sizeof(liste)) ; if(c !=NULL) { c− > info = x; c− > suiv = L; L=c ; return(c); } else return(L) ; } Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 7/ 16
  • 8. D´efinition d’une liste chaˆın´ee Ajout d’un ´el´ement suppression d’un ´el´ement Autres op´erations sur les listes Ajouter au debut : la fonction InsertDebut() Ajouter `a la fin : la fonction InsertFin() Ajout dans une liste tri´ee : la fonction InsertOrd() Prototype : InsertFin(liste *L, int v) D´efinition de la fonction liste *InsertFin(liste *L, int x) { liste *c ; c=(liste*)malloc(1*sizeof(liste)) ; if(c !=NULL) { c− > info = x; c− > suiv = NULL } if (L! = NULL) //liste n’est pa vide //Chercher l’adresse de la derniere { P=L ; while(P− > suiv! = NULL) P = P− > suiv; //brancher P− > suiv = C; return L ; } else L=C ; return L ; } Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 8/ 16
  • 9. D´efinition d’une liste chaˆın´ee Ajout d’un ´el´ement suppression d’un ´el´ement Autres op´erations sur les listes Ajouter au debut : la fonction InsertDebut() Ajouter `a la fin : la fonction InsertFin() Ajout dans une liste tri´ee : la fonction InsertOrd() Prototype : InsertOrd(liste *L, int x) Fonction it´erative liste *InsertOrd(liste *L, int x) { liste *C,*P,*N ; while(C! = NULL&&C− > info! = x) {P = C; C = C− > suiv; } N = (liste∗)malloc(sizeof (liste)); N− > info = x; if (P == NULL) L = insertdebut(L, x); else { P− > suiv = N; N− > suiv = C; } return(L) ; } Fonction r´ecursive liste *InsertOrdR(liste *L, int x) { if(L !=NULL) if (x < L− > info) return(InsertDebut(L, x)); else return(InsertDebut(L− > info, InsertOrdR(L− > suiv, x))); else return(InsertDebut(L, x)); } Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 9/ 16
  • 10. D´efinition d’une liste chaˆın´ee Ajout d’un ´el´ement suppression d’un ´el´ement Autres op´erations sur les listes Supprimer au debut : la fonction SupprimerDebut() Supprimer `a la fin : la fonction SupprimerFin() Supprimer une valeur : la fonction SupprimerVal() Prototype :SupprimerDebut(liste *L) D´efinition de la fonction liste *SupprimerDebut(liste *L) { liste *p ; //pour lib´erer la cellule qu’on va supprimer if(L !=NULL) {P = L; L = L− > suiv; free(p); return(L); } else return(NULL) ; // o`u return(L) ; } Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 10/ 16
  • 11. D´efinition d’une liste chaˆın´ee Ajout d’un ´el´ement suppression d’un ´el´ement Autres op´erations sur les listes Supprimer au debut : la fonction SupprimerDebut() Supprimer `a la fin : la fonction SupprimerFin() Supprimer une valeur : la fonction SupprimerVal() Prototype : SupprimerFin(liste *L) D´efinition de la fonction liste *SupprimerFin(liste *L) { liste *p,*c ; p=NULL ; //pour m´emoriser l’adresse if (L! = NULL) //liste n’est pa vide {c = L; //pour parcourir la liste while(c− > suiv! = NULL) {p = c;//contient l’adress de l’avt dernier c = c− > suiv; } if (p == NULL)//L contient un seul ´el´ement {L = L− > suiv; free(c); } else { P− > suiv = NULL; free(c); } return(L); } Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 11/ 16
  • 12. D´efinition d’une liste chaˆın´ee Ajout d’un ´el´ement suppression d’un ´el´ement Autres op´erations sur les listes Supprimer au debut : la fonction SupprimerDebut() Supprimer `a la fin : la fonction SupprimerFin() Supprimer une valeur : la fonction SupprimerVal() Prototype : SupprimerVal(liste *L, int x) D´efinition de la fonction liste *SupprimerVal(liste *L, int x) { liste *C,*P ; if(L !=NULL){ if (L− > info == x) {C = L; L = L− > suiv; free(C); //liberer la cellule } else {C = L; while(C! = NULL&&C− > info! = x) {P = C; C = C− > suiv; } if (C! = NULL) {P− > suiv = C− > suiv; free(C); } } } return(L) ; } Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 12/ 16
  • 13. D´efinition d’une liste chaˆın´ee Ajout d’un ´el´ement suppression d’un ´el´ement Autres op´erations sur les listes Affichage d’une liste : la fonction AfficherListe() Rechercher un ´el´ement : la fonction Rechercher() Inverser une liste : la fonction InverserListe() Trier une liste : la fonction TrierListe() Prototype : AfficherListe(liste *L) Fonction it´erative void AfficherListeIt(liste *L) { liste *P ; P=L ; //pour sauvegarder la tˆete de L while(P! = NULL) { printf (”%d− > ”, P− > info); P = P− > suiv; } printf(”NULL”) ; } Fonction r´ecursive void AfficherListeRe(liste *L) { if (L! = NULL) { printf (”%d− > ”, L− > info); AfficherListeRe(L− > suiv) } } Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 13/ 16
  • 14. D´efinition d’une liste chaˆın´ee Ajout d’un ´el´ement suppression d’un ´el´ement Autres op´erations sur les listes Affichage d’une liste : la fonction AfficherListe() Rechercher un ´el´ement : la fonction Rechercher() Inverser une liste : la fonction InverserListe() Trier une liste : la fonction TrierListe() Prototype : Rechercher(liste *L,int x) Fonction it´erative int RechercherIt(liste *L,int x) { liste *P ; P=L ; //pour sauvegarder la tˆete de L while(P! = NULL&&P− > info! = x)) { P = P− > suiv; } if (P! = NULL) return(1); else return(0); } Fonction r´ecursive int RechercherRe(liste *L,int x) { if (L == NULL) return(0); if (L! = NULL&&L− > info == x) return(1); return(RechercherRe(L− > suiv, x)); } Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 14/ 16
  • 15. D´efinition d’une liste chaˆın´ee Ajout d’un ´el´ement suppression d’un ´el´ement Autres op´erations sur les listes Affichage d’une liste : la fonction AfficherListe() Rechercher un ´el´ement : la fonction Rechercher() Inverser une liste : la fonction InverserListe() Trier une liste : la fonction TrierListe() Prototype : InverserListe(liste *L, int x) Fonction it´erative : on construit une nouvelle liste liste *InverserListeIt(liste *L) { liste *LI ; LI=NULL ; //liste vide while(L! = NULL) { LI = InsertDebut(LI, L− > info); L = L− > suiv; } return(LI) ; } Fonction r´ecursive : on affiche la liste sans constuire une nouvelle liste void InverserListeRe(liste *L) { if (L! = NULL) { AfficherListeRe(L− > suiv); printf (”%d− > ”, L− > info); } } Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 15/ 16
  • 16. D´efinition d’une liste chaˆın´ee Ajout d’un ´el´ement suppression d’un ´el´ement Autres op´erations sur les listes Affichage d’une liste : la fonction AfficherListe() Rechercher un ´el´ement : la fonction Rechercher() Inverser une liste : la fonction InverserListe() Trier une liste : la fonction TrierListe() Prototype : TriSelection(liste *L) Solution 1 : Boucle for void TriSelection(liste *L) { liste *p,*q,*min ; int aide ; for(p = L; p− > suiv! = NULL; p = p− > suiv) {min = p; for(q = p− > suiv; q! = NULL; q = q− > suiv) { if (q− > info < min− > info) min = q; } aide = p− > info; p− > info = min− > info; min− > info = aide; } } Solution 2 : Boucle while void TriSelection(liste *L) { liste *p,*q,*min ; int aide ; p=L ; while(p− > suiv! = NULL) {min = p; q = p− > suiv; while(q! = NULL) { if (q− > info < min− > info) min = q; q = q− > suiv; } aide = p− > info; p− > info = min− > info; min− > info = aide; p = p− > suiv; } } Module 5: Algorithmique et programmation ENS Casablanca 2014-2015 16/ 16