Vous êtes sur la page 1sur 11

Algorithmique Structures lin eaires [ls]

Cours, 22 novembre 2012

Table des mati` eres


1 Listes chain ees / ls00cours1 1.1 D enitions . . . . . . . . . . . . . . . . . . . . . 1.2 Formes dune liste chain ee . . . . . . . . . . . . 1.3 Algorithmes de manipulation des listes cha n ees 1.3.1 Recherche . . . . . . . . . . . . . . . . . 1.3.2 Insertion . . . . . . . . . . . . . . . . . . 1.3.3 Suppression . . . . . . . . . . . . . . . . 1.4 Comparaison entre tableaux et listes cha n ees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 3 4 4 4 5 5 7 7 7 9 9 9

2 Piles / sk00cours1 2.1 D enition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2 Repr esentation dune pile par tableau . . . . . . . . . . . . . . . . . . . . 3 Files / qu00cours1 3.1 D enition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Repr esentation dune le par tableau . . . . . . . . . . . . . . . . . . . .

Unisciel algoprog ls00acours, November 22, 2012

Structures lin eaires Algorithmique


Mots-Cl es Algorithmique, Structures lin eaires. Requis .

Introduction
Ce module d ecrit les structures lin eaires : listes, piles et les.

R ef erences g en erales
Aho-A1 Aho A.V., Ullmann J.D. Concepts fondamentaux de linformatique, Dunod 1993. Baynat-A1 Baynat B., Exercices et probl` emes dalgorithmique, Dunod 2010 (3` e edition).

Unisciel algoprog ls00acours, November 22, 2012

== Activit es Cours == 1
1.1

Listes chain ees / ls00cours1


D enitions

D enition Une liste cha n ee est une structure de donn ees dans laquelle les objets sont arrang es lin eairement, lordre lin eaire etant d etermin e par des pointeurs (ou r ef erences) sur les el ements. Chaque el ement de la liste, outre le champ cl e, contient un champ successeur qui est pointeur sur l el ement suivant dans la liste cha n ee. Si le champ successeur dun el ement vaut Nil, cet el ement na pas de successeur et est donc le dernier el ement ou la queue (tail ) de la liste. Le premier el ement de la liste est appel e la t ete (head ) de la liste. Une liste L est manipul ee via un pointeur vers son premier el ement, que lon notera t^ ete(L). Si t^ ete(L) vaut Nil, la liste est vide. Exemple La gure suivante pr esente un exemple de liste cha n ee et montre les cons equences des op erations dinsertion et de suppression sur une telle structure de donn ees. (a) initialement la liste cha n ee contient les valeurs 9, 6, 4 et 1 ; (b) etat de la liste cha n ee apr` es lop eration insertion(5) ; (c) etat de la liste cha n ee apr` es lop eration suppression(4).
(a) (b) t ete[L] t ete[L] 9 5 6 9 4 6 1 4 1

(c)

t ete[L]

Figure 1 Exemple de manipulation de liste cha n ee

1.2

Formes dune liste chain ee

Une liste cha n ee peut prendre plusieurs formes. Liste doublement cha n ee En plus du champ successeur, chaque el ement contient un champ pr ed ecesseur qui est un pointeur sur l el ement pr ec edant dans la liste. Si le champ pr ed ecesseur dun el ement vaut Nil, cet el ement na pas de pr ed ecesseur et est donc le premier el ement ou la t ete de la liste. Une liste qui nest pas doublement cha n ee est dite simplement cha n ee. Exemple La gure suivante pr esente un exemple de liste doublement cha n ee et montre les cons equences des op erations dinsertion et de suppression sur une telle structure de donn ees. (a) initialement la liste contient les valeurs 9, 6, 4 et 1 ; (b) etat de la liste apr` es lop eration Insertion(5) ; (c) etat de la liste apr` es lop eration Suppression(4).

Unisciel algoprog ls00acours, November 22, 2012


9 6 4 1

(a)

t ete[L]

(b)

t ete[L]

(c)

t ete[L]

Figure 2 Exemple de manipulation de liste doublement cha n ee Liste tri ee ou non Suivant que lordre lin eaire des el ements dans la liste correspond ou non a ` lordre lin eaire des cl es de ces el ements. Liste Circulaire Si le champ pr ed ecesseur de la t ete de la liste pointe sur la queue, et si le champ successeur de la queue pointe sur la t ete. La liste est alors vue comme un anneau.

1.3
1.3.1

Algorithmes de manipulation des listes cha n ees


Recherche

Lalgorithme rechercheListe(L,k) trouve le premier el ement de cl e k dans la liste L par une simple recherche lin eaire et renvoie un pointeur sur cet el ement. Si la liste ne contient aucun objet de cl e k, lalgorithme renvoie Nil. Fonction rechercheListe ( L : Liste ; k : El ement ) : It erateur D ebut | x <- t^ ete ( L ) | TantQue ( x <> Nil Et cl e ( x ) <> k ) Faire | | x <- successeur ( x ) | FinTantQue | Retourner ( x ) Fin Cet algorithme manipule aussi bien des listes simplement que doublement que simplement cha n ees. 1.3.2 Insertion

Etant donn e un el ement x et une liste L, lalgorithme insererListe ins` ere x en t ete de L. Action insererListe ( DR L : Liste ; x : El ement ) D ebut | successeur ( x ) <- t^ ete ( L ) | Si t^ ete ( L ) <> nil Alors | | pr ed ecesseur ( t^ ete ( L ) ) <- x | FinSi | t^ ete ( L ) <- x

Unisciel algoprog ls00acours, November 22, 2012 | Fin pr ed ecesseur ( x ) <- nil

Cet algorithme est ecrit pour les listes doublement cha n ees. Il sut dignorer les deux instructions concernant le champ pr ed ecesseur pour obtenir lalgorithme equivalent pour les listes simplement cha n ees. 1.3.3 Suppression

Lalgorithme supprimerListe elimine un el ement x dune liste cha n ee L. Cet algorithme a besoin dun pointeur sur l el ement x a ` supprimer. Si on ne poss` ede que la cl e de cet el ement, il faut pr ealablement utiliser lalgorithme rechercheListe pour obtenir le pointeur n ecessaire. Action supprimerListe ( DR L : Liste ; k : It erateur ) D ebut | Si pr ed ecesseur ( x ) <> Nil Alors | | successeur ( pr ed ecesseur ( x ) ) <- successeur ( x ) | Sinon | | t^ ete ( L ) <- successeur ( x ) | FinSi | Si successeur ( x ) <> Nil Alors | | pr ed ecesseur ( successeur ( x ) ) <- pr ed ecesseur ( x ) | FinSi Fin Cet algorithme est ecrit pour les listes doublement cha n ees. Lalgorithme equivalent pour les listes simplement cha n ees est plus compliqu e puisquavec les listes simplement cha n ees nous navons pas de moyen simple de r ecup erer un pointeur sur l el ement qui pr ec` ede celui a ` supprimer. Action supprimerListe ( DR L : Liste ; k : It erateur ) D ebut | Si x <> t^ ete ( L ) Alors | | t^ ete ( L ) <- successeur ( x ) | Sinon | | y <- t^ ete ( L ) | | TantQue successeur ( y ) <> x Faire | | | y <- successeur ( y ) | | FinTantQue | | successeur ( y ) <- successeur ( x ) | FinSi Fin

1.4

Comparaison entre tableaux et listes cha n ees

Aucune structure de donn ees nest parfaite, chacune a ses avantages et ses inconv enients. Le tableau pr esente un comparatif des listes simplement cha n ees, doublement cha n ees et des tableaux, tri es ou non, sur des op erations el ementaires. Les complexit es indiqu ees sont celles du pire cas. Suivant les op erations que nous aurons ` a eectuer, et

Unisciel algoprog ls00acours, November 22, 2012

suivant leurs fr equences relatives, nous choisirons lune ou lautre de ces structures de donn ees. liste cha n ee liste cha n ee liste cha n ee liste cha n ee tableau tableau simple simple double double non tri ee tri ee non tri ee tri ee non tri e tri e (n)(a) a (n)a (n)a (n)a (1) b (1)b (n) c (n) d (1) (n) e (1) (n)e ou (n)c ou f erreur erreurf (n) (n) (1) (1) (n) g (n)g (n) i (1) (n)i (1) (n)i (1) i j i (n) (n) (n) (1) (n)i (1) i i i (n) (1) (n) (1) (n) (1) i k i k i (n) (n) (n) (n) (n) (1)

recherche(L,k) Insertion(L,x) suppression(L,x) successeur(L,x) h Pr ed ecesseur(L,x) Minimum(L) Maximum(L)

a. Dans le pire cas il faut parcourir tous les el ements pour se rendre compte que la cl e n etait pas dans lensemble. b. La cl e etant lindice de l el ement dans le tableau. c. Dans le pire cas, il faut allouer un nouveau tableau et recopier tous les el ements de lancien tableau dans le nouveau. d. Dans le pire cas, linsertion a lieu dans la premi` ere cas du tableau, et il faut d ecaler tous les el ements d ej` a pr esents. e. Au pire, linsertion a lieu en n de liste. f. Au cas o` u lon veut eectuer une insertion dans un tableau d ej` a plein et quil nest pas possible deectuer une allocation dynamique de tableau, comme en Fortran 77 ou en Pascal. g. Dans le pire cas on supprime le premier el ement du tableau et il faut d ecaler tous les autres el ements. h. Au sens de lordre sur la valeur des cl es. i. Complexit e de la recherche du maximum (ou du minimum) dans un ensemble ` an el ements. j. Complexit e de la recherche du maximum dans un ensemble ` an el ements... car il faut entreprendre la recherche du pr ed ecesseur depuis le d ebut de la liste. k. Il faut parcourir la liste en entier pour trouver son dernier el ement.

Figure 3 Ecacit es respectives des listes cha n ees et des tableaux.

Unisciel algoprog ls00acours, November 22, 2012

2
2.1

Piles / sk00cours1
D enition

D enition Une pile est une structure de donn ees mettant en oeuvre le principe dernier entr e, premier sorti (Last-In, First-Out ). L el ement ot e de lensemble par lop eration de suppression est sp eci ea ` lavance (et donc cette op eration ne prend alors que lensemble comme param` etre) : l el ement supprim e est celui le plus r ecemment ins er e. Lop eration dinsertion dans une pile est commun ement appel ee empiler et lop eration de suppression appel ee d epiler. Exemple La gure suivante pr esente un exemple de pile et montre les cons equences des op erations empiler et d epiler : (a) initialement la pile contient les valeurs 3, 5 et 2 ; (b) etat de la pile apr` es lop eration empiler(6) ; (c) etat de la pile apr` es lop eration empiler(1) ; (d) etat de la pile apr` es lop eration d epiler qui renvoie la valeur 1.
1 6 2 5 3
(c) sommet

2 5 3
(a)

sommet

6 2 5 3
(b)

sommet

1 6 2 5 3
(d)

sommet

Figure 4 Exemple de manipulation de pile

2.2

Repr esentation dune pile par tableau

Il est facile dimpl ementer une pile au moyen dun tableau. La seule dicult e dans cette impl ementation est la gestion des d ebordements de pile qui interviennent quand on tente deecteur lop eration d epiler sur une pile vide et lop eration empiler sur un tableau codant la pile qui est d ej` a plein. Ce dernier probl` eme nappara t pas lorsque lon impl emente les piles au moyen dune liste cha n ee. Exemple La gure montre la repr esentation dune pile par un tableau : (a) etat initial de la pile ; (b) nouvel etat apr` es les actions empiler(7) et empiler(3) ; (c) nouvel etat apr` es lop eration d epiler qui renvoie la valeur 3.
1 P 2 3 4 5 6 7 8 9 P 1 2 3 4 5 6 7 8 9 P 1 2 3 4 5 6 7 8 9

5 6 2 9
sommet[P] = 4

5 6 2 9 7 3
sommet[P] = 6

5 6 2 9 7 3
sommet[P] = 5

(a)

(b)

(c)

Figure 5 Repr esentation dune pile par un tableau

Unisciel algoprog ls00acours, November 22, 2012 Algorithme pilevide Fonction pileVide ( P : Pile ) : Bool een D ebut | Retourner ( sommet ( P ) = 0 ) Fin Algorithme empiler Action empiler ( DR P : Pile ; x : Element ) D ebut | Si sommet ( P ) = capacit e ( P ) Alors | | Erreur "D ebordement positif" | Sinon | | sommet ( P ) <- sommet ( P ) + 1 | | P [ sommet ( P ) ] <- x | FinSi Fin Algorithme d epiler Action d epiler ( DR P : Pile ) D ebut | Si pileVide ( P ) ) Alors | | Erreur "D ebordement n egatif" | Sinon | | sommet ( P ) <- sommet ( P ) - 1 | | Retourner P [ sommet ( P ) + 1 ] | FinSi Fin

Unisciel algoprog ls00acours, November 22, 2012

3
3.1

Files / qu00cours1
D enition

D enition Une le est une structure de donn ees mettant en oeuvre le principe premier entr e, premier sorti (FIFO : First-In, First-Out ). L el ement ot e de lensemble par lop eration de suppression est sp eci ea ` lavance (et donc cette op eration ne prend alors que lensemble comme param` etre) : l el ement supprim e est celui qui est rest e le plus longtemps dans la le. Une le se comporte exactement comme une le dattente de la vie courante. Exemple La gure suivante pr esente un exemple de le et montre les cons equences des op erations enler et d eler : (a) initialement la le contient les valeurs 7, 4, 8, 9, 6 et 1 (de la plus anciennement ` a la plus r ecemment ins er ee) ; (b) etat de la le apr` es lop eration enler(3) ; (c) etat de la le apr` es lop eration d eler qui a renvoy e la valeur 7.
1 6 9 8 4 7

