0% ont trouvé ce document utile (0 vote)
3 vues11 pages

Listes Chainees

Le document explique les listes simplement chaînées, une structure de données dynamique composée de cellules contenant des données et des pointeurs vers la cellule suivante. Il détaille les opérations fondamentales telles que la taille, l'ajout et la suppression d'éléments, ainsi que leur complexité. Des algorithmes et des visualisations illustrent chaque opération pour faciliter la compréhension.

Transféré par

eddebbarhimeryem
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
3 vues11 pages

Listes Chainees

Le document explique les listes simplement chaînées, une structure de données dynamique composée de cellules contenant des données et des pointeurs vers la cellule suivante. Il détaille les opérations fondamentales telles que la taille, l'ajout et la suppression d'éléments, ainsi que leur complexité. Des algorithmes et des visualisations illustrent chaque opération pour faciliter la compréhension.

Transféré par

eddebbarhimeryem
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Chapitre 02

Listes Simplement Chaînées


Structures de Données — Explication Complète avec Visualisations

■ Ce que tu vas apprendre

1. Définition et intuition d'une liste chaînée


2. Anatomie d'une cellule (champs d, suivant)
3. Déclaration de la structure (mot par mot)
4. Opérations : Taille, Contient, Kième
5. Ajout : en début, en fin, en position k
6. Suppression : en début, en fin, en position k
1 Intuition — C'est quoi une Liste Chaînée ?

Imagine des post-its sur ton bureau. Chaque post-it contient une information ET une flèche vers le post-it
suivant. Le dernier dit NIL = 'je suis le dernier'.

k=1 k=2 k=3

Liste
Ali Sara Nour NIL

■ Propriété clé : si tu connais l'adresse de la première cellule, tu peux accéder à toute la liste en suivant les
flèches.

Définition formelle
Une LSC (Liste Simplement Chaînée) est une structure dynamique : sa taille augmente ou diminue en
mémoire selon les besoins du programme. Chaque élément est une cellule avec deux compartiments.

Anatomie d'une cellule


Compartiment Nom Contient

Gauche d La vraie donnée (entier, nom, etc.)

Droite suivant L'adresse de la prochaine cellule (ou NIL)


2 Déclaration de la Structure — Mot par Mot

Algorithme : Déclaration

Type cellule = Enregistrement


d : Type_donnee
suivant : ^cellule
Fin cellule

pointeur = ^cellule
Liste = ^cellule

MOT / SYMBOLE SIGNIFICATION

Type cellule On crée un nouveau type de variable qu'on appelle 'cellule'

= Enregistrement Structure qui regroupe plusieurs champs (comme une fiche)

d Nom du champ donnée — contient la valeur stockée

: Type_donnee Type de la donnée (entier, chaîne...) — générique, à remplacer

suivant Nom du champ lien — pointe vers la cellule suivante

^cellule ^ = pointeur VERS. Donc 'pointeur vers une cellule'

pointeur Alias pour ^cellule — une variable qui stocke une adresse

Liste Alias pour ^cellule — représente l'adresse de la 1ère cellule

■ Clé de compréhension : Liste n'est pas toute la liste — c'est juste l'adresse du premier élément. Si tu perds
cette adresse, tu perds tout !
3 Opération : Taille — Compter les cellules

Algorithme : Taille(L)

Fonction Taille(val L : Liste) : entier


Debut
p <- L // curseur part du début
m <- 0 // compteur = 0
Tant que (p <> NIL) faire
m <- m + 1 // on compte cette cellule
p <- p^.suivant // on avance au suivant
Fin tant que
Retourner(m) // résultat final
Fin

MOT / SYMBOLE SIGNIFICATION

val L : Liste L = la liste passée en lecture seule (val = pas de modification)

: entier La fonction retourne un entier (le nombre de cellules)

p <- L p est notre 'curseur' — on le place sur la 1ère cellule

m <- 0 m = compteur, initialisé à 0

p <> NIL Tant que p pointe vers une vraie cellule (pas la fin)

m <- m + 1 On vient de voir une cellule, on incrémente le compteur

p^.suivant p^ = aller à l'adresse de p | .suivant = champ lien

