PSI - 2014-2015 1
Structures de données linéaires
1 Introduction
Lorsque l’on programme ou que l’on décrit un algorithme, on a l’habitude d’utiliser des types
(entiers, réels, caractères, chaines, listes . . . ). Tous les langages de programmation ne possèdent
pas les mêmes types (cf les entiers et entiers longs entre les versions 2 et 3 de Python). Il n’est pas
nécéssaire de savoir comment est représenté un tel type du moment que l’on sait le manipuler.
Les types prédéfinis sont peu nombreux, c’est pourquoi des constructeurs de types permettent
de définir des types plus complexes, et donc des structures de données.
Une structure de données est l’implémentation explicite d’un ensemble organisé d’objets avec
la réalisation des opérations d’accès, de construction et de modification afférentes. Un type
de données abstrait est la description d’un ensemble organisé d’objets et des opérations de
manipulations sur cet ensemble. On s’intéresse ici aux types de données linéaires : on se donne
une suite finie (e1, e2, . . . , en)d’éléments d’un ensemble E. On ne dit rien sur l’accès à ces
éléments de manière générale. On parle de liste linéaire (la liste est vide si n= 0). Il existe
plusieurs variantes des listes linéaires et quelques implémentations usuelles. Dans une liste, on
distingue les deux côtés, le début et la fin, et les opérations de manipulation peuvent se faire de
chacun des ceux côtés.
•Les piles sont des listes où l’insertion et la suppression ne se font que d’un seul et même
côté.
•Les files permettent l’insertion d’un côté et la suppression de l’autre.
•Les files bilatères permettent l’insertion et la suppression des deux côtés.
•Les listes pointées autorisent des insertions et suppressions également « à l’intérieur »
et pas seulement aux extrémités. C’est le type de liste de Python, mais on appelle plus
souvent cela un tableau. Certaines applications ont besoin de cet accès direct (tri bulles
par exemple), mais pas tous (tri insertion).
2 Structure de pile
On parle de pile ou LIFO (Last In, First Out). Les éléments d’une pile sont organisés comme
une liste linéaire. L’accès aux éléments se fait d’un seul côté. C’est vraiment l’image de la pile
que l’on se fait, par exemple une pile d’assiettes posées sur la table ou une pile de cartes.
Les opérations possibles sont :
•Construire une pile vide.
•Tester si la pile est vide
•Ajouter un élément dans la pile, on dit empiler.
•Accéder au dernier élément ajouté dans la pile. C’est le sommet.
•Supprimer le dernier élément ajouté dans la pile, on dit dépiler (bien sur, la pile doit être
non vide).
Remarque : pour l’opération dépiler, deux choix sont possibles : on peut ne rien renvoyer, ou
renvoyer l’élément dépilé
Propriété : Sur une pile, l’enchainement empiler-dépiler laisse la pile invariante.
3 Implémentation par les listes
3.1 Piles de capacité finie
La manière la plus simple consiste à utiliser une liste de longueur N+ 1 où Nest le nombre
maximal d’éléments pouvant être stockés dans la pile. Les éléments sont rangés dans l’ordre où