5. Liste chaînée

Une liste chaînée est composée de cellule avec deux champs.

Illustrations

illustration_listeChainees

#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
}

exemple en image du code

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);
}