Algorithmique Types de données abstraites Somaya EL GHARRAS.

66
Algorithmique Algorithmique Types de données Types de données abstraites abstraites Somaya EL GHARRAS

Transcript of Algorithmique Types de données abstraites Somaya EL GHARRAS.

Page 1: Algorithmique Types de données abstraites Somaya EL GHARRAS.

AlgorithmiqueAlgorithmique

Types de données Types de données abstraitesabstraites

Somaya EL GHARRAS

Page 2: Algorithmique Types de données abstraites Somaya EL GHARRAS.

L’informatique consiste en un L’informatique consiste en un traitement automatique de traitement automatique de l’informationl’information. .

Somaya EL GHARRAS

Page 3: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Les concepts fondamentaux :Les concepts fondamentaux :

11erer concept : concept : Pour pouvoir être traitée automatiquement, Pour pouvoir être traitée automatiquement,

l’information doit être formalisée, modélisée sous l’information doit être formalisée, modélisée sous forme d’un ensemble structuré de relations forme d’un ensemble structuré de relations logicomathématiques : logicomathématiques : « formalisation et « formalisation et modélisation de l’information ».modélisation de l’information ».

22èmeème concept : concept : Il a trait au « système » qui va effectuer Il a trait au « système » qui va effectuer

automatiquement le traitement de l’information. Ce automatiquement le traitement de l’information. Ce concept est celui concept est celui « d’architecture des systèmes « d’architecture des systèmes de traitement automatique de l’information »de traitement automatique de l’information »..

Somaya EL GHARRAS

Page 4: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Les concepts opérationnelsLes concepts opérationnels

A partir de ces deux concepts A partir de ces deux concepts fondamentaux, ont été élaborés d’autres fondamentaux, ont été élaborés d’autres concepts dits opérationnels tels que :concepts dits opérationnels tels que :Algorithme Algorithme ProgrammeProgrammeStructure de donnéesStructure de données

Somaya EL GHARRAS

Page 5: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Structures de donnéesStructures de données

Le type d’une variable :Le type d’une variable : L’ensemble des valeurs qu’une variable L’ensemble des valeurs qu’une variable

peut prendre est appelé son peut prendre est appelé son typetype.. Le type attribué aux différentes Le type attribué aux différentes

constantes, variables ou fonctions est constantes, variables ou fonctions est rendu explicite dans une rendu explicite dans une déclarationdéclaration..

Une déclaration de variable est notée :Une déclaration de variable est notée : VarVar v : Tv : T

Somaya EL GHARRAS

Page 6: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Les types structurésLes types structurés

Les données simples, par exemple un Les données simples, par exemple un entier ou un réel, ne sont par entier ou un réel, ne sont par nécessairement considérés isolément mais nécessairement considérés isolément mais peuvent être regroupés en un tout peuvent être regroupés en un tout complexe formant une complexe formant une donnée structuréedonnée structurée. . L’exemple le plus largement connu est sans L’exemple le plus largement connu est sans doute le doute le tableau de valeurs d’un même typetableau de valeurs d’un même type et la plupart des langages offrent des et la plupart des langages offrent des facilités pour introduire de tels tableaux.facilités pour introduire de tels tableaux.

Somaya EL GHARRAS

Page 7: Algorithmique Types de données abstraites Somaya EL GHARRAS.

EnregistrementEnregistrement

   Il est courant et utile de structurer dans Il est courant et utile de structurer dans

une même structure des données de types une même structure des données de types différents.différents.

Somaya EL GHARRAS

Page 8: Algorithmique Types de données abstraites Somaya EL GHARRAS.

TypeType date = date = enregistrementenregistrement

jour : 1..31 ;jour : 1..31 ;

mois : 1..12 ;mois : 1..12 ;

année : 1900 ..2009 ;année : 1900 ..2009 ;

finfin ; ;

alpha = chaîne de caractère (20) ;alpha = chaîne de caractère (20) ;

sex = sex = (homme, femme) ;(homme, femme) ;

personne = personne = enregistrementenregistrement

nom : alpha ;nom : alpha ;

prénom : alpha ;prénom : alpha ;

naissance : date ;naissance : date ;

sexe : sex ;sexe : sex ;

finfin ; ;

varvar p : personne ;p : personne ;Somaya EL GHARRAS

Page 9: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Le prénom de la personne enregistrée Le prénom de la personne enregistrée dans la variable p est sélectionné par :dans la variable p est sélectionné par :

p.prénomp.prénom Le mois de sa naissance est sélectionné Le mois de sa naissance est sélectionné

par :par :

p.naissance.moisp.naissance.mois

Somaya EL GHARRAS

Page 10: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Soit Soit aa un tableau de 50 un tableau de 50 personnespersonnes..

   VarVar a : a : tableautableau [1..50] [1..50] dede personne ; personne ;

   Le prénom de la personne enregistrée au Le prénom de la personne enregistrée au

rang i est sélectionné par :rang i est sélectionné par :

a[i].prénoma[i].prénom Son mois de naissance est sélectionné Son mois de naissance est sélectionné

par :par :

