You are on page 1of 5

Notes de Cours Algorithmes et Structures de Donnes

USTO LMD S3-S4

CHAPITRE II
STRUCTURES SEQUENTIELLES : LISTES, PILES ET FILES
Les structures de donnes spcifient la manire de reprsenter les donnes dun problme qui peut tre rsolu par ordinateur laide dun algorithme. Le choix dune structure de donnes doit prendre en considration la taille mmoire ncessaire son implmentation ainsi que sa facilit daccs. Une structure de donnes peut tre choisie indpendamment du langage de programmation qui est utilis pour lcriture du programme manipulant ses donnes. Ce langage est suppos offrir, dune faon ou dune autre, les mcanismes ncessaires pour dfinir et manipuler ces structures de donnes. Les langages de programmation modernes permettent dattribuer et manipuler la mmoire disponible de la machine sous forme de variables isoles les unes des autres, sous forme de tableaux, de pointeurs indiquant la localisation dans la mmoire de lobjet qui nous intresse ou laide de structures prdfinies plus complexes. Dans le cas des variables isoles ou des tableaux statiques, la place en mmoire est attribue par le compilateur et ne peut faire lobjet de modification pendant lexcution du programme. Cependant dans le cas de tableaux dynamiques ou listes chanes, lallocation de la mmoire ncessaire est effectue pendant lexcution et par consquent, elle peut augmenter ou diminuer selon le besoin. Les structures de donnes classiques peuvent tre classes en trois catgories distinctes : les structures linaires ou squentielles : Ce sont les structures qui peuvent tre reprsentes par des listes linaires telles que les tableaux ou des listes chanes ayant une seule dimension. Dans cette catgorie, il y a lieu de citer les piles, pour lesquelles les donnes peuvent tre ajoutes ou supprimes partir dune mme extrmit ; et les files o les donnes peuvent tre ajoutes partir dune extrmit tandis quelles sont supprimes de lautre extrmit. les structures arborescentes et en particulier les arbres binaires. les structures relationnelles qui prennent en compte des relations existant ou non entre les entits quelles dcrivent.

Les structures de donnes squentielles ou linaires (objet de ce chapitre) sont appeles ainsi parce que les donnes sont organises sous forme dune liste les unes derrires les autres. Elles peuvent tre reprsentes laide dun tableau ou sous forme dune liste chane.

I. LISTES
Une liste est une suite ordonne dlments dun type donn et elle peut contenir zro, un ou plusieurs lments. Exemples : -

(3, 5, 7, 9, 12) est une liste dentiers (Printemps, Et, Automne, Hiver) est la liste des saisons de lanne.

Le nombre dlments dune liste est appel longueur de la liste. Par consquent, une liste vide est de longueur nulle. Le premier lment de la liste est appel la tte de la liste. La queue dune liste est dfinie comme tant son dernier lment pour certains ou bien la liste des lments obtenue par la suppression de la tte de la liste, par dautres. Les listes dont les lments peuvent tre ordonns (par une relation dordre totale) sont les listes les plus utilises en pratique telles que les entiers, chanes de caractres, etc. 10

Notes de Cours Algorithmes et Structures de Donnes

USTO LMD S3-S4

I.1. Oprations sur les listes


Il y a lieu de citer les quatre oprations classiques suivantes quon peut effectuer sur les listes : - Insertion : Il sagit dinsrer un lment au dbut, la fin ou bien entre deux lments conscutifs de la liste. - Suppression : Il sagit de supprimer un lment quelconque de la liste, - Recherche : Il sagit de renvoyer la valeur vrai ou faux selon quun lment donn, appel cl de recherche, existe ou non dans la liste. Cette opration peut aussi renvoyer ladresse de llment recherch sous forme dun indice dun tableau ou dun pointeur. - Concatnation : Il sagit de construire une liste en juxtaposant les lments de deux listes distinctes.

I.2. Implmentation dune liste laide dun tableau


Il sagit de reprsenter une liste par un tableau dont lindice de dbut est fix 0 ou 1. Les lments sont ainsi stocks dans des cellules (du tableau) contigus. Dans cette forme de reprsentation, une liste peut tre traverse et de nouveaux lments peuvent tre supprims de, ou ajouts , la fin de la liste ( condition quon sache le nombre dlments quelle contient et pourvu quil ny ait pas de dpassement de la taille maximale dclare). Linsertion dun lment au milieu de la liste peut tre problmatique, car on doit prendre soin de dcaler tous les lments suivant la position dinsertion (vers la queue) pour pouvoir placer le nouvel lment. La suppression dun lment du milieu de la liste ncessite aussi le dplacement des lments (vers la tte) partir de la position de suppression. Dans cette forme dimplmentation, on dfinit le type LISTE comme tant une structure (struct C/C++) ou enregistrement (record en Pascal) ayant deux champs. Le premier est un tableau dlments du mme type que celui des lments de la liste dont la taille est fixe au maximum dlments que la liste peut en avoir. Le second champ est un entier qui reprsente la position du dernier lment de la liste. Naturellement, il y a une correspondance entre le ime lment de la liste et le ime lment du tableau. Les dtails dimplmentation dune liste sous forme dun tableau en langage C/C++ sont comme suit :

