PT – IC STRUCTURE DE PILE
I. Structures de données
1) Généralités
En informatique, il est souvent important de commencer par se poser la question de comment organiser les
données que l’on va exploiter. L’objet informatique général qui permet de stocker des données s’appelle une
structure de donnée, caractérisée par les opérations qu’elle permet, et le coût de ces opérations. D’un point
de vue théorique, les principales sont :
Le tableau : C’est une structure de taille fixe, qui contient un certain nombre d’objets identiques. On accède
à n’importe quel élément en temps constant, mais on ne peut pas insérer ni supprimer d’élément;
La liste (ou liste chaînée) : Dans cette structure, chaque élément se termine par un lien vers l’élément sui-
vant. L’intérêt est que l’insertion ou la suppression d’un élément se fait en temps constant, alors que l’accès
à un élément se fait en O(n) où nest la taille de la liste;
Les ensembles : Ces structures permettent de faire rapidement des opérations comme l’intersection, la réunion
ou le test d’appartenance.
La pile : C’est l’objet du chapitre : on la détaillera plus loin.
En Python, le tableau correspond à un array du module numpy. Par contre, les list de Python sont des objets
qui tiennent à la fois du tableau (on accède directement à n’importe quel élément), de la liste chaînée (les
éléments n’ont pas besoin d’être tous identiques, et on peut changer la taille en temps amorti constant) et,
comme on va le voir, de la pile.
2) La structure de pile
Cette structure correspond exactement à l’idée intuitive que l’on s’en fait : une pile d’assiette (ou de papiers,
ou de cartes...) posée sur une table. En particulier, on ne peut accéder qu’au dernier élément que l’on a empilé,
qu’on appelle le sommet de la pile. ↑↓
C
B
A
Par exemple, si on empile successivement A, puis B, puis C, on obtient la situation ci-contre. On a
alors le choix entre deux opérations : empiler un quatrième objet D ou dépiler C. Si on veut accéder à
l’élément A, il faut commencer par dépiler C, puis B.
Ce type de structure de donnée est fondamental en informatique. Au niveau du langage machine, il sert à
gérer les appels à une fonction et le passage de paramètre. Plus proche de l’utilisateur, on le retrouve dans
tous les contextes ou on a un bouton « annuler » ou « revenir à la page précédente ».
On résume souvent le comportement d’une pile sous la forme « dernier arrivé, premier sorti » ou en anglais
« Last In, First Out » que l’on résume par l’acronyme LIFO. Il existe aussi une structure de file d’attente où le
premier arrivé est le premier sorti (First In, First Out ou FIFO). On parle dans ce cas de structure de file, mais
ce n’est pas directement au programme. On rencontre ces structures par exemple dans les serveurs d’impres-
sion d’une imprimante réseau, on dans un parcours d’arbre en largeur (mais là encore on sort du cadre du
programme).
II. Opérations sur une pile
Une pile est caractérisée par quatre opérations qui doivent prendre un temps constant (autrement dit avoir
une complexité en O(1)), indépendamment de la taille de la pile :
•creerPile() : renvoie une nouvelle pile vide;
•empiler(p, x) : empile x sur la pile p;
•depiler(p) : dépile et renvoie le sommet de la pile p;
•estVide(p) : indique si la pile p est vide.
1/4 DELAY – Paul Constans