Académique Documents
Professionnel Documents
Culture Documents
1
2022/2023
Algorithmique
2
Introduction
Objectif
voir comment spécifier de nouveaux types qui pourront être utilisés
dans un algorithme
3
Introduction…
• Dans un programme de bonne taille, il faut identifier et spécifier
les structures de données assez tôt dans le processus de
développement
l Une fois la donnée complexe identifiée, nous nous intéressons à
sa spécification.
l Le but de la spécification est de définir l’interface d’utilisation
(représentation externe) de cette donnée et de lui donner une
sémantique abstraite indépendante de l’implantation
(représentation interne).
4
Définition
l Un type abstrait est une spécification de données décrivant
l’ensemble des opérations associées à ces données et
l’ensemble des propriétés de ces opérations.
l Nous pouvons distinguer deux sortes de types abstraits :
5
Caractéristiques
l Un Type de Données Abstrait (TDA) est caractérisé par :
ü Le type des données qu'il manipule (ce qui définit son état ou
caractéristiques).
6
Caractéristiques…
l Un TAD spécifie:
7
Opérations sur les types
abstraits
l Les opérations sont divisées en plusieurs types :
ü les constructeurs : ils permettent de créer un nouvel “objet”
du type que l’on est en train de définir. Il peut y avoir plusieurs
constructeurs :
Ø nouvel objet neutre ou vide,
Ø nouvel objet paramétré,
Ø nouvel objet aléatoire, ...
ü les modificateurs : ils permettent de modifier les objets et
leur contenu.
ü les observateurs : ils donnent des informations sur l’état de
l’objet (valeurs, affichages, ...)
8
Les structures de données
l Abstraits en 4 types de structures :
généraux).
9
Algorithmique
Les listes
10
Introduction
l Deux catégories de structures de données :
§ Structure de données linéaire : relier des éléments en
séquence
• Tableau
• Liste
• Pile
• File
§ Structure de données non linéaire : relier un élément à
plusieurs autres éléments
• Arbre
11
Introduction…
• Une liste est un regroupement ordonné de données effectué de
manière à ce que chaque composante sache où se trouve la
suivante.
l L'accès aux éléments d'une liste se fait de manière séquentielle
è Chaque élément permet l'accès au suivant
l Chaque élément contient :
ü Une valeur
ü Un lien sur la composante suivante
• Une liste est accessible par l’adresse de sa première
composante.
12
Introduction…
l Structure linéaire souple
§ peut grandir ou rétrécir à volonté
§ ses élément peuvent être insérés ou supprimés à n’importe
quel endroit
• Deux types de listes :
§ Liste statique (on ne peut pas modifier la taille)
§ Liste dynamique (peut être étendue)
l Techniques de représentation de la structure liste :
§ Représentation statique (contiguë) à l’aide du tableau
§ Représentation dynamique (chainée) avec des pointeurs
(simple, double et circulaire)
13
Liste chaînée
Une liste chaînée :
• est une structure linéaire qui n'a pas de dimension fixe à sa
création.
• ses éléments de même type sont éparpillés dans la mémoire
et reliés entre eux par des pointeurs.
• est accessible uniquement par sa tête de liste c’est-à-dire son
premier élément.
• la séquence est mise en œuvre par le pointeur porté par
chaque élément qui indique l'emplacement de l'élément
suivant.
• le dernier élément de la liste ne pointe sur rien (Null).
• On accède à un élément de la liste en parcourant les éléments
grâce à leurs pointeurs.
14
Liste chaînée…
Dans une liste chaînée :
• Les éléments sont chainés entre eux : chaque élément de la
liste contient une référence à l’élément suivant sous la forme
d’un pointeur.
• La position d’un élément de la liste est représentée par un
pointeur.
• La dernier élément de la liste contient un pointeur ayant la
valeur Null.
• Le premier élément de la liste est toujours accessible par un
pointeur noté généralement premier.
• La marque de fin d’une liste est repérée par une valeur de
pointeur à Null
15
Liste Simplement Chaînée
• Chaque élément est relié à son successeur par un simple lien.
Type En C :
Element = Structure struct Element {
Val : Type (Exemple : Entier) Type val;
Suivant : ^ Element struct Element * Suivant;
Fin Structure };
Type Liste = ^ Element struct Element *Liste;
17
Liste Simplement Chaînée…
l Une liste vide est initialisée à Null
§ L : Liste
§ L ← Null
18
représentant graphiquement l'organisation des éléments de la liste chaînée.
Exemple:
Reprenons l'exemple du tableau paragraphe 1.1. page 1. La liste chaînée corres
Liste
être : Simplement Chaînée…
3 @:2
Tête 10
1
@ :3 @:4 @:1
12 14 24
4 2 Nil
Null
1er1erélément
- LeLe élémentdedelalaliste
listevaut
vaut1212ààl'adresse
l'adresse33 (début
(début de
de la
la liste
liste chaînée)
chaînée)
- LeLe22 e élément de la liste vaut 14 à l'adresse 4 (car le pointeur de la
ème
élément de la liste vaut 14 à l'adresse 4 (car le pointeur de la cellule d’adress
cellule d’adresse
e 3 est égal à 4 )
Le 3 élément de la liste vaut 10 à l'adresse 2 (car le pointeur de la cellule d’adress
- Le 3ème
e
élément de la liste vaut 10 à l'adresse 2 (car le pointeur de la
Le 4d’adresse
cellule élément de la liste
4 est égal vaut
à 2 )24 à l'adresse 1 (car le pointeur de la cellule d’adress
- Le 4ème élément de valeur
Si P a pour la liste 3vaut 24 à l'adresse 1 (car le pointeur de lavaleur 2
Si P a pour
cellule d’adresse
P^.Info 2 est égal valeur
a pour à 1 ) 12 P^.Info a pour vale
P^.Suivant a pour valeur 4 P^.Suivant
19 a pour vale
Avant d'écrire des algorithmes manipulant une liste chaînée, il est utile de m
représentant graphiquement l'organisation des éléments de la liste chaînée.
Exemple:
Liste Simplement Chaînée…
Reprenons l'exemple du tableau paragraphe 1.1. page 1. La liste chaînée corres
être :
3 @:2
Tête 10
1
@ :3 @:4 @:1
12 14 24
4 2 Nil
Null
• Ajouter un élément.
• Supprimer un élément.
• Modifier un élément.
• ….
21
Liste Simplement Chaînée…
Création d’une liste
22
Liste Simplement Chaînée…
Tester si une liste est vide
23
Avant d'écrire des algorithmes manipulant une liste chaînée, il est utile de mo
représentant graphiquement l'organisation des éléments de la liste chaînée.
Exemple:
Liste Simplement Chaînée…
Reprenons l'exemple du tableau paragraphe 1.1. page 1. La liste chaînée corresp
être :
Insertion en tête
7 3 @:2
×
Tête Tête 10
1
@: 7 L
@ :3 @:4 @:1
X 12 14 24
4 2 Nil
Null
Exemple:
Liste Simplement Chaînée…
Reprenons l'exemple du tableau paragraphe 1.1. page 1. La liste chaînée correspondante pourrait
être :
Insertion en queue de liste P
(3) 9
3 @:2
Tête
L P 10 P elt
P
(1) (2) 1 (4) @: 9
@ :3 @:4 @:1
12 14 24 X
4 2 × 9
Nil
Null Null
26
Liste Simplement Chaînée…
Recherche si un élément ayant la valeur X existe ou non dans la
liste
Fonction Parcourir_Liste (L: Liste, X: Entier) : Booléen
Variables Trouve : booléen
P : Liste
Trouve ← Faux
P←L
Tant que (P != Null)
Si ( P^.val = X) alors Retourner (Vrai)
Sinon
P ← P^.suivant
FinSi
Fin Tant Que
Retourner (Trouve)
FinFonction
27
Liste Simplement Chaînée…
Affichage du contenu d’une liste
28
Fin Structure
Type
Element = Structure
Val : Type
Suivant : ^ Element
Precedent : ^ Element
Fin Structure
Type ListeDC = ^ Element
31
Liste Doublement Chaînée…
Création d’un élément : Liste contenant un seul élément
32
Liste Doublement Chaînée…
Insertion en tête
33
le pointeur de parcours a la valeur Nil.
Liste Circulaire
DEBUT
P ! Queue
TANT QUE P <> NIL FAIRE
• Une liste circulaire est une liste
Ecrire(P^.Info) dont le dernier élément pointe sur
P ! P^.Precedent
le premier.
FIN TANT QUE
FIN
• Elle peut être simplement ou doublement chaînée.
2.5. Listescellule
• La dernière chaînéesdecirculaires
la liste ne comporte pas Null comme
pointeur
Une liste sur l’élément
chaînée peut être suivant,
circulaire, mais
c'est à l’adresse
dire que le de la première
pointeur du dernier élément co
cellule dedulapremier.
l'adresse liste.
Exemples:
Ci-dessous l'exemple d'une liste simplement chaînée circulaire : le dernier élément pointe
Listepremier.
simplement chaînée circulaire : le dernier élément pointe
sur le premier.
Tête
3
@ :3 @ :25 @ :8 @ :56
12 4 10 24
25 8 56 3
34
Puis l'exemple d'une liste doublement chaînée circulaire. : Le dernier élément pointe sur le pr
et le premier élément pointe sur le dernier.
Ci-dessous l'exemple d'une liste simplement chaînée circulaire : le dernier élément
premier.
Tête
3
Liste Circulaire…
@ :3 @ :25 @ :8 @ :56
12 4 10 24
Liste
25 doublement chaînée
8 circulaire.
56 : Le dernier 3élément
pointe sur le premier, et le premier élément pointe sur le
Puis l'exemple d'une liste doublement chaînée circulaire. : Le dernier élément pointe
dernier.
et le premier élément pointe sur le dernier.
Tête Queue
3 56
@ :3 @ : 25 @:8 @ :56
56 3 25 8
12 14 10 24
25 8 56 3
WEBOGRAPHIE
http://www.siteduzero.com/tutoriel-3-36245-les-listes-chainees.html 35
http://liris.cnrs.fr/pierre-antoine.champin/enseignement/algo/listes_chainees/
http://deptinfo.cnam.fr/Enseignement/CycleA/SD/cours/structuress%E9quentiellescha
Exemples de fonctions en C
Déclaration et Initialisation d’une liste
#include <stdlib.h>
typedef struct Element T_element; /*déclaration du type T_element*/
struct Element
{
int val;
struct Element * suivant;
};
typedef T_element* Liste; /*déclaration du type liste*/
void main()
{
/* Déclarons 3 listes chaînées de façons différentes mais équivalentes */
Liste ma_liste1 = NULL;
T_element * ma_liste2 = NULL;
struct element * ma_liste3 = NULL;
……………….
} il est important de toujours initialiser la liste à NULL
36
Exemples de fonctions en C…
Ajout en tête d’une liste simplement chaînée
liste ajouterEnTete(Liste L, int valeur)
{
/* On crée un nouvel élément */
T_element* nouvelElement = malloc(sizeof(Element));