69
Al ith i t St t d Algorithmique et Structures de Données 1.1 Jean-Charles Régin Données Licence Informatique 2ème année JC Régin - ASD - L2I - 2010

C6 Algo Sdd Liste Ptr

  • Upload
    essai

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Al ith i t St t d Algorithmique et Structures de Données

1.1

Jean-Charles Régin

Données

Licence Informatique 2ème année

JC Régin - ASD - L2I - 2010

Listes1.2

Jean-Charles Régin

Licence Informatique 2ème année

JC Régin - ASD - L2I - 2010

PlanPlan3

PrésentationListes doublement chaînéesImplémentationE l d’ tili ti d li tExemple d’utilisation de listes

JC Régin - ASD - L2I - 2010

VariableVariable1.4

Une variable sert à mémoriser de l’informationCe qui est mis dans une variable est en fait mis dans une partie de la mémoiredans une partie de la mémoire

JC Régin - ASD - L2I - 2010

Structures de donnéesStructures de données1.5

Permettent de gérer et d’organiser des donnéesSont définies à partir d’un ensemble d’opérations p pqu’elles peuvent effectuer sur les donnéesUne structure de données ne regroupe pas Une structure de données ne regroupe pas nécessairement des objets du même type.

JC Régin - ASD - L2I - 2010

Besoin d’indirectionsBesoin d indirections

P é t ti h bit ll d t i l ith 6

Présentation habituelle de certains algorithmes :On a un tableau d’entiersOn veut trier ce tableau

Un élément du tableau est directement un type de base (un entier, un flottant un booléen ) un flottant, un booléen...)

Parfois on ne voudrait pas avoir accès à la valeur en soit, mais l ô à bj lié à l’i di ié à lplutôt à un objet lié à l’indice et associé à cette valeur

On veut simplement parcourir les éléments d’un ensemble, pas On veut simplement parcourir les éléments d un ensemble, pas uniquement les valeurs de ces éléments : on associe l’élément à une valeur

JC Régin - ASD - L2I - 2010

Besoin d’indirectionsBesoin d indirections

R h h di h t i i i té 7

Recherche dichotomique : ce qui nous intéresse n’est pas la valeur, n’est pas uniquement l’appartenance de la valeurc’est la position de la valeur dans le tableau, donc son indice

On pourrait travailler uniquement avec des indices et des tableauxOn pourrait travailler uniquement avec des indices et des tableauxUn indice représentant un objet particulier

Inconvénient : c’est compliquéquand on veut supprimer un objet (que devient son indice ?)quand on veut insérer un objet (que devient son indice ?)quand on veut insérer un objet (que devient son indice ?)quand on veut ajouter un objet (les tableaux doivent être agrandis)

JC Régin - ASD - L2I - 2010

Besoin d’indirectionsBesoin d indirections

Il t l ti d t ill di t t d bj t t 8

Il est plus pratique de travailler directement avec des objets et d’associé des valeurs à ces objetsEn java :

Class onObjet {…}MonObjet mobj1=new MonObjet(…);MonObjet mobj2=new MonObjet(…);définit 2 objetsdéfinit 2 objetsMonObjet obj; // définit un autre objetobj=mobj1; bj tV l (8) // h d é d bj1obj.setValue(8); // change une donnée de mobj1

obj=mobj2;obj.setValue(12); // change une donnée de mobj2b h d b 1 b 2 ’ dobj change indirectement mobj1 et mobj2, c’est une indirection

On a donc besoin d’indirections !

JC Régin - ASD - L2I - 2010

PointeurPointeur

U i t t t d d é d t l l f it 9

Un pointeur est un type de données dont la valeur fait référence (référencie) directement (pointe vers) à une autre valeur.

Un pointeur référencie une valeur située quelque part d’ t é i h bit ll t tili t dd’autre en mémoire habituellement en utilisant son adresse

Un pointeur est une variable qui contient une adresse Un pointeur est une variable qui contient une adresse mémoire

Un pointeur permet de réaliser des indirections : désigner des objets, sans être ces objets

JC Régin - ASD - L2I - 2010

PointeurPointeur10

Un pointeur est un type de données dont la valeur pointe vers une autre valeur.

Obtenir la valeur vers laquelle un pointeur pointe Obtenir la valeur vers laquelle un pointeur pointe est appelé déréférencer le pointeur.

Un pointeur qui ne pointe vers aucune valeur aura la valeur nil

JC Régin - ASD - L2I - 2010

