Vous êtes sur la page 1sur 8

Chapitre 1

LISTES LINÉAIRES

1.1. Introduction
Nous présentons dans ce chapitre les listes linéaires chaînées. Une liste linéaire serait définie par une suite de cellules.
Une cellule est définie par deux champs : le premier champs indique le contenu de la cellule, et le deuxième champs est une
référence vers une autre cellule. Chaque cellule est associée à une adresse dans la mémoire.
Nous définissons un nouveau type qu’on appellera RefCellule qui signifie que la variable associée contiendra une adresse de
mémoire.

1.1.1. Définition de la structure


type Cellule de T = structure
info : T
suivant : RefCellule de T
type Refcellule de T = ↑ Cellule de T

1.1.2. Gestion dynamique de la mémoire


Pour pouvoir manipuler les liste nous supposons qu’on dispose des procédures suivantes :
nouveau(L) cree une cellule et stocke une référence de type RefCellule de T dans L. Cette cellule va contenir un
élément de type T. T correspond au mot clé qui définit le type. Quand on crée une cellule, le champs suivant est
affecté à nil par default.
laisser(L) détruit une cellule dont la référence est donnée dans L.
Nous remarquons qu’il est suffisant d’avoir la référence de la première cellule de la liste pour pouvoir manipuler la liste
entière et ceci en accédant au champ suivant.

1.1.3. Création d’une liste


Nous proposons un algorithme qui crée une liste chaînée de longueur donnée à partir des valeurs lues par l’utilisateur.
Nous présentons ensuite l’algorithme qui permet de construire une liste chaînée à partir d’un vecteur donné.

1.1.4. Parcours d’une liste


Nous supposons que nous disposons d’une procedure traiter qui traite une cellule en connaissant sa référence. Nous
présentons deux versions pour le parcours d’une liste de gauche à droite.

1.2. Quelques algorithmes sur les listes

1
1.2. QUELQUES ALGORITHMES SUR LES LISTES CHAPITRE 1. LISTES LINÉAIRES

Algorithme 1 Création d’une liste à partir des valeurs entrées par l’utilisateur, la liste est crée à l’envers
PROCEDURE creerliste (E l : ENTIER, S liste : RefCellule de T)
VAR r : RefCellule de T
x:T
i : ENTIER
liste ← nil
i←1
TANTQUE i <= l FAIRE
nouveau(r)
lire(x)
r ↑ .inf o ← x
r ↑ .suivant ← liste
liste ← r
i←i+1
FIN TANTQUE

Algorithme 2 Construction d’une liste à partir d’un vecteur


PROCEDURE vecteurliste (E l : ENTIER,E V : VECTEUR de T, ES liste : RefCellule de T)
VAR r : RefCellule de T
i : ENTIER
liste ← nil
i←l
TANTQUE i >= 1 FAIRE
nouveau(r)
r ↑ .V [i]
r ↑ .suivant ← liste
liste ← r
i←i−1
FIN TANTQUE

Algorithme 3 Parcours d’une liste


PROCEDURE parcours (E liste : RefCellule de T)
VAR l : RefCellule de T
l ← liste
TANTQUE l <> nil FAIRE
traiter(l)
l ← l ↑ .suivant
FIN TANTQUE

Maria Malek - EISTI - CPI1 2


CHAPITRE 1. LISTES LINÉAIRES 1.2. QUELQUES ALGORITHMES SUR LES LISTES

Algorithme 4 Parcours d’une liste - version récursive


PROCEDURE parcoursR (E liste : RefCellule de T)
VAR l : RefCellule de T
l ← liste
SI l <> nil ALORS
traiter(l)
l ← l ↑ .suivant
parcoursR(l)
FIN SI

Algorithme 5 Afficher le contenu d’une liste donnée


PROCEDURE ecritListe (E liste : RefCellule de T)
VAR v : T
l : RefCellule de T
l ← liste
SI l <> nil ALORS
v ← l ↑ .inf o
ecrire(v)
l ← l ↑ .suivant
ecritListe(l)
FIN SI

Algorithme 6 Calcul de la longueur d’une liste


FONCTION longueur (liste : RefCellule de T) : ENTIER
VAR n : ENTIER
l : RefCellule de T
l ← liste
n←0
TANTQUE l <> nil FAIRE
n←n+1
l ← l ↑ .suivant
FIN TANTQUE
RETOURNER n

Maria Malek - EISTI - CPI1 3


1.2. QUELQUES ALGORITHMES SUR LES LISTES CHAPITRE 1. LISTES LINÉAIRES

Algorithme 7 calcul du nombre d’occurence d’un élément dans une liste


FONCTION nbOcc (liste : RefCellule de T, V :T) : ENTIER
VAR nb : ENTIER
e :T
l : RefCellule de T
l ← liste
nb ← 0
TANTQUE l <> nil FAIRE
e ← l ↑ .inf o
SI V=e ALORS
nb ← nb + 1
FIN SI
l ← l ↑ .suivant
FIN TANTQUE
RETOURNER nb

Algorithme 8 Accès à un élément par sa position


PROCEDURE accesk (E liste : RefCellule de T, E k : ENTIER, S r : RefCellule de T, S trouve :BOOLEEN)
VAR i : ENTIER
l : RefCellule de T
l ← liste
i←1
TANTQUE i < k ET l <> nil FAIRE
i←i+1
l ← l ↑ .suivant
FIN TANTQUE
trouve ← ((i = k)ET (l <> nil))
r←l

