• Aucun résultat trouvé

Algorithmique et structures de données II

N/A
N/A
Protected

Academic year: 2022

Partager "Algorithmique et structures de données II"

Copied!
10
0
0

Texte intégral

(1)

Algorithmique et structures de données II

Université de Manouba

Ecole supérieure d’économie numérique ESEN

1 (Cours 4)

La liste simplement chainée

Réalisé par: Dhouha Maatar

1. Introduction

1.1. Limite des tableaux:

2

 Taille connue et fixe des éléments

 Insertion et suppression dynamiques non pratiques

 Allocation d’un seul bloque en mémoire

D’où les listes :

 Taille, inconnue au départ, elle varie au cours du temps

 Insertion et suppression dynamiques pratiques

 Les éléments sont habituellement éparpillés en mémoire

(2)

1. Introduction

Une liste chaînée est un ensemble d’éléments contenus chacun dans une cellule (ou nœud ou maillon).

Chaque cellule contient, en plus de l’élément, l’adresse de l’élément suivant appelée pointeur.

Figure 1: Structure d’une liste chaînée

Elem Elem Elem

Tête de liste

Fin de liste (Nil)

cellule

1.2. Définition:

3

1. Introduction

Il existe trois types de listes:

•Les listes simplement chaînées: Dans ce type de listes, les éléments sont chaînés à l’aide d’un seul pointeur afin de parcourir la liste du premier au dernier élément.

•Les listes doublement chaînées: Dans ces listes, les éléments sont chaînées à l’aide de deux pointeurs, et non un seul, ce qui permet de parcourir la liste dans les deux sens.

•Les listes circulaires: dans ces listes, le dernier élément pointe sur le premier.

(3)

1. Introduction

1.3. Déclaration d’une liste chaînée :

Types

cellule =enregistrement

Elem: entier //valeur à stocker

Suiv: ^ cellule // adresse de l’élément suivant Fin enregistrement

Liste= ^ cellule Variables

L: Liste

5

6

1. Introduction

Lorsqu’on déclare une liste, on l’initialise à NIL pour pouvoir ensuite allouer le premier élément.

//déclaration de 2 listes chaînées différentes mais équivalentes ma_liste1: ^ cellule

ma_liste2: Liste Début

ma_liste1 ←Nil ma_liste2 ←Nil fin

(4)

2. Création et affichage d’une liste

2.1. Création d’une liste chaînée:

Procédure CreationElement( Tête:Liste) Début

Allouer (Tête)

Ecrire(" entrer un entier") lire(Tête^. Elem)

Tête^. Suiv←Nil Fin

Figure 2: Création d’une liste Elem

Tête de liste

Fin de liste (Nil)

7

2. Création et affichage d’une liste

2.1. Création d’une liste chaînée:

Procédure CreationListe(n: entier, L:Liste) Variables: Tête, P: Liste

i: entier Début

CreationElement(Tête) L ←Tête

Pour i de 2 à n faire CreationElement(P) L^. Suiv ←P L ←P

FinPour

Elem Nil

Elem P L

Nil

Figure 3: Processus de création

(5)

2. Création et affichage d’une liste

2.1. Création d’une liste chaînée:

Procédure CreationListe(n: entier, L:Liste) Variables: Tête, P: Liste

i: entier Début

CreationElement(Tête) L ←Tête

Pour i de 2 à n faire CreationElement(P) L^. Suiv ←P L ←P

FinPour L ←Tête Fin

Elem

Elem P L

Nil

Figure 4: Garder la tête de liste

9

2. Création et affichage d’une liste

2.2. Affichage d’une liste chaînée:

Procédure AffichageListe(L:Liste) Variables:

P: Liste Début

P ←L

Tantque (P<>Nil) faire Ecrire(P^. Elem) P ← P^. Suiv FinTQ

Fin

10

(6)

11

2. Création et affichage d’une liste

Dans certains cas, il faut tester si la liste est vide Procédure affichage(L:Liste)

Début

si L = NIL alors

écrire (« liste vide ») sinon

AffichageListe(L) finsi

Fin

On peut utiliser une fonction qui renvoie 1 si la liste est vide et 0 sinon.

fonction estvide(L:Liste): entier Début

si L = NIL alors ou

retourner 1 sinon

retourner 0 finsi

Fin

2. Création et affichage d’une liste

Procédure affichage(L:Liste) Début

si estvide(L) alors

écrire (« liste vide ») sinon

AffichageListe(L) finsi

Fin

fonction estvide(L:Liste): entier Début

retourner (L = NIL) Fin

(7)

3. Recherche d’un élément dans un liste

Procédure Recherche(x: entier, L:Liste, tmp: Liste) Variables:

P: Liste Début

P ←L tmp ←NIL Tantque (P<>Nil) faire

si ( P ^. Elem=x) alors tmp ← P finsi

P ← P ^. Suiv FinTQ

fin 13