ListesListes

li h11

Une liste chaînée désigne une structure de données représentant une collection ordonnée et de taille

bit i d'élé tarbitraire d'éléments.L'accès aux éléments d'une liste se fait de manière é i ll séquentielle

chaque élément permet l'accès au suivant ( t i t d t bl d l l l' è (contrairement au cas du tableau dans lequel l accès se fait de manière absolue, par adressage direct de chaque cellule dudit tableau).c aque ce u e dud ab eau).

Un élément contient un accès vers une donnée

JC Régin - ASD - L2I - 2010

ListeListe

L i i d l li t h î é t h élé t 12

Le principe de la liste chaînée est que chaque élément possède, en plus de la donnée, des pointeurs vers les éléments qui lui sont logiquement adjacents dans la q g q jliste.

premier(L) désigne le premier élément de la listenil désigne l’absence d’élément

Liste simplement chaînée : donnée(elt) désigne la donnée associée à l’élément eltsuivant(elt) désigne l’élément suivant elt

JC Régin - ASD - L2I - 2010

Liste simplement chaînéeListe simplement chaînée13

Représentation : correspondant au suivant

d1 d2 d3

i (L)= 1

e1 e2 e3

premier(L)=e1suivant(e1) = e2suivant(e2) = e3suivant(e3) = nilsuivant(e3) nil

JC Régin - ASD - L2I - 2010

Liste : opérationsListe : opérations14

Trois opérations principalesParcours de la listeAjout d’un élémentSuppression d’un élémentpp

A partir de là d’autres opérations vont être A partir de là d autres opérations vont être obtenues : recherche d’une donnée, remplacement,

té ti d li t f i d li t tconcaténation de liste, fusion de listes, etc.

JC Régin - ASD - L2I - 2010

Liste vs TableauListe vs Tableau

L i i l t d li t l t bl15

Le principal avantage des listes sur les tableauxL’ordre des éléments de la liste peut être différent de leur ordre en mémoire. Les listes chaînées vont permettre l’ajout ou la suppression d’un élément en n’importe quel endroit de la liste en temps constantconstant.

En revanche certaines opérations peuvent devenir En revanche, certaines opérations peuvent devenir coûteuses comme la recherche d’un élément contenant une certaine donnée. Pas de recherche dichotomique d li i d l ièdans une liste : on ne peut pas atteindre le ièmeélément sans parcourir !

JC Régin - ASD - L2I - 2010

Inventions des listes chaînéesInventions des listes chaînées16

La représentation de listes chaînées à l’aide du diagramme avec une flèche vers le suivant a été

é N ll d Sh d l’ ti l proposé par Newell and Shaw dans l’article "Programming the Logic Theory Machine" Proc. WJCC February 1957WJCC, February 1957.

N ll S b l’ACM T A d Newell et Simon ont obtenu l’ACM Turing Award en 1975 pour avoir "made basic contributions to

tifi i l i t lli th h l f hartificial intelligence, the psychology of humancognition, and list processing".

JC Régin - ASD - L2I - 2010

Lvalue et RvalueLvalue et Rvalue17

Pour se simplifier la vie, on accepte de faire suivant(elt) ← valeur