Retourner(m) On retourne le compteur final = nombre total de cellules

Trace d'exécution — Liste [10 → 20 → 30]

k=1 k=2 k=3

Liste
10 20 30 NIL

Tour p pointe sur p ≠ NIL ? m Action

Départ cellule(10) ✓ 0 on entre dans la boucle

1 cellule(10) ✓ 1 m=1, p avance → cellule(20)

2 cellule(20) ✓ 2 m=2, p avance → cellule(30)

3 cellule(30) ✓ 3 m=3, p avance → NIL

4 NIL ✗ 3 on sort → Retourner(3) ✓


4 Opération : Kième — Accéder à la cellule k

Cette fonction est fondamentale car elle est utilisée par les opérations d'ajout et de suppression en
position k. Elle retourne le pointeur vers la k-ième cellule.

Algorithme : Kième(L, k)

Fonction Kieme(val L : Liste ; val k : entier) : pointeur


Debut
p <- L
i <- 1 // compteur de position
Tant que (p <> NIL) faire
Si (i = k) alors
Retourner(p) // on est à la position k !
p <- p^.suivant // avancer
i <- i + 1 // incrémenter la position
Fin tant que
Retourner(NIL) // k dépasse la taille
Fin

MOT / SYMBOLE SIGNIFICATION

i <- 1 i = numéro de la position courante, on part de 1

Si (i = k) On vérifie si on est arrivé à la position demandée

Retourner(p) On retourne l'adresse de cette cellule

i <- i + 1 Sinon on continue et on incrémente la position

Retourner(NIL) Si on sort sans trouver k → k est invalide (trop grand)

Trace pour k=2 — Liste [10 → 20 → 30]

k=1 k=2 k=3

Liste
10 20 30 NIL

↑ La cellule en surbrillance (k=2) est celle retournée par Kième(L,2)


5 Opération : Ajout

5.1 — Ajout en début de liste


On veut insérer une nouvelle valeur avant la première cellule. Il faut d'abord créer la cellule, puis la
connecter à l'ancienne tête.

Algorithme : Ajout_Début(L, x)

Procedure Ajout_Debut(Var L : Liste ; val x : Type_donnee)


Debut
nouveau(p) // crée une cellule, p = son adresse
p^.d <- x // met la valeur dans le champ d
p^.suivant <- L // p pointe vers l'ancienne 1ère cellule
L <- p // L pointe maintenant vers p
Fin

AVANT :
20 30 NIL

Ajout de 10 en début

APRÈS :
10 20 30 NIL

MOT / SYMBOLE SIGNIFICATION

nouveau(p) Réserve une case en mémoire, met son adresse dans p

p^.d <- x p^ = aller à l'adresse de p | .d = champ donnée | <- x = y mettre x

p^.suivant <- L Le nouveau 1er élément doit pointer vers l'ANCIEN 1er

L <- p L doit pointer vers le NOUVEAU 1er élément

5.2 — Ajout en position k


On veut insérer une valeur à la position k. On doit se placer sur la cellule k-1, créer la nouvelle cellule, et
la connecter entre k-1 et k.
Algorithme : Ajout en position k

Procedure Ajout(Var L : Liste ; val k : entier ; val x : Type_donnee)


Debut
Si (k = 1) alors
Ajout_Debut(L, x) // cas spécial
Sinon
p <- Kieme(L, k-1) // aller à la cellule k-1
Si (p = NIL) alors
Afficher('Position invalide')
Sinon
nouveau(C) // créer la nouvelle cellule
C^.d <- x // mettre la valeur
q <- p^.suivant // q = ancienne cellule k
p^.suivant <- C // k-1 pointe vers C
C^.suivant <- q // C pointe vers l'ancienne k
Fin

AVANT :
10 30 NIL

Ajout de 15 en position k=2

APRÈS :
10 15 30 NIL
6 Opération : Suppression

6.1 — Suppression en début de liste


On supprime la première cellule. On sauvegarde son adresse dans p pour pouvoir la libérer, puis on
avance L.

Algorithme : Suppression_Début(L)

Procedure Suppression_Debut(Var L : Liste)


