Académique Documents
Professionnel Documents
Culture Documents
Chap2 Liste Chainée
Chap2 Liste Chainée
Chapitre 2
Liste Chainée
Objectifs recherchés :
Résolution du problème
Principe de base
chaque élément peut avertir son suivant
Tableaux ? Liste chainée ?
Nombre d’éléments inconnu Méthode adoptée pour les tailles dynamiques
méthode à écarter
PR M.EL FAR 26/02/2022
Liste Chainée
6
Définition :
Une structure de données composée d’éléments de même
type reliés de façon successive par des pointeurs..
Composition :
Dans une liste chaînée les éléments sont rangés linéairement. Chaque élément est lié à son
successeur, il est donc impossible d'accéder directement à un élément quelconque de la liste.
Cette linéarité est virtuelle.
PR M.EL FAR 26/02/2022
Liste Chainée
8
Représentation en C
li 3
liste Liste chaînée
a b c
cellule
une cellule est composée :
d’un élément de la suite
li 3
List *li;
Ajout en tête
li 3
4
Nouveau
Void insererFinListe(Liste*li,Objet* objet) { Else {
Element* nouveau = CreerElement(); li-> dernier -> suivant = nouveau;
nouveau->data=objet; li->dernier = nouveau;
if (li->premier == NULL) li->nbElt++;
insereren TeteListe(Liste*li,Objet* objet); }
Supprimer un élément en tête de liste
li 3
2
Extrait
Element* extrait = li -> premier;
Objet* extraireEnTeteDeListe (Liste* li) {
Element* extrait = li->premier; li -> premier = li -> premier ->
if (!listeVide(li)) { suivant;
li -> premier = li -> premier -> suivant;
if (li->premier==NULL) // Liste devenue vide
li -> dernier=NULL;
li->nbElt--;}
return extrait != NULL ? extrait->reference : NULL;
}
Supprimer un élément en tête de liste
Supprimer un élément en tête de liste
li 3
2
li 3
liste
Liste Doublement
a b c Chaînée
cellule
typedef void Objet; // le type Liste
// un élément de la liste typedef struct {
typedef struct element { Element *premier;
Objet*data; Element *dernier;//optionnel
struct element *suivant; int nbElt;
struct element *precedent; } Liste;
} Element;
Initialisation et création d’une liste
Doublement Chainée
// Initialisation de la liste // Création de la liste
void initListe(Liste *li) Liste* creerListe()
{ {
li->premier =NULL; Liste* li;
li->dernier =NULL; li=(Liste*)malooc(sizeof(Liste));
li->nbElt=0; initListe (li);
} return li;
}
FIN Chapitre 2