I.3. Implmentation dune liste laide dune liste chane


Une liste chane est forme dun ensemble de blocs ou cellules de mme type. Chaque bloc contient la fois les donnes de la liste ainsi que ladresse du bloc qui le succde dans la liste. La figure suivante illustre une liste contenant les jours de cours : Adresse de tte Mardi Jeudi Adresse nulle

La cellule qui se trouve ladresse dbut contient la tte de la liste et le dernier bloc a une adresse ayant la valeur nulle qui signifie quil ny a pas de cellules la succdant. Par consquent une liste vide a une adresse dbut qui est nulle. Lavantage dutiliser une liste chane au lieu dun tableau pour reprsenter une liste est clair. Elle nous permet dviter: - lutilisation de structure mmoire contigu qui ncessite un dcalage lors de la procdure dinsertion ou de suppression, - la rservation dune longueur maximale de la liste. Pour accder aux diffrents lments dune liste chane, on commence par ladresse dbut (tte) qui permet daccder au premier bloc ou cellule. En accdant au premier bloc de la liste, on peut donc lire son contenu qui comprend, entre autre, ladresse du deuxime bloc qui nous permet son tour daccder au deuxime bloc et ainsi de suite. Le dernier bloc de la liste doit contenir une adresse spciale nous permettant de savoir quil sagit du dernier lment de la liste. Cette adresse est appele nil, NULL, ou null dans les diffrentes implmentations de langages de programmation. 11

Notes de Cours Algorithmes et Structures de Donnes

USTO LMD S3-S4

Les dtails dimplmentation dune liste chane contenant des entiers peuvent tre dfinis en C/C++ comme suit :

VARIANTES DE LA REPRESENTATION CHAINEE DES LISTES a) Liste chane avec lment fictif
Pour viter un test spcial pour linsertion et la suppression en dbut de liste, la liste est reprsente sous forme homogne. Adresse de tte
15 25 13

Adresse nulle

b) Liste doublement chane


Dans certaines applications, on dsire traverser une liste chane dans les deux directions. Etant donn un lment de la liste on dsire se dplacer vers son successeur ainsi que vers son prdcesseur dune manire efficace et rapide. Adresse de tte
15 25 13

Adresse nulle

Ceci peur tre ralis en dfinissant deux pointeurs dans la structure Bloc de la manire suivante : Les procdures dinsertion et de suppression doivent tre modifies pour tenir compte du pointeur prec de la manire suivante : Remarque : Le parcours des listes peut tre encore facilit avec les listes circulaires (simple ou double).

I.4. Rprsentation des pointeurs laide des tableaux


Certains langages (Ex. Fortran) ne permettent pas la manipulation de pointeurs. Cependant la notion de chanage peut tre implante sous forme de tableau o le pointeur est remplac par un entier qui reprsente lindice de lendroit dans le tableau. Exemple : Dtails dimplmentation :

II. PILES
Les piles sont des listes particulires dans lesquelles les insertions ainsi que les suppressions se font toujours la mme extrmit de la structure appele sommet. Les piles sont parfois appeles des structures LIFO (Last In First Out) signifiant le dernier qui arrive est le premier qui sort. Le type abstrait de donnes Pile comprend les oprations suivantes : Initialisation dune pile (InitPile) : cest exactement la mme fonction pour les listes Une fonction SommetDePile qui retourne le sommet de la pile Une procdure de dpilement Depiler permettant la suppression de llment se trouvant au sommet de la pile (POP en Anglais) Une procdure dempilement Empiler permettant linsertion dun lment au sommet de la pile (PUSH en Anglais) Une fonction PileVide retournant vrai si la pile est vide faux sinon. 12

Notes de Cours Algorithmes et Structures de Donnes

USTO LMD S3-S4

II.1. Implmentation dune pile laide dun tableau


Les procdures et fonctions dcrites prcdemment implmentant les oprations classiques sur une liste laide dun tableau ne sadaptent pas trs bien en terme defficacit pour les piles, mme si ces dernires ne sont quun cas particulier des listes en gnral. En effet, les oprations de dpilement et empilement ncessitent toujours le dplacement de tous les lments de la structure et par consquent la complexit est proportionnelle la taille de la structure. Cet inconvnient peut tre vit simplement en tenant compte du fait que les oprations dempilement et dpilement prennent place toujours au sommet de la pile et par consquent, dans une implmentation efficace dune pile laide dun tableau, le sommet de la pile doit tre le dernier lment (llment de rang le plus grand) du tableau limplmentant. La dclaration dune pile contenant des entiers peut se faire comme suit : Par consquent, une instance de la pile dclare est la suite Elements[Sommet], Elements [Sommet+1],,Elements [LongMax-1] comme indiqu dans la figure suivante :