On remarque qu’il n’y a pas d’ambigüité.Cela s’appelle une Lvalue ou Left-value (on accepte Cela s appelle une Lvalue ou Left-value (on accepte de mettre à gauche de l’affectation)L l t l R l ( i ht l )Le cas normal est la Rvalue (right-value)

JC Régin - ASD - L2I - 2010

Liste : parcoursListe : parcours

i itLi t (L)18

initListe(L)premier(L) ← nil

nombreElements(L) : entiert ← 0cpt ← 0;

elt ← premier(L)tant que(elt ≠ nil){tant que(elt ≠ nil){

cpt ← cpt +1elt ← suivant(elt)

}retourner cpt

JC Régin - ASD - L2I - 2010

Liste : ajout d’un élémentListe : ajout d un élément

O l l d b d l l19

On ajoute un élément elt au début de la liste.On suppose qu’il n’est pas déjà dans la liste (sinon que

’il ?)se passe t’il ?)

Principes :Le premier de la liste deviendra eltMais où est le premier ? Il devient le suivant de eltAttention à l’ordre de mise à jour ! On ne doit pas perdre le premier Doncpremier. Donc

Le suivant de elt est mis à jourPuis le premier de la liste

JC Régin - ASD - L2I - 2010

Liste : ajout d’un élémentListe : ajout d un élément20

ajouteAuDébut(elt,L)// elt n’est pas dans Lsuivant(elt)← premier(L);premier(L)← elt

JC Régin - ASD - L2I - 2010

Liste : insertion d’un élémentListe : insertion d un élément21

On insère un élément elt après un autre p.On suppose que elt n’est pas déjà dans la liste et pp q p jque p y est (sinon que se passe-t-il ?)

d1 dp d3d1 dp d3

d

e1 p e3

d

elt

JC Régin - ASD - L2I - 2010

Liste : insertion d’un élémentListe : insertion d un élément22

On insère un élément elt après un autre p.On suppose que elt n’est pas déjà dans la liste et pp q p jque p y est (sinon que se passe t’il ?)

d1 dp d3d1 dp d3

d

e1 p e3

d

elt

JC Régin - ASD - L2I - 2010

Liste : insertion d’un élémentListe : insertion d un élément

O l l23

On insère un élément elt après un autre p.On suppose que elt n’est pas déjà dans la liste et que p ( i ’il ?)y est (sinon que se passe t’il ?)

e1 p e3e1 p e3

x

e1 p e3

Principes :Le suivant de elt devient le suivant de p

x

elt

Le suivant de p devient eltAttention à l’ordre de mise à jour !

JC Régin - ASD - L2I - 2010

Liste : insertion d’un élémentListe : insertion d un élément24

insèreAprès(elt,p,L)//elt pas dans L, p est dans Lsuivant(elt)← suivant(p);suivant(p)← elt

JC Régin - ASD - L2I - 2010

Liste : suppression d’un élémentListe : suppression d un élément25

On supprime un élément de la liste.On a besoin du précédent ! (Pourquoi ?)Le premier peut changer !Le suivant du précédent devient le suivant de eltp

dp d d3dp d d3

p elt e3

JC Régin - ASD - L2I - 2010

Liste : suppression d’un élémentListe : suppression d un élément26

On supprime un élément de la liste.On a besoin du précédent ! (Pourquoi ?)Le premier peut changer !Le suivant du précédent devient le suivant de eltp

dp d d3dp d d3

p elt e3

JC Régin - ASD - L2I - 2010

Liste : suppression d’un élémentListe : suppression d un élément27

On supprime un élément de la liste.On a besoin du précédent ! (Pourquoi ?)Le premier peut changer !Le suivant du précédent devient le suivant de eltp

dp d d3dp d d3

p elt e3

JC Régin - ASD - L2I - 2010

Liste : suppression d’un élémentListe : suppression d un élément28

Gestion de tous les caselt est le premierelt n’est pas le premierp est bien le précédent de eltp p

dp d d3dp d d3

p elt e3

JC Régin - ASD - L2I - 2010

Liste : suppression d’un élémentListe : suppression d un élément29

supprime(elt,p,L)//elt est dans L, p son précédentif (premier(L) = elt){

premier(L) ← suivant(elt);} else {

if (suivant(p) = elt){ suivant(p)← suivant(elt);

}}

JC Régin - ASD - L2I - 2010

PlanPlan30

PrésentationListes doublement chaînées

ImplémentationE l d’ tili ti d li tExemple d’utilisation de listes

JC Régin - ASD - L2I - 2010

ListeListe31

Liste simplement chaînée : pdonnée(elt) désigne la donnée associée à l’élément eltsuivant(elt) désigne l’élément suivant eltsuivant(elt) désigne l élément suivant elt

Liste doublement chaînée :d é ( l ) dé i l d é ié à l’élé ldonnée(elt) désigne la donnée associée à l’élément eltsuivant(elt) désigne l’élément suivant eltprécédent(elt) désigne l’élément précédant elt

JC Régin - ASD - L2I - 2010

Liste doublement chaînéeListe doublement chaînée32

Représentation : lien

d1 d2 d3

e1 e2 e3

premier(L)=e1suivant(e1) = e2; précédent(e1) = nilsuivant(e2) = e3; précédent(e2) = e1suivant(e2) e3; précédent(e2) e1suivant(e3) = nil; précédent(e3) = e2

JC Régin - ASD - L2I - 2010

Liste : opérationsListe : opérations33

Trois opérations principalesParcours de la listeAjout d’un élémentSuppression d’un élémentpp

A partir de là d’autres opérations vont être A partir de là d autres opérations vont être obtenues : recherche de donnée, remplacement,

té ti d li t f i d li t tconcaténation de liste, fusion de listes, etc.