3 1 6 9 8 4 7

3 1 6 9 8 4

Figure 6 Exemple de manipulation de le

3.2

Repr esentation dune le par tableau

On peut impl ementer les les ` a n1 el ements au moyen dun tableau ` an el ements et de deux attributs : t^ ete(F) qui indexe (ou pointe) vers la t ete de la le ; queue(F) qui indexe le prochain emplacement o` u sera ins er e un el ement nouveau. Les el ements de la le se trouvent donc aux emplacements t^ ete(F), t^ ete(F)+1, ..., queue(F)-1 (modulo n). Quand t^ ete(F)=queue(F), la le est vide. La seule dicult e dans cette repr esentation est la gestion des d ebordements de le qui interviennent quand on tente deectuer lop eration d efiler sur une le vide et lop eration enfiler sur un tableau codant la le qui est d ej` a plein. Ce dernier probl` eme nappara t pas lorsque lon impl emente les les au moyen dune liste doublement cha n ee. Exemple La gure montre la repr esentation dune le par un tableau : (a) etat initial de la le ; (b) nouvel etat apr` es laction enler(7) ; (c) nouvel etat apr` es laction enler(5) ; (d) nouvel etat apr` es lop eration d eler qui a renvoy e la valeur 1.

Unisciel algoprog ls00acours, November 22, 2012