a[i].naissance.moisa[i].naissance.mois

Somaya EL GHARRAS

Page 11: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Enregistrement à format Enregistrement à format variablevariable

Il est utile de définir dans un même type Il est utile de définir dans un même type des enregistrements dont la structure peut des enregistrements dont la structure peut varier en fonction du cas rencontré. On varier en fonction du cas rencontré. On utilise à cette fin utilise à cette fin un indicateur de casun indicateur de cas..

Somaya EL GHARRAS

Page 12: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Ex 1Ex 1   les coordonnées d’un point du plan peuvent les coordonnées d’un point du plan peuvent

être données soit en cartésienne soit en être données soit en cartésienne soit en polaire.polaire.

TypeType

coordonnée = coordonnée = enregistrementenregistrement

CasCas sorte : (cartésien, polaire) sorte : (cartésien, polaire) dede

Cartésien : ( x, y : Cartésien : ( x, y : réelréel) ;) ;

Polaire : (r : Polaire : (r : réelréel, a: angle) ;, a: angle) ;

FinFin ; ;

Somaya EL GHARRAS

Page 13: Algorithmique Types de données abstraites Somaya EL GHARRAS.

L’indicateur de cas est ‘L’indicateur de cas est ‘sortesorte’ qui est du ’ qui est du type type (cartésien, polaire)(cartésien, polaire). Selon la valeur . Selon la valeur de cet indicateur les composantes de cet indicateur les composantes suivantes de l’enregistrement sont deux suivantes de l’enregistrement sont deux réels réels x et yx et y, ou, un réel , ou, un réel rr et un angle et un angle aa où où l’on suppose que le type l’on suppose que le type angleangle a été défini a été défini préalablement.préalablement.

Somaya EL GHARRAS

Page 14: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Si l’indicateur de cas est une valeur logique, Si l’indicateur de cas est une valeur logique, la déclaration peut prendre la forme la déclaration peut prendre la forme suivante :suivante :  

TypeType T = T = enregistrementenregistrement ss11 : T : T11 ; s ; s22 : T : T22 ; … ; s ; … ; sn-1 n-1 : :

TTn-1n-1 ; ;

sisi t t alorsalors (s (s1,11,1 : T : T1,11,1 ;  ;

… ; s… ; s1,n11,n1 : T : T1,n11,n1))

sinonsinon (s (s2,12,1 : T : T2,12,1 ; … ; s ; … ; s2,n22,n2 :  :

TT2,n22,n2))

FinFin;;Somaya EL GHARRAS

Page 15: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Ex2Ex2 Le type coordonnée peut être défini en Le type coordonnée peut être défini en

utilisant une variable logique ‘cart’ au lieu de utilisant une variable logique ‘cart’ au lieu de ‘sorte’, en supposant ‘cart’ vrai s’il s’agit de ‘sorte’, en supposant ‘cart’ vrai s’il s’agit de coordonnées cartésiennes et faux sinon. coordonnées cartésiennes et faux sinon. 

TypeType

coordonnée = coordonnée = enregistrementenregistrement

SiSi cart cart alorsalors (x,y : (x,y : réelréel))

sinonsinon (r : (r : réelréel ; a :angle) ; a :angle)

finfin ; ;Somaya EL GHARRAS

Page 16: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Type de données abstraitesType de données abstraites

On peut concevoir un On peut concevoir un type de données type de données abstraitesabstraites comme la connaissance d’un comme la connaissance d’un modèle mathématique et des opérations modèle mathématique et des opérations qui lui sont associées. qui lui sont associées.

Somaya EL GHARRAS

Page 17: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Structures de données Structures de données dynamiquesdynamiques

Considérons, par exemple, la généalogie Considérons, par exemple, la généalogie d’une personne connue ou inconnue d’une personne connue ou inconnue définie par :définie par : La mention « inconnu » pour un individu qui La mention « inconnu » pour un individu qui

ne l’est pas ;ne l’est pas ; La mention « connu » suivi de son « nom » et La mention « connu » suivi de son « nom » et

de la généalogie du père » et de « celle de la de la généalogie du père » et de « celle de la mère », pour une personne connue.mère », pour une personne connue.

Somaya EL GHARRAS

Page 18: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Pour répondre à ce genre de situation, on a Pour répondre à ce genre de situation, on a recours à une allocation dynamique de la recours à une allocation dynamique de la mémoire, c’est-à-dire que la réservation de mémoire, c’est-à-dire que la réservation de l’espace nécessaire se fait au moment de l’espace nécessaire se fait au moment de l’exécution au fur et à mesure des besoins l’exécution au fur et à mesure des besoins rencontrés.rencontrés.

Ceci par opposition à une allocation Ceci par opposition à une allocation statique pour laquelle la réservation peut statique pour laquelle la réservation peut être faite avant l’exécution. Les structures être faite avant l’exécution. Les structures de données qui supposent une allocation de données qui supposent une allocation dynamique sont appelées des dynamique sont appelées des structures structures dynamiquesdynamiques..

Somaya EL GHARRAS

Page 19: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Données récursivesDonnées récursives  