6 8 2

LongMax-1

.. Espace vide

6
Sommet

II.2. Implmentation dune pile laide dune liste chane


Toutes les procdures et fonctions dcrites prcdemment pour les listes en gnral restent valables pour les piles dans le cas o on utilise les listes chanes. Exercice : Ecrire en C/C++ les routines Empiler/Depiler dans le cas de reprsentation de pile par une liste chane. APPLICATIONS - Appels de fonctions : quand une fonction est appele, les paramtres (incluant ladresse de retour) doivent tre passs la fonction appelante. Si ces paramtres sont sauvegards dans une mmoire fixe, alors la fonction ne peut pas tre appele rcursivement du moment que la premire adresse va tre crase par le deuxime retour dadresse avant que la premire ne soit utilise. Les piles sont donc souvent ncessaires pour rendre itratif un algorithme rcursif. - Analyse syntaxique : qui est une phase de la compilation qui ncessite une pile. Nous prenons par exemple le problme de la reconnaissance des mots bien parenthss o on doit crire un programme qui accepte les mots comme (), ()(()) ou ((()())()) et rejette les mots comme )(, ()(() ou ((()()))). Nous stockons les parenthses ouvrantes non encore refermes dans une pile de caractres, Le programme lit caractre par caractre le mot entr : si c'est une ouvrante, elle est empile ; si c'est une fermante, l'ouvrante correspondante est dpile. Le mot est accept si : la pile n'est jamais vide la lecture d'une fermante ; et si la pile est vide lorsque le mot a t lu.

13

Notes de Cours Algorithmes et Structures de Donnes

USTO LMD S3-S4

III. FILES
Les files constituent un autre cas particulier des listes o les lments sont insrs une extrmit (la queue de la file) et la suppression se fait lautre extrmit (la tte de la file). Les files sont aussi appeles structures FIFO (First In First Out) c'est--dire le premier qui arrive cest le premier qui sort . Les oprations classiques pour les files sont similaires celles pour les piles sauf que cette fois-ci les insertions se font la queue de la file au lieu de la tte. Il convient aussi de changer la terminologie prcdente (utilise pour les piles) dans le cas des files. Les oprations classiques sur les files peuvent tre dcrites comme suit : - InitialiserFile : permet de crer une file vide. - TeteDeFile : retourne le premier lment de la file. - QueueDeFile : retourne le dernier lment de la file. - Enfiler : insre un nouvel lment la fin de la file (EnQueue). - Defiler : supprime le premier lment de la file (DeQueue). - FileVide : renvoie vrai si la file est vide et faux sinon.

III.1. Implmentation dune file laide dun tableau


Pour des raisons defficacit, une file est gnralement implmente laide dun tableau circulaire . On garde lindice de tete et de queue de file. Si lun deux arrive la fin du tableau, il retourne lindice de dpart. Exercice : Proposer une implmentation dune file laide dun tableau circulaire et donner les dtails des routines correspondantes.

III.2. Implmentation dune file laide dune liste chane


Comme pour les piles, les routines dimplmentation dune liste laide dune liste chane restent valables sur les files qui peuvent tre considres comme un cas particulier des listes. Cependant, on peut utiliser le fait que les insertions se font toujours la queue de la liste pour rendre la procdure Enfiler plus efficace et aboutir des conomies en termes de temps. En effet, au lieu de parcourir la liste du dbut jusqu' la fin chaque fois quon veut ajouter un lment, c'est--dire enfiler un lment, on peut garder un pointeur sur la queue de la liste (dernier lment). Bien entendu, on doit aussi garder un pointeur sur la tte de celle-ci qui est utilis pour la fonction TeteDeFile et aussi la procdure Defiler.
TeteDeFile

15

39

11

QueueDeFile

Tte de File
15 39

Queue de File
11 null

Les dtails dimplmentation peuvent tre dcrits comme suit : APPLICATIONS Lapplication la plus classique est la file dattente, et elle sert beaucoup en simulation. Elle est aussi trs utilise aussi bien dans la vie courante que dans les systmes informatiques. Par exemple, elle modlise la file dattente des clients devant un guichet, les travaux en attente dexcution dans un systme de traitement par lots, ou encore les messages en attente dans un commutateur de rseau tlphonique. On retrouve galement les files dattente dans les programmes de traitement de transactions telle que les rservations de siges davion ou de billets de thtre. 14

You might also like