5. Liste chaînée
Une liste chaînée est composée de cellule avec deux champs.
- une valeur (par exemple un nombre entier)
- un pointeur sur une autre cellule
Illustrations
#define <stdlib.h>
typedef struct cel {
int valeur;
struct cel * suivant;
} Cellule;
typedef Cellule * Liste; // liste est synonyme de cellule*
Cellule * creerCellule(int a) {
cellule * p = malloc(sizeof(cellule));
if(p == NULL) return exit(1);
(*p).valeur = a; // p -> suivant = a est équivalent
(*p).suivant = NULL; // ne pointe sur rien
return p; // on retourne l'adresse
}
Ajouter une liste
void ajouterListe(Liste * l, int a) {
cellule * c = creerCellule(a);
c -> suivant = *l;
*l = c;
}
Supprimer une liste
Pour cela on prend le premier élément de la liste et on le supprime et on le rend NULL
jusqu’à mettre le dernier élément = NULL
.
void suppListe(Liste * l) { // version récursive - sans boucle
if(*l == NULL) return;
suppListe(l(*l) -> suivant);
free(*l);
*l = NULL;
}
Rechercher dans une liste
int chercheListe(Liste l, int val) {
if(l == NULL) return 0; // cas où la liste est vide
if(l -> valeur == val) return 1;
chercheListe(l -> suivant, val);
}