Debut
Si (L = NIL) alors
Afficher('Suppression impossible: liste vide')
Sinon
p <- L // sauvegarder l'adresse de la 1ère cellule
L <- L^.suivant // L avance vers la 2ème cellule
Liberer(p) // libérer la mémoire de l'ancienne 1ère
Fin

AVANT :
10 20 30 NIL

Suppression du début (10 supprimé)

APRÈS :
20 30 NIL

MOT / SYMBOLE SIGNIFICATION

L = NIL Vérification : si la liste est vide, impossible de supprimer

p <- L On sauvegarde l'adresse de la 1ère cellule dans p

L <- L^.suivant L pointe maintenant sur la 2ème cellule (nouveau début)

Liberer(p) On libère la mémoire occupée par l'ancienne 1ère cellule

6.2 — Suppression en fin de liste


Algorithme : Suppression_Fin(L)

Procedure Suppression_Fin(Var L : Liste)


Debut
Si (L = NIL) alors
Afficher('Liste vide')
Sinon si (L^.suivant = NIL) alors // une seule cellule
Liberer(L)
L <- NIL
Sinon
p <- L
Tant que (p^.suivant^.suivant <> NIL) faire
p <- p^.suivant // avancer jusqu'à l'avant-dernier
Fin tant que
Liberer(p^.suivant) // libérer le dernier
p^.suivant <- NIL // l'avant-dernier devient le dernier
Fin

AVANT :
10 20 30 NIL

Suppression de la fin (30 supprimé)

APRÈS :
10 20 NIL

MOT / SYMBOLE SIGNIFICATION

p^.suivant^.suivant On regarde 2 cellules en avance pour s'arrêter à l'AVANT-dernier

p^.suivant = NIL Cas spécial : une seule cellule → on libère directement

Liberer(p^.suivant) Libère la dernière cellule

p^.suivant <- NIL L'avant-dernier devient le nouveau dernier (pointe vers NIL)
7 Suppression en Position k

Algorithme : Suppression(L, k)

Procedure Suppression(Var L : Liste ; val k : entier)


Debut
Si (k = 1) alors
Suppression_Debut(L) // cas spécial
Sinon
p <- Kieme(L, k-1) // aller à la cellule k-1
Si (p = NIL) alors
Afficher('Position invalide')
Sinon
q <- p^.suivant // q = cellule à supprimer
Si (q = NIL) alors
Afficher('Position invalide')
Sinon
p^.suivant <- q^.suivant // 'sauter' q
Liberer(q) // libérer la mémoire
Fin

Schéma — Suppression en position k=2

k=1 k=2 k=3

Avant
10 20 30 NIL

p=k-1 q=k (à suppr.) k+1

k=1 k=2

Après
10 30 NIL

MOT / SYMBOLE SIGNIFICATION

p <- Kieme(L, k-1) On se place sur la cellule AVANT celle à supprimer

q <- p^.suivant q = cellule à supprimer (position k)

p^.suivant <- q^.suivant On 'enjambe' q : k-1 pointe directement vers k+1

Liberer(q) q est déconnecté → on libère sa mémoire


8 Résumé de Toutes les Opérations

Opération But Complexité

Taille(L) Compter le nombre de cellules O(n)

Kième(L, k) Retourner la k-ième cellule O(k)

Contient(L, x) Chercher si x est dans la liste O(n)

Ajout_Début(L, x) Insérer x en 1ère position O(1)

Ajout(L, k, x) Insérer x à la position k O(k)

Suppression_Début(L) Supprimer le 1er élément O(1)

Suppression_Fin(L) Supprimer le dernier élément O(n)

Suppression(L, k) Supprimer l'élément en position k O(k)

■ Points Clés à Retenir

→ Une liste = pointeur vers la 1ère cellule (NIL si vide)


→ Chaque cellule = { d (donnée) | suivant (adresse suivante) }
→ p^.d = accéder au champ donnée de la cellule pointée par p
→ p^.suivant = accéder au champ lien de la cellule pointée par p
→ Toujours Liberer() une cellule supprimée pour éviter les fuites mémoire
→ Ajout/Suppression en début : O(1) | En fin ou position k : O(n)

Vous aimerez peut-être aussi