Considérons la généalogie d’une personne Considérons la généalogie d’une personne mentionnée précédemment.mentionnée précédemment.

TypeType généalogiegénéalogie = = enregistrementenregistrement

SiSi connuconnu alorsalors

((nomnom : alpha ; : alpha ;

pèrepère, , mèremère : généalogie) : généalogie)

finfin ; ;

Somaya EL GHARRAS

Page 20: Algorithmique Types de données abstraites Somaya EL GHARRAS.

La valeur du type La valeur du type généalogiegénéalogie définie définie par :par :

(V, Mohammed, (V, Ali, (V, Brahim, (V, Mohammed, (V, Ali, (V, Brahim, (F), (F)), (F)), (V, Fatima, (F), (V, (F), (F)), (F)), (V, Fatima, (F), (V,

Aicha, (F), (F)))) Aicha, (F), (F))))

est représentée par la figure est représentée par la figure suivantesuivante. . V et F se lisent vrai et faux, chaque V et F se lisent vrai et faux, chaque

paire de parenthèses associées se lit paire de parenthèses associées se lit comme la construction d’une valeur comme la construction d’une valeur du type : généalogie ( ). du type : généalogie ( ).

Somaya EL GHARRAS

Page 21: Algorithmique Types de données abstraites Somaya EL GHARRAS.

V Mohammed

V Ali

V Brahim

F

F

F

V Fatima

F

V Aicha

F

F

Page 22: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Exemple 2Exemple 2

Une « expression » consiste en : un Une « expression » consiste en : un termeterme suivi d’un suivi d’un opérateuropérateur suivi d’un suivi d’un termeterme. Les . Les deux termes sont les opérandes de deux termes sont les opérandes de l’opérateur qu’ils encadrent. l’opérateur qu’ils encadrent.

Un terme est soit une variable – Un terme est soit une variable – représentée par un identificateur – soit représentée par un identificateur – soit une expression entre parenthèses. une expression entre parenthèses.

Page 23: Algorithmique Types de données abstraites Somaya EL GHARRAS.

TypeTypeexpression expression = = enregistrementenregistrement

Op : Op : opérateuropérateur ;  ;

op1, op2 : op1, op2 : termeterme ; ; finfin ; ;

termeterme = = enregistrementenregistrement sisi t t alorsalors ((idid :  : alphaalpha))

sinonsinon ((sousexpsousexp :  : expressionexpression))finfin ; ;

Page 24: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Les expressions suivantes :Les expressions suivantes : x + yx + y x - (y * z)x - (y * z) (x + y) * (z - u)(x + y) * (z - u) (x / (y + z)) * u(x / (y + z)) * u

peuvent être représentées par les figures peuvent être représentées par les figures suivantessuivantes : :

Page 25: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Le type pointeurLe type pointeur

Considérons la figure qui représente sous une Considérons la figure qui représente sous une autre forme la généalogie de la figure autre forme la généalogie de la figure précédente. précédente.

L’indicateur Vrai ou Faux y est présent ainsi que L’indicateur Vrai ou Faux y est présent ainsi que le nom, mais l’emboîtement des généalogies y le nom, mais l’emboîtement des généalogies y est figurée par deux est figurée par deux flèchesflèches ou ou pointeurspointeurs qui qui renvoient respectivement à la généalogie du renvoient respectivement à la généalogie du père pour la plus à gauche, à la généalogie de père pour la plus à gauche, à la généalogie de la mère pour la plus à droite. la mère pour la plus à droite.

FigureFigure

Page 26: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Si nous supprimons la généalogie d’une Si nous supprimons la généalogie d’une personne inconnue, nous pouvons du personne inconnue, nous pouvons du même coup nous passer de l’indicateur. même coup nous passer de l’indicateur.

Certaines flèches, dans un tel cas, « ne Certaines flèches, dans un tel cas, « ne vont nulle part ». Nous pouvons le noter vont nulle part ». Nous pouvons le noter au moyen d’une flèche spéciale que nous au moyen d’une flèche spéciale que nous appellerons appellerons nilnil ( (nullnull)). .

figurefigure

Page 27: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Supposons qu’après avoir établi la Supposons qu’après avoir établi la généalogie de Mohammed, nous généalogie de Mohammed, nous découvrons dans une étape ultérieure que découvrons dans une étape ultérieure que la mère de Ali est Zahra dont la la mère de Ali est Zahra dont la généalogie nous est donnée par la généalogie nous est donnée par la figure suivantefigure suivante

Ces considérations suffisent à justifier Ces considérations suffisent à justifier l’introduction d’un l’introduction d’un type de donnéestype de données, , pointeurpointeur, qui répond au fonctionnement , qui répond au fonctionnement des flèches.des flèches.

Page 28: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Un Un pointeurpointeur est une variable contenant est une variable contenant l'adresse d'une autre variable d'un type l'adresse d'une autre variable d'un type donné. donné.

Cette technique de programmation très Cette technique de programmation très puissante, permet de définir des puissante, permet de définir des structures structures dynamiquesdynamiques, c'est-à-dire qui évoluent au , c'est-à-dire qui évoluent au cours du temps (par opposition aux cours du temps (par opposition aux tableaux par exemple qui sont des tableaux par exemple qui sont des structures de données statiques, dont la structures de données statiques, dont la taille est figée à la définition).taille est figée à la définition).