Le but est de renvoyer l’adresse du premier élément trouvé ayant une certaine valeur. On parcourt donc la liste jusqu’au bout et dès qu’on trouve l’élément qui correspond à ce que l’on cherche, on renvoie son adresse qui est égale à NIL si l’élément n’existe pas.

14

4. Insertion d’un élément

Lorsque nous voulons ajouter un élément dans une liste chaînée, il faut savoir où l’insérer. Les deux ajouts

génériques des listes sont les ajouts en tête, et en fin de liste.

4.1. Insertion en tête de liste:

Lors de l’ajout en tête, nous allons créer un élément, lui assigner la valeur que l’on veut ajouter puis raccorder cet élément à la liste passée en paramètre. Lors d’un ajout en tête, il suffit de créer un nouveau élément puis de le relier au début de la liste originale. Il s’agit donc d’assigner à Suiv l’adresse du premier élément de la liste.

(8)

4.1. Insertion en tête de liste

Elem Elem

Tête de liste (L)

Nil

Figure 5: Principe d’insertion d’un élément en tête de liste Elem

Procédure AjouterEnTete(Var L:Liste, valeur: entier) Variables:

P: Liste Début

Allouer (P) // créer un nouvel élément

P^. Elem ← valeur //assigner la valeur au nouvel élément P^. Suiv←L //on assigne l’adresse de l’élément suivant au

//nouvel élément L ←P

Fin

15

4.2. Insertion en fin de liste:

On crée tout d’abord un nouvel élément, lui assigner sa valeur et mettre l’adresse de l’élément suivant à NIL.

On crée un pointeur temporaire sur le type element qui va se déplacer d’élément en élément et regarder si cet élément est le dernier de la liste.

Enfin, on pointe le dernier élément de la liste originale sur le nouvel élément crée.

4.2. Insertion en fin de liste

(9)

17

4.2. Insertion en fin de liste

Procédure AjouterEnFin (L:Liste, valeur: entier) Variables:

P, t: Liste Début

Allouer (P) // créer un nouvel élément

P^. Elem ← valeur //assigner la valeur au nouvel élément P^. Suiv←NIL //aucun élément ne va suivre

si(L = NIL) alors L ←P

sinon //on parcours jusqu’à la fin t ← L

TQ (t ^. Suiv <> NIL) faire t ← t ^. Suiv fin TQ

t ^. Suiv ←P Fin

18

5.1. Suppression en tête:

5. Suppression d’un élément d’une liste

Ici, on s’intéresse à la suppression du premier élément d'une liste chaînée. Si la liste n’est pas vide, on stocke l’adresse du 2ièmeélément de la liste et on supprime le premier élément.

La difficulté consiste à ne pas perdre l'accès aux éventuels éléments qui sont pointés par le premier.

Attention à ne pas libérer le premier élément avant d’avoir stocker l’adresse du second, sans quoi il sera impossible de la récupérer.

(10)

Elem Elem Elem Tête de

liste

Nil

Figure 6: Principe de suppression en tête de la liste

5.1. Suppression en tête

Procédure supprimerEnTete (L :Liste) Variables:

P: Liste Début

si L <> NIL alors P←L L ← L ^. Suiv libérer(P) finsi

Fin

Procédure supprimerEnFin (L :Liste) Variables:

tmp, ptmp: Liste Début

si L ^. Suiv =NIL alors L←NIL

sinon //tant qu’on n’est pas au dernier élément tmp ← L

ptmp ← L

TQ(tmp ^. Suiv <>NIL) faire ptmp ←tmp

tmp ← tmp ^. Suiv finTQ

5.2. Suppression en fin

Cette fois, il va falloir parcourir la liste jusqu’à son dernier élément, indiquer que l’avant dernier élément va devenir le dernier élément .

//A la sortie de la boucle, tmp //pointe sur le dernier élément et //ptmp sur l’avant-dernier

ptmp ^. Suiv ←NIL libérer(tmp)

finsi

Références

Documents relatifs

Une liste chaînée désigne en informatique une structure de données représentant une collection ordonnée et de taille arbitraire d’éléments de même type (*), dont la

● Ajouter une méthode calculant la moyenne des valeurs des cellules. ● Ajouter une méthode permettant d’inverser

En consid´erant que la liste la plus simple est la liste vide (not´ee [ ]), qui ne contient aucun ´el´ement, on peut donner une d´efinition r´ecursive aux listes

Exercice 1 Écrire une unité que vous appelez liste, qui importe l'unité vect vue dans le TP précédent, dans laquelle vous déclarez le type RefCellule d'entiers et vous implantez

Les listes sont des structures de données informatiques qui permettent, au même titre que les tableaux par exemple, de garder en mémoire des données en respectant un certain ordre :

Les listes sont des structures de données informatiques qui permettent, au même titre que les tableaux par exemple, de garder en mémoire des données en respectant un certain ordre :

• Liste gardée au début : toute liste contient une première paire (sans élément).. • Liste avec référence vers début

debut qui contient l’adresse 15, elle-même ramenée par la fonction malloc().. 2 Il reste à remplir les composantes de la cellule. Notamment si l’on accède à debut, on pourra