JC Régin - ASD - L2I - 2010

Liste : ajout d’un élémentListe : ajout d un élément34

ajouteAuDébut(elt,LD)//elt n’est pas dans LDsuivant(elt)← premier(LD);précédent(premier(LD))← elt;précédent(elt)← nil; premier(LD)← elt

JC Régin - ASD - L2I - 2010

Liste : insertion d’un élémentListe : insertion d un élément35

On insère un élément elt après un autre p.On suppose que elt n’est pas déjà dans la liste et pp q p jque p y est (sinon que se passe t’il ?)

d1 dp d3

e1 p e3e1 p e3

d

elt

JC Régin - ASD - L2I - 2010

Liste : insertion d’un élémentListe : insertion d un élément36

On insère un élément elt après un autre p.On suppose que elt n’est pas déjà dans la liste et pp q p jque p y est (sinon que se passe-t-il ?)

d1 dp d3

e1 p e3e1 p e3

d

elt

JC Régin - ASD - L2I - 2010

Liste : insertion d’un élémentListe : insertion d un élément37

On insère un élément elt après un autre p.On suppose que elt n’est pas déjà dans la liste et pp q p jque p y est (sinon que se passe-t-il ?)

d1 dp d3

e1 p e3e1 p e3

d

elt

JC Régin - ASD - L2I - 2010

Liste : insertion d’un élémentListe : insertion d un élément38

On insère un élément elt après un autre p.Sont modifiés : suivant(p), précédent(e3) et (p), p ( )suivant(elt) ; précédent(elt)

d1 dp d3

e1 p e3e1 p e3

d

elt

JC Régin - ASD - L2I - 2010

Liste : insertion d’un élémentListe : insertion d un élément39

insèreAprès(elt,p,LD)//elt pas dans LD, p dans LDsuivant(elt)← suivant(p);précédent(elt)← p; précédent(suivant(p))← elt;suivant(p)← elt;

JC Régin - ASD - L2I - 2010

Liste : insertion d’un élémentListe : insertion d un élément40

insèreAprès(elt,p,LD)//elt pas dans LD, p dans LDsuivant(elt)← suivant(p);précédent(elt)← p; précédent(suivant(p))← elt;suivant(p)← elt;

Mauvais code ! Pourquoi ?Mauvais code ! Pourquoi ?

JC Régin - ASD - L2I - 2010

Liste : insertion d’un élémentListe : insertion d un élément

i è è ( )41

insèreAprès(x,y,LD)//elt pas dans LD, p dans LD

i t( lt)← i t( )suivant(elt)← suivant(p);précédent(elt)← p;if (suivant(p)≠ nil){if (suivant(p)≠ nil){

précédent(suivant(p))← elt;}}suivant(p)← elt;

JC Régin - ASD - L2I - 2010

Liste : suppression d’un élémentListe : suppression d un élément42

On supprime un élément de la liste.On n’a pas besoin du précédent ! (Pourquoi ?)Le premier peut changer !Le suivant du précédent devient le suivant de eltpLe précédent du suivant devient le précédent de elt

d1 d d3

e1 elt e3

JC Régin - ASD - L2I - 2010

Liste : suppression d’un élémentListe : suppression d un élément43

On supprime un élément de la liste.On n’a pas besoin du précédent ! (Pourquoi ?)Le premier peut changer !Le suivant du précédent devient le suivant de eltpLe précédent du suivant devient le précédent de elt

d1 d d3

e1 elt e3

JC Régin - ASD - L2I - 2010

Liste : suppression d’un élémentListe : suppression d un élément44

On supprime un élément de la liste.On n’a pas besoin du précédent ! (Pourquoi ?)Le premier peut changer !Le suivant du précédent devient le suivant de eltpLe précédent du suivant devient le précédent de elt

d1 d d3

e1 elt e3

JC Régin - ASD - L2I - 2010

Liste : suppression d’un élémentListe : suppression d un élément45

On supprime un élément de la liste.On n’a pas besoin du précédent ! (Pourquoi ?)Le premier peut changer !Le suivant du précédent devient le suivant de eltpLe précédent du suivant devient le précédent de elt

d1 d3

e1 elt e3

JC Régin - ASD - L2I - 2010

Liste : suppression d’un élémentListe : suppression d un élément

i ( lt LD)46

supprime(elt,LD)// elt dans LDsuiv ← suivant(elt); ( );prec ← précédent(elt); if (prec = nil){