Page 29: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Un type de pointeur est défini par une Un type de pointeur est défini par une déclaration de la forme :déclaration de la forme :

Type Type Tp = ^TTp = ^TOù la flèche verticale se lit « pointeur vers » Où la flèche verticale se lit « pointeur vers » et T est un type préalablement défini.et T est un type préalablement défini.

Langage CLangage C : : Etant donné un type Etant donné un type TT quelconque, le quelconque, le type type

pointeur sur pointeur sur TT s'écrit «  s'écrit « TT* » * » Ainsi, la définition d'une variable p du type Ainsi, la définition d'une variable p du type

««pointeur sur ««pointeur sur TT » correspond à l'instruction  » correspond à l'instruction                     TT *p; *p;

Page 30: Algorithmique Types de données abstraites Somaya EL GHARRAS.

La valeur spéciale La valeur spéciale nilnil ( (nullnull), mentionnée ), mentionnée plus haut pour figurer la « flèche qui ne va plus haut pour figurer la « flèche qui ne va nulle part », est une valeur possible de nulle part », est une valeur possible de tout pointeur p indépendamment de son tout pointeur p indépendamment de son type. Elle lui est affectée par type. Elle lui est affectée par p := nil. p := nil.

Page 31: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Hormis ce cas spécial, la valeur d’un Hormis ce cas spécial, la valeur d’un pointeur p de type ^T est une variable de pointeur p de type ^T est une variable de type T. type T.

Cette variable est notée p^. Cependant, p^ Cette variable est notée p^. Cependant, p^ n’est pas entièrement assimilable à un n’est pas entièrement assimilable à un identificateur de variable du type T. En effet, identificateur de variable du type T. En effet, on ne suppose pas a priori qu’un espace est on ne suppose pas a priori qu’un espace est réservé pour ranger la valeur de p^. La réservé pour ranger la valeur de p^. La réservation d’un tel espace est dynamique. réservation d’un tel espace est dynamique.

Elle est explicitement demandée par Elle est explicitement demandée par l’instruction :l’instruction :

Nouveau (p) ;Nouveau (p) ;

Page 32: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Deux pointeurs p et q du même type Deux pointeurs p et q du même type ^T peuvent viser la même variable de ^T peuvent viser la même variable de type T. C’est le cas après une affectation type T. C’est le cas après une affectation de la forme q := p de la forme q := p

Figure Figure

Page 33: Algorithmique Types de données abstraites Somaya EL GHARRAS.

L’espace alloué à un instant donné à la L’espace alloué à un instant donné à la variable visée par un pointeur peut se variable visée par un pointeur peut se trouver libéré lors de l’exécution d’une trouver libéré lors de l’exécution d’une instruction de la forme :instruction de la forme :

Nouveau(p)Nouveau(p) ouou p := qp := q

Page 34: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Après l’exécution de la suite Après l’exécution de la suite d’instructions :d’instructions :

Nouveau (p) ; q := p ; nouveau(p)Nouveau (p) ; q := p ; nouveau(p) L’espace initialement réservé pour p^ L’espace initialement réservé pour p^

reste réservé pour q^ (reste réservé pour q^ (figure 2.5.dfigure 2.5.d) )

Page 35: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Pour le reste, notamment lors des Pour le reste, notamment lors des affectations de valeurs, l’identificateur p^ affectations de valeurs, l’identificateur p^ associé à un pointeur p du type ^T joue associé à un pointeur p du type ^T joue le rôle d’un identificateur de variable du le rôle d’un identificateur de variable du type T. On doit retenir que si un autre type T. On doit retenir que si un autre pointeur q du type ^T pointe vers la pointeur q du type ^T pointe vers la même variable que p (même variable que p (figure 2.5.cfigure 2.5.c) toute ) toute modification de la valeur de p^ est une modification de la valeur de p^ est une modification de la valeur de q^. modification de la valeur de q^.

Page 36: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Représentation en mémoire des Représentation en mémoire des pointeurspointeurs

L’instruction L’instruction nouveau(p)nouveau(p), où p est un , où p est un pointeur de type ^T, a pour effet de pointeur de type ^T, a pour effet de réserver l’allocation mémoire pour une réserver l’allocation mémoire pour une variable de type T avec p pointant sur variable de type T avec p pointant sur cette variable. cette variable.

FigureFigure

Page 37: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Structures fondamentales Structures fondamentales

Les structures fondamentales de base : Les structures fondamentales de base : tableau, enregistrement, pointeur ont été tableau, enregistrement, pointeur ont été définies comme des types de données.définies comme des types de données.

D’autres structures : listes linéaires, D’autres structures : listes linéaires, arbres, …, jouent un rôle important. Mais il arbres, …, jouent un rôle important. Mais il n’est pas nécessaire pour les définir n’est pas nécessaire pour les définir d’introduire des types d’un caractère d’introduire des types d’un caractère entièrement nouveau. entièrement nouveau.

Page 38: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Notion de Notion de suitesuite (ou (ou listeliste) )

Dans la vie courante, on a souvent affaire à des Dans la vie courante, on a souvent affaire à des collections homogènes d’objets ou d’individus, collections homogènes d’objets ou d’individus, dont la taille est susceptible de varier à la suite dont la taille est susceptible de varier à la suite d’ajouts ou de retraits d’éléments, organisées de d’ajouts ou de retraits d’éléments, organisées de la manière suivante :la manière suivante : On sait repérer l’une, l’autre ou les deux extrémités On sait repérer l’une, l’autre ou les deux extrémités

de la structure ;de la structure ; Les éléments sont ordonnés, et l’on peut donc définir Les éléments sont ordonnés, et l’on peut donc définir

le suivant et le précédent de tout élément qui n’est le suivant et le précédent de tout élément qui n’est pas une extrémité ;pas une extrémité ;

Pour atteindre un élément particulier, on doit Pour atteindre un élément particulier, on doit nécessairement parcourir séquentiellement la nécessairement parcourir séquentiellement la structure à partir d’une extrémité, jusqu’à le trouver. structure à partir d’une extrémité, jusqu’à le trouver.

Page 39: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Nous appelons Nous appelons suitesuite une telle une telle organisation dynamique homogène. Selon organisation dynamique homogène. Selon le mode d’exploitation d’une suite, on le mode d’exploitation d’une suite, on définit différentes structures de données définit différentes structures de données que nous allons présenter. que nous allons présenter.

La notion de La notion de liste linéaireliste linéaire est celle d’une est celle d’une suite finie d’éléments qui est donnée par suite finie d’éléments qui est donnée par un premier élément, et pour chaque un premier élément, et pour chaque élément un lien donnant accès à son élément un lien donnant accès à son suivant. suivant.

Page 40: Algorithmique Types de données abstraites Somaya EL GHARRAS.

D’un point de vue mathématique, une D’un point de vue mathématique, une listeliste est est une suite, vide ou non d’éléments d’un type une suite, vide ou non d’éléments d’un type donné (que nous désignerons par donné (que nous désignerons par TypeElement). Il est habituel de représenter une TypeElement). Il est habituel de représenter une telle suite par :telle suite par :

a1, a2, …, ana1, a2, …, anOù n est positif, et où chaque ai est de type Où n est positif, et où chaque ai est de type TypeElement. TypeElement.

Le nombre n d’éléments s’appelle la Le nombre n d’éléments s’appelle la longueurlongueur de la liste. de la liste.

Si n>= 1, on dit que a1 est le Si n>= 1, on dit que a1 est le premier élémentpremier élément et an le et an le dernierdernier. .

Si n = 0, on parle de Si n = 0, on parle de liste videliste vide, sans éléments., sans éléments.

Page 41: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Pour construire un Pour construire un type de données type de données abstraites abstraites à partir de la notion à partir de la notion mathématique de mathématique de listeliste, il nous faut définir , il nous faut définir un ensemble d’opérations sur des objets un ensemble d’opérations sur des objets de type LISTE. de type LISTE.

Page 42: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Mise en œuvre des listesMise en œuvre des listes

Mise en œuvre des listes par tableauMise en œuvre des listes par tableau

Une telle mise en œuvre, où les Une telle mise en œuvre, où les éléments des listes sont mémorisés dans éléments des listes sont mémorisés dans les cellules contiguës d’un tableau, les cellules contiguës d’un tableau, facilite le parcours de listes et l’insertion facilite le parcours de listes et l’insertion d’éléments en fin de liste (nous dirons d’éléments en fin de liste (nous dirons souvent « en queue »). souvent « en queue »).

Page 43: Algorithmique Types de données abstraites Somaya EL GHARRAS.

En revanche, l’insertion d’un élément au milieu En revanche, l’insertion d’un élément au milieu d’une liste nécessite de déplacer tous les d’une liste nécessite de déplacer tous les éléments suivants dans le tableau pour créer la éléments suivants dans le tableau pour créer la place nécessaire au nouveau venu. place nécessaire au nouveau venu.

De même, la suppression d’un élément De même, la suppression d’un élément quelconque du tableau demande que l’on quelconque du tableau demande que l’on déplace tous ses successeurs pour « boucher le déplace tous ses successeurs pour « boucher le trou » produit, sauf s’il s’agit du dernier élément trou » produit, sauf s’il s’agit du dernier élément de la liste.de la liste.

FigureFigure

Page 44: Algorithmique Types de données abstraites Somaya EL GHARRAS.

ConstConst Longmax = 100 ; { Longmax = 100 ; {ou n’importe quelle constante appropriéeou n’importe quelle constante appropriée}}

Type Type

LISTE = LISTE = enregistrementenregistrement

Elements : Elements : tableautableau [1.. longmax] [1.. longmax] dede TypeElement ; TypeElement ;

Dernier : Dernier : entierentier ; ;

FinFin ; ;

Position = Position = entierentier ;  ;

FonctionFonction Fin ( Fin (varvar L : LISTE) : position ; L : LISTE) : position ;