1 (a) 2 3 4 5 6 7 8 9 10 11 12

10

1 6 9 8 4
t ete[F] = 7 1 2 3 4 5 6 7 8 queue[F] = 12 9 10 11 12

(b)

1 6 9 8 4 7
t ete[F] = 7 3 4 5 6 7 8 9 10 11 12

queue[F] = 1 1 (c) 2

5
queue[F] = 2 1 2 3 4 5

1 6 9 8 4 7
t ete[F] = 7 6 7 8 9 10 11 12

(d)

5
queue[F] = 2

1 6 9 8 4 7
t ete[F] = 8

Figure 7 Repr esentation dune le par un tableau Algorithme levide Fonction fileVide ( F : File ) : Bool een D ebut | Retourner ( t^ ete ( F ) = queue ( F ) ) Fin Algorithme enler Action enfiler ( DR F : File ; x : El ement ) D ebut | Si ( Modulo ( queue ( F ) + 1 , n ) = t^ ete ( F ) ) Alors | | Erreur "D ebordement positif" | Sinon | | F [ queue ( F ) ] <- x | | queue ( F ) <- queue ( F ) + 1 | FinSi Fin Algorithme d eler Action d efiler ( DR F : File ) Variable x : El ement D ebut | Si ( fileVide ( F ) ) Alors | | Erreur "D ebordement n egatif" | Sinon | | x <- F [ t^ ete ( F ) ] | | t^ ete ( F ) <- t^ ete ( F ) + 1

Unisciel algoprog ls00acours, November 22, 2012 | | Fin | Retourner x FinSi

11

Vous aimerez peut-être aussi