Maria Malek - EISTI - CPI1 4


CHAPITRE 1. LISTES LINÉAIRES 1.2. QUELQUES ALGORITHMES SUR LES LISTES

Algorithme 9 Accès à un élément par son contenu - première occurrence


PROCEDURE accesV (E liste : RefCellule de T, E V : T, S r : RefCellule de T, S acces :BOOLEEN)
VAR trouve : BOOLEEN
l : RefCellule de T
l ← liste
trouve ← F AU X
TANTQUE non trouve ET l <> nil FAIRE
SI l ↑ .inf o = V ALORS
trouve ← V RAI
SINON
l ← l ↑ .suivant
FIN SI
FIN TANTQUE
acces ← trouve
r←l

Algorithme 10 Accès à un élément par son contenu - première occurrence - version récursive
FONCTION accesVR (E liste : RefCellule de T, E V : T) : RefCellule de T
SI liste = nil ALORS
RETOURNER nil
SINON
SI liste ↑ .inf o = V ALORS
RETOURNER liste
SINON
RETOURNER accesV R(liste ↑ .suivant)
FIN SI
FIN SI

Maria Malek - EISTI - CPI1 5


1.2. QUELQUES ALGORITHMES SUR LES LISTES CHAPITRE 1. LISTES LINÉAIRES

Algorithme 11 Accès à un élément par son contenu dans une liste triée - première occurrence - version récursive
FONCTION accesVRT (E liste : RefCellule de T, E V : T) : RefCellule
SI liste = nil ALORS
RETOURNER nil
SINON
SI liste ↑ .inf o < V ALORS
RETOURNER accesV RT (liste ↑ .suivant)
SINON
SI liste ↑ .inf o > V ALORS
RETOURNER nil
SINON
RETOURNER liste
FIN SI
FIN SI
FIN SI

Algorithme 12 Insertion d’un élément en tête de liste


PROCEDURE insererTete (ES liste : RefCellule de T, E V : T)
VAR l : RefCellule de T
nouveau(l)
l ↑ .inf o ← V
l ↑ .suivant ← liste
liste ← l

Algorithme 13 Insertion d’un élément en fin de liste


PROCEDURE insererFin (ES liste : RefCellule de T, E V : T)
VAR l,der : RefCellule de T
SI liste = nil ALORS
insererT ete(liste, V )
SINON
der ← dernier(liste)
nouveau(l)
l ↑ .inf o ← V
l ↑ .suivant ← nil
der ↑ .suivant ← l
FIN SI

Maria Malek - EISTI - CPI1 6


CHAPITRE 1. LISTES LINÉAIRES 1.2. QUELQUES ALGORITHMES SUR LES LISTES

Algorithme 14 Trouver la référence du dernier élément dans une liste


FONCTION dernier (liste : RefCellule de T) : RefCellule de T
VAR l : RefCellule de T
l ← liste
TANTQUE l ↑ .suivant <> nil FAIRE
l ← l ↑ .suivant
FIN TANTQUE
RETOURNER l

Algorithme 15 Insertion d’un élément à la kième position, refk est une fonction qui renvoie la référence de la cellule numero
k si elle existe
PROCEDURE insererK (ES liste : RefCellule de T, E k : ENTIER, E V : T, S possible : BOOLEEN)
VAR l,preced : RefCellule de T
possible ← F AU X
SI k=1 ALORS
insererTete(liste,V)
possible ← V RAI
SINON
preced ← ref k(liste, k − 1)
SI preced <> nil ALORS
nouveau(l)
l ↑ .inf o ← V
l ↑ .suivant ← preced ↑ .suivant
preced ↑ .suivant ← l
possible ← V RAI
FIN SI
FIN SI

Algorithme 16 Suppression de la tête d’une liste


PROCEDURE supptête (ES liste :RefCellule de T)
VAR l : RefCellule de T
l ← liste
liste ← l ↑ .suivant
laisser(l)

Maria Malek - EISTI - CPI1 7


1.2. QUELQUES ALGORITHMES SUR LES LISTES CHAPITRE 1. LISTES LINÉAIRES

Algorithme 17 Suppression de l’élément du rang k


PROCEDURE suppK (ES liste :RefCellule de T, E k : ENTIER, S possible : BOOLEEN)
VAR l,preced : RefCellule de T
SI k=1 ALORS
possible ← V RAI
supptête(liste)
SINON
possible ← F AU X
preced ← ref k(liste, k − 1)
SI preced <> nil ALORS
l ← preced ↑ .suivant
SI l<>nil ALORS
possible ← V RAI
preced ↑ .suivant ← l ↑ .suivant
laisser(l)
FIN SI
FIN SI
FIN SI

Algorithme 18 Suppression de l’élément elem,refEA est une fonction qui renvoie la référence de la cellule avnt celle
contenant l’élément recherché
PROCEDURE suppE (ES liste :RefCellule de T, E elem : T, S possible : BOOLEEN)
VAR l,preced : RefCellule de T
possible ← F AU X
l ← liste
SI l ↑ .suivant) = nil ET l ↑ .inf o = elem ALORS
supptête(l)
SINON
preced ← Ref EA(liste, elem)
SI preced <> nil ALORS
l ← preced ↑ .suivant
SI l<>nil ALORS
possible ← V RAI
preced ↑ .suivant ← l ↑ .suivant
laisser(l)
FIN SI
FIN SI
FIN SI

Maria Malek - EISTI - CPI1 8