DébutDébut

RetourneRetourne ( L.dernier + 1) ( L.dernier + 1)

FinFin ; ;

Page 45: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Mise en œuvre des listes par Mise en œuvre des listes par pointeurs pointeurs

Une liste est un ensemble de cellules Une liste est un ensemble de cellules « simplement chaînées » « simplement chaînées »

Grâce à cette mise en œuvre nous Grâce à cette mise en œuvre nous n’aurons plus à faire de la place ou n’aurons plus à faire de la place ou combler de vide pour insérer ou supprimer combler de vide pour insérer ou supprimer des éléments dans les listes, puisque des éléments dans les listes, puisque nous n’utiliserons plus comme zone de nous n’utiliserons plus comme zone de stockage un ensemble de cellules stockage un ensemble de cellules contiguës de la mémoire de la machine. contiguës de la mémoire de la machine.

Page 46: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Dans cette représentation, une liste est Dans cette représentation, une liste est constituée de cellules, chacune étant constituée de cellules, chacune étant composée d’un élément de la liste et d’un composée d’un élément de la liste et d’un pointeur sur la cellule suivante.pointeur sur la cellule suivante.

Page 47: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Si la liste est composée de la suite a1, Si la liste est composée de la suite a1, a2, …, an, la cellule contenant ai pointe sur a2, …, an, la cellule contenant ai pointe sur celle contenant acelle contenant ai+1i+1, pour i = 1, 2, …, n-1. , pour i = 1, 2, …, n-1.

La cellule contenant aLa cellule contenant ann pointe sur pointe sur nilnil.. Il existe aussi une cellule de tête, appelée Il existe aussi une cellule de tête, appelée

en_têteen_tête, qui pointe sur a1 ; , qui pointe sur a1 ; en_têteen_tête ne ne contient pas d’élément. contient pas d’élément.

Dans le cas d’une liste vide, Dans le cas d’une liste vide, en_têteen_tête pointe pointe sur sur nilnil et la structure ne contient pas et la structure ne contient pas d’autre cellule. d’autre cellule.

Figure Figure

Page 48: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Pour les listes simplement chaînées, il est Pour les listes simplement chaînées, il est habituel d’utiliser une définition du type habituel d’utiliser une définition du type positionposition quelque peu différente de celle que nous avons quelque peu différente de celle que nous avons donné dans la mise en œuvre par tableau. donné dans la mise en œuvre par tableau.

Ici, la position i est un pointeur sur la cellule Ici, la position i est un pointeur sur la cellule contenant un pointeur sur ai pour i = 2, 3, …, contenant un pointeur sur ai pour i = 2, 3, …, n. La position 1 est un pointeur sur l’en-tête, et n. La position 1 est un pointeur sur l’en-tête, et la position FIN(L) est un pointeur sur la dernière la position FIN(L) est un pointeur sur la dernière cellule de L. cellule de L.

Page 49: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Type Type

Typecellule = Typecellule = enregistrementenregistrement

Element : typeElement ;Element : typeElement ;

Suivant : ^typecellule ;Suivant : ^typecellule ;

FinFin ; ;

LISTE = ^typecellule ;LISTE = ^typecellule ;

Position = ^typecellule ;Position = ^typecellule ;

Page 50: Algorithmique Types de données abstraites Somaya EL GHARRAS.

FonctionFonction FIN (L : LISTE) : position FIN (L : LISTE) : position

{{FIN retourne un pointeur sur la dernière cellule de FIN retourne un pointeur sur la dernière cellule de

LL}}

var var

q : positionq : position

début début q := L ;q := L ;

tant quetant que q^.suivant <> q^.suivant <> nilnil fairefaire

q := q^.suivant ;q := q^.suivant ;

retourneretourne (q) ; (q) ;

finfin ; ;

Page 51: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Remarquons que cette mise en ouvre Remarquons que cette mise en ouvre n’est pas judicieuse car elle oblige à n’est pas judicieuse car elle oblige à parcourir la liste en entier chaque fois que parcourir la liste en entier chaque fois que l’on désire connaître FIN (L). Nous l’on désire connaître FIN (L). Nous pourrions représenter les listes en incluant pourrions représenter les listes en incluant un pointeur sur la dernière cellule. un pointeur sur la dernière cellule.

Page 52: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Procédure d’insertion d’un élément dans une liste Procédure d’insertion d’un élément dans une liste

représentée par tableaureprésentée par tableau    ProcédureProcédure Insérer (x : TypeElement ; p : position ; Insérer (x : TypeElement ; p : position ; varvar L : LISTE) ; L : LISTE) ;{{insérer x à la position p dans la liste Linsérer x à la position p dans la liste L}}varvar q : position ;q : position ;début début

SiSi L.dernier >= longmax L.dernier >= longmax alorsalors écrireécrire « la liste est pleine » « la liste est pleine »SinonSinon SiSi (p > L.dernier +1) ou (p < 1) (p > L.dernier +1) ou (p < 1)

AlorsAlors écrireécrire « position non valide » « position non valide »SinonSinon DébutDébut