premier(LD) ← suiv;premier(LD) ← suiv;} else {

suivant(prec)← suiv;}if (suiv ≠ nil){

précédent(suiv)← prec;précédent(suiv)← prec;}

JC Régin - ASD - L2I - 2010

PlanPlan47

PrésentationListes doublement chaînéesImplémentation

E l d’ tili ti d li tExemple d’utilisation de listes

JC Régin - ASD - L2I - 2010

ImplémentationImplémentation48

Par un tableauA l’aide de pointeurp

JC Régin - ASD - L2I - 2010

Tableaux simulant une listeTableaux simulant une liste49

Tableau S des suivants S[i] indice de l’élément suivant l’élément d’indice i

Tableau P des précédents P[i] indice de l’élément précédant l’élément d’indice iP[i] indice de l élément précédant l élément d indice i

Liste 2 – 3 – 1 – 5 – 4S : [5,3,1,0,4]P : [3,0,2,5,1]

JC Régin - ASD - L2I - 2010

PointeurPointeur50

Un pointeur est un type de données dont la valeur pointe vers une autre valeur.

Obtenir la valeur vers laquelle un pointeur pointe Obtenir la valeur vers laquelle un pointeur pointe est appelé déréférencer le pointeur.

Un pointeur qui ne pointe vers aucune valeur aura la valeur nil

JC Régin - ASD - L2I - 2010

Pointeur ImplémentationPointeur Implémentation51

Un pointeur c’est un indice dans le grand tableau de la mémoire comme vu en TD

JC Régin - ASD - L2I - 2010

Pointeur ImplémentationPointeur Implémentation

i t // Ré l t ti é i

52

int x; // Réserve un emplacement pour un entier en mémoire.

x = 10; // Ecrit la valeur 10 dans l'emplacement réservé.

Une variable est destinée à contenir une valeur du l l ll dé l é type avec lequel elle est déclarée.

Physiquement cette valeur se situe en mémoire.

int x; int x;

JC Régin - ASD - L2I - 2010

Pointeur ImplémentationPointeur Implémentation

i t // Ré l t ti é i

53

int x; // Réserve un emplacement pour un entier en mémoire.

x = 10; // Ecrit la valeur 10 dans l'emplacement réservé.

int x;

x=10; ;

&x : adresse de x en C : ici 62&x : adresse de x en C : ici 62

JC Régin - ASD - L2I - 2010

Pointeur ImplémentationPointeur Implémentation

i t // Ré l t ti é i

54

int x; // Réserve un emplacement pour un entier en mémoire.

x = 10; // Ecrit la valeur 10 dans l'emplacement réservé.

int x;x=10;

En C : int* px; // pointeur sur un entier

JC Régin - ASD - L2I - 2010

Pointeur ImplémentationPointeur Implémentation55

int x;x=10; ;

En C : int* px; // pointeur sur un entierEn C : int px; // pointeur sur un entier

px=&x; (adresse de x)

JC Régin - ASD - L2I - 2010

Pointeur ImplémentationPointeur Implémentation56

int x;x=10; ;

En C : int* px; // pointeur sur un entierEn C : int px; // pointeur sur un entier

px=&x; (adresse de x)

int y=*px

JC Régin - ASD - L2I - 2010

Pointeur ImplémentationPointeur Implémentation57

Si px contient l’adresse de x

Al * ti t l l i t à Alors *px contient la valeur qui se trouve à l’adresse de x, donc la valeur de x

JC Régin - ASD - L2I - 2010

Pointeur ImplémentationPointeur Implémentation

S58

Si px contient l’adresse de x

Alors *px contient la valeur qui se trouve à p ql’adresse de x, donc la valeur de x

Si je change la valeur qui se trouve à l’adresse de Si je change la valeur qui se trouve à l adresse de x, alors je change la valeur de x,

JC Régin - ASD - L2I - 2010

Pointeur ImplémentationPointeur Implémentation59

Si px contient l’adresse de x, donc *px la valeur de x

Si je change la valeur à l’adresse de x alors je Si je change la valeur à l adresse de x, alors je change la valeur de x : *px=5

5

JC Régin - ASD - L2I - 2010

Pointeur ImplémentationPointeur Implémentation60

px=&x; Si je modifie *px alors je modifie xj p jpx=&y;Si j difi * l j difi Si je modifie *px alors je modifie ypx=&bidule;Si je modifie *px alors je modifie bidulepx désigne l’objet pointépx désigne l objet pointé

*px modifie l’objet pointé

JC Régin - ASD - L2I - 2010

Pointeur et référencePointeur et référence61

Une référence est une valeur qui permet l'accès en lecture et/ou écriture à une donnée située soit en mémoire principale soit ailleurs.

Une référence n'est pas la donnée elle-même mais seulement une information de localisationseulement une information de localisation

Ressemble à quelque chose de connu, non ?

JC Régin - ASD - L2I - 2010

Pointeur et référencePointeur et référence

L t d éfé t d i l l 62

Le typage des références permet de manipuler les données référencées de manière abstraite tout en respectant leurs propres contraintes de type.p p p yp

Le type de référence le plus simple est le pointeur. Il yp p p ps'agit simplement d'une adresse mémoire.

Mais pointeur typé = référence typé

Mais on peut changer le type d’un pointeur, pas d’une référence (cast/transtypage autorisé)

JC Régin - ASD - L2I - 2010

Pointeur et référencePointeur et référence

E J i t d éfé t é

63

En Java : uniquement des références typées2 objet a et b de type MyObjectMyObject obj;obj=a; si on modifie obj, alors on modifie aobj=b; si on modifie obj, alors on modifie b Fonc(obj) : obj est passé en entrée/sortie

En C/C++ : pointeurs typés mais type changeable2 objet a et b de type MyObjectj yp y jMyObject* obj;obj=&a; si on modifie obj, alors on modifie aobj=&b; si on modifie obj, alors on modifie bobj &b; si on modifie obj, alors on modifie bFonc(MyObject* obj): en entree/sortieFonc(MyObject obj) : en entree

JC Régin - ASD - L2I - 2010

Liste doublement chaînéeListe doublement chaînée

l64

Représentation : lien

d1 d2 d3

e1 e2 e3

ListeElementsuivant : pointeur vers ListeElementprécédent : pointeur vers ListeElementdonnée : pointeur vers l’objet

Liste Premier : pointeur vers ListeElement

JC Régin - ASD - L2I - 2010

Liste doublement chaînéeListe doublement chaînée

l i l {65

class ListElt {ListElt _suiv;Li tEltListElt _prec;MaClasseDonnee _data;ListElt(){ListElt(){

_suiv=null;prec=null;_prec null;

_data=null;}}

}

JC Régin - ASD - L2I - 2010

Liste doublement chaînéeListe doublement chaînée

Class List {

66

Class List {ListElt _premier;List(){

_premier=null;}void ajouterEnTete(ListElt elt){ // on ne traite pas les cas elt == null

elt suiv premier;elt._suiv = _premier;if (_premier != null)

_premier._prec=elt;_premier = elt;elt._prec=null;

}id i A (Li tElt Li tElt lt){void insererApres(ListElt prec, ListElt elt){

if (prec == null) ajouterEnTete(elt);else {

elt._suiv=prec._suiv;elt._prec=prec;if (prec._suiv != null){prec._suiv._prec=elt;}prec._suiv=elt;

}}void supprimer(ListElt elt){

if (elt == _premier){_premier = elt._suiv;}else { // elt. prec n’est pas null_p p

_elt._prec._suiv=elt._suiv;}if (elt._suiv != null){elt._suiv._prec=elt._prec;}

}

JC Régin - ASD - L2I - 2010

PlanPlan67

PrésentationListes doublement chaînéesImplémentationE emple d’ tilisation de listesExemple d’utilisation de listes

JC Régin - ASD - L2I - 2010

Pile : implémentation par une listePile : implémentation par une liste

l l h68

Une liste L simplement chaînéeSommet(P) : renvoyer premier(L)Empiler(P,elt) : ajouterEnTête(L,elt)Dépiler(P) : supprimerPremier(L)estVide(P) : renvoyer estVide(L)

Nécessite par rapport à un tableauPlus de place pPlus d’opérationsPlus d’allocations

JC Régin - ASD - L2I - 2010

File : implémentation par une listeFile : implémentation par une liste69

Une liste L simplement chaînée avec findébut(F) : renvoyer premier(L)( ) y p ( )Enfiler(F,elt) : ajouterEnFin(L,elt)Défil (F) i P i (L)Défiler(F) : supprimerPremier(L)estVide(F) : renvoyer estVide(L)

Beaucoup plus simple qu’un tableau cette foisBeaucoup plus simple qu un tableau cette foisGestion mémoire plus complexe

JC Régin - ASD - L2I - 2010