PourPour q := L.dernier q := L.dernier downtodownto p p fairefaire{{décaler les éléments aux positions p, p+1,..décaler les éléments aux positions p, p+1,..

d’un rang vers la fin de Ld’un rang vers la fin de L}} L.elements [q+1] := L.elements L.elements [q+1] := L.elements

[q] ;[q] ;L.dernier := L.dernier + 1 ;L.dernier := L.dernier + 1 ;L.elements [p] := xL.elements [p] := x

FinFin ; ;FinFin ; { ; {insérerinsérer}}

Page 53: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Les pilesLes piles

Une pileUne pile est un type de liste particulier est un type de liste particulier dans lequel toute insertion ou suppression dans lequel toute insertion ou suppression d’élément se fait à une extrémité, appelée d’élément se fait à une extrémité, appelée dessusdessus ou ou sommet de la pilesommet de la pile. .

les les seules actions possiblesseules actions possibles sont sont l’ajoutl’ajout ((empilementempilement) ou le ) ou le retraitretrait ( (dépilementdépilement) ) d’un élément au sommetd’un élément au sommet. .

Page 54: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Un type de données abstraites de la famille des piles Un type de données abstraites de la famille des piles comprend souvent les cinq opérations suivantes :comprend souvent les cinq opérations suivantes : RAZ (P) : vider le contenu de la pile P. Cette opération est RAZ (P) : vider le contenu de la pile P. Cette opération est

identique à l’opération correspondante pour les listes en identique à l’opération correspondante pour les listes en général. général.

SOMMET (P) : retourner (sans le dépiler) l’élément au SOMMET (P) : retourner (sans le dépiler) l’élément au sommet de la pile P.sommet de la pile P.

DEPILER (P) : supprimer physiquement l’élément au DEPILER (P) : supprimer physiquement l’élément au sommet de la pile P.sommet de la pile P.

EMPILER (x, P) : insérer l’élément x au sommet de la pile EMPILER (x, P) : insérer l’élément x au sommet de la pile P. L’ancien élément le plus haut devient le deuxième et P. L’ancien élément le plus haut devient le deuxième et ainsi de suite.ainsi de suite.

VIDE (P) : cette fonction retourne VRAI si P est vide et VIDE (P) : cette fonction retourne VRAI si P est vide et FAUX sinon. FAUX sinon.

Page 55: Algorithmique Types de données abstraites Somaya EL GHARRAS.

L’implantation par pointeurs d’une pile est L’implantation par pointeurs d’une pile est facilitée par le fait que EMPILER et DEPILER facilitée par le fait que EMPILER et DEPILER n’opèrent que sur la tête de liste et la première n’opèrent que sur la tête de liste et la première cellule de la liste. cellule de la liste.

En fait les têtes de listes peuvent être des En fait les têtes de listes peuvent être des pointeurs (ou des curseurs), et on plus des pointeurs (ou des curseurs), et on plus des cellules à part entière, puisque la notion de cellules à part entière, puisque la notion de « position » est inutile pour les piles. « position » est inutile pour les piles.

Un curseur (ou un pointeur) appelé Un curseur (ou un pointeur) appelé sommetsommet indique la position à tout instant du premier indique la position à tout instant du premier élément de la pile. élément de la pile. FigureFigure

Page 56: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Type Type

PILE =PILE = enregistrementenregistrement

Sommet : 1..longmax ;Sommet : 1..longmax ;

Elements : Elements : tableautableau [1 .. longmax] [1 .. longmax] dede TypeElement TypeElement

FinFin ; ; Une variable de type PILE sera donc Une variable de type PILE sera donc

entièrement déterminée par la donnée de la entièrement déterminée par la donnée de la suite suite elements [sommet]elements [sommet] , , elements[sommet elements[sommet + 1]+ 1], … , , … ,

elements [longmax].elements [longmax]. Remarquez que si Remarquez que si sommetsommet = = longmaxlongmax + 1, la + 1, la

pile est vide. pile est vide.

Page 57: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Procédures et fonctions sur les Procédures et fonctions sur les piles  piles 

ProcédureProcédure RAZ ( RAZ (varvar P : PILE) ; P : PILE) ;DébutDébut

P.sommet := longmax +1P.sommet := longmax +1FinFin ; ;

FonctionFonction VIDE (P : PILE) : VIDE (P : PILE) : booléenbooléen ; ;DébutDébut

SiSi P.sommet > longmax P.sommet > longmax alorsalors retourne (VRAI) retourne (VRAI)SinonSinon retourne (FAUX) retourne (FAUX)

FinFin ; ;

Page 58: Algorithmique Types de données abstraites Somaya EL GHARRAS.

FonctionFonction SOMMET ( SOMMET (varvar P : PILE) : P : PILE) : TypeElement ;TypeElement ;

DébutDébut

SiSi VIDE(P) VIDE(P) alorsalors écrireécrire (‘la (‘la pile est vide’)pile est vide’)

SinonSinon retourneretourne (P.elements (P.elements [P.sommet])[P.sommet])

FinFin ; ;

Page 59: Algorithmique Types de données abstraites Somaya EL GHARRAS.

ProcédureProcédure DEPILER ( DEPILER (varvar P : PILE) ; P : PILE) ;DébutDébut

SiSi VIDE(P) VIDE(P) alorsalors écrireécrire (‘la pile est vide’) (‘la pile est vide’)SinonSinon P.sommet := P.sommet + 1 P.sommet := P.sommet + 1

FinFin ; ;

ProcédureProcédure EMPILER (x : TypeElement ; EMPILER (x : TypeElement ; varvar P : PILE) ; P : PILE) ;DébutDébut

SiSi P.sommet = 1 P.sommet = 1 alorsalors écrireécrire (‘la pile est pleine’) (‘la pile est pleine’)

SinonSinon Début Début

P.sommet := P.sommet := P.sommet – 1P.sommet – 1

P.elements P.elements [P.sommet] := x[P.sommet] := x

FinFin ; ;FinFin ; ;

Page 60: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Les files Les files

Une Une filefile est un autre type particulier de est un autre type particulier de liste où les éléments sont insérés en liste où les éléments sont insérés en queuequeue et supprimés en et supprimés en têtetête. .

les insertions se font en fin de liste les insertions se font en fin de liste plutôt qu’en débutplutôt qu’en début. .

Page 61: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Opérations sur les filesOpérations sur les files

RAZ (F) : transforme F en file vide.RAZ (F) : transforme F en file vide. TETE (F) : fonction qui retourne l’élément TETE (F) : fonction qui retourne l’élément

en tête de la file F. en tête de la file F. ENFILER (x,F) : insère l’élément x à la fin ENFILER (x,F) : insère l’élément x à la fin

de la file F.de la file F. DEFILER (F) : supprime le premier DEFILER (F) : supprime le premier

élément de la file F.élément de la file F. VIDE (F) : fonction booléenne qui retourne VIDE (F) : fonction booléenne qui retourne

VRAI si la file F est vide et FAUX sinon. VRAI si la file F est vide et FAUX sinon.

Page 62: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Mise en œuvre des files par Mise en œuvre des files par pointeurspointeurs

TypeType

TypeCellule = TypeCellule = enregistrementenregistrement

Element : TypeElement ;Element : TypeElement ;

Suivant : ^TypeCelluleSuivant : ^TypeCellule

FinFin ; ;

Page 63: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Nous pouvons ensuite définir une Nous pouvons ensuite définir une file file comme la donnée de deux pointeurscomme la donnée de deux pointeurs :  : un premier sur la un premier sur la tête de listetête de liste et un et un second sur second sur la queuela queue. .

Page 64: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Type Type

FILE =FILE = enregistrementenregistrement

Tete, queue : ^TypeCelluleTete, queue : ^TypeCellule

FinFin ; ;

Page 65: Algorithmique Types de données abstraites Somaya EL GHARRAS.

Opérations sur les files  Opérations sur les files  ProcédureProcédure RAZ ( RAZ (varvar F : FILE) ; F : FILE) ;

DébutDébutNouveau (F.tete) ; Nouveau (F.tete) ; {{création d’une cellule de têtecréation d’une cellule de tête}}F.tete^.suivant := nil ;F.tete^.suivant := nil ;F.queue := F.tete ; F.queue := F.tete ; {{l’en-tête est à la fois la dernière et la l’en-tête est à la fois la dernière et la

première cellulepremière cellule}}FinFin ; ;

FonctionFonction VIDE (F : FILE) : VIDE (F : FILE) : booléenbooléen ; ;DébutDébut

SiSi F.tete = F.queue F.tete = F.queue alorsalors retourne (VRAI) retourne (VRAI)SinonSinon retourne (FAUX) retourne (FAUX)

FinFin ; ;FonctionFonction TETE (F : PILE) : TypeElement ; TETE (F : PILE) : TypeElement ;

DébutDébutSiSi VIDE(F) VIDE(F) alorsalors écrireécrire (‘la file est vide’) (‘la file est vide’)

SinonSinon retourneretourne (F.tete^.suivant^.elements) (F.tete^.suivant^.elements)FinFin ; ;

Page 66: Algorithmique Types de données abstraites Somaya EL GHARRAS.

ProcédureProcédure DEFILER ( DEFILER (varvar F : FILE) ; F : FILE) ;DébutDébut

SiSi VIDE(F) VIDE(F) alorsalors écrireécrire (‘la File est vide’) (‘la File est vide’)SinonSinon F.tete := F.tete :=

F.tete^.suivantF.tete^.suivantFinFin ; ;

ProcédureProcédure ENFILER (x : TypeElement ; ENFILER (x : TypeElement ; varvar F : FILE) ; F : FILE) ;DébutDébut

Nouveau (F.queue^.suivant) ; {Nouveau (F.queue^.suivant) ; {ajouter une nouvelle cellule en ajouter une nouvelle cellule en

queue de filequeue de file}}F.queue  := F.queue^.suivant ;F.queue  := F.queue^.suivant ;F.queue^.element := x ;F.queue^.element := x ;F.queue^.suivant := nilF.queue^.suivant := nil

FinFin ; ;