La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Algorithmique Types de données abstraites Somaya EL GHARRAS.

Présentations similaires


Présentation au sujet: "Algorithmique Types de données abstraites Somaya EL GHARRAS."— Transcription de la présentation:

1 Algorithmique Types de données abstraites Somaya EL GHARRAS

2 Linformatique consiste en un traitement automatique de linformation. Linformatique consiste en un traitement automatique de linformation. Somaya EL GHARRAS

3 Les concepts fondamentaux : 1 er concept : 1 er concept : Pour pouvoir être traitée automatiquement, linformation doit être formalisée, modélisée sous forme dun ensemble structuré de relations logicomathématiques : « formalisation et modélisation de linformation ». Pour pouvoir être traitée automatiquement, linformation doit être formalisée, modélisée sous forme dun ensemble structuré de relations logicomathématiques : « formalisation et modélisation de linformation ». 2 ème concept : 2 ème concept : Il a trait au « système » qui va effectuer automatiquement le traitement de linformation. Ce concept est celui « darchitecture des systèmes de traitement automatique de linformation ». Il a trait au « système » qui va effectuer automatiquement le traitement de linformation. Ce concept est celui « darchitecture des systèmes de traitement automatique de linformation ». Somaya EL GHARRAS

4 Les concepts opérationnels A partir de ces deux concepts fondamentaux, ont été élaborés dautres concepts dits opérationnels tels que : A partir de ces deux concepts fondamentaux, ont été élaborés dautres concepts dits opérationnels tels que : Algorithme Algorithme Programme Programme Structure de données Structure de données Somaya EL GHARRAS

5 Structures de données Le type dune variable : Le type dune variable : Lensemble des valeurs quune variable peut prendre est appelé son type. Lensemble des valeurs quune variable peut prendre est appelé son type. Le type attribué aux différentes constantes, variables ou fonctions est rendu explicite dans une déclaration. Le type attribué aux différentes constantes, variables ou fonctions est rendu explicite dans une déclaration. Une déclaration de variable est notée : Une déclaration de variable est notée : Var v : T Var v : T Somaya EL GHARRAS

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

7 Enregistrement Il est courant et utile de structurer dans une même structure des données de types différents. Il est courant et utile de structurer dans une même structure des données de types différents. Somaya EL GHARRAS

8 Type date = enregistrement Type date = enregistrement jour : ; mois : ; année : ; fin ; alpha = chaîne de caractère (20) ; sex = (homme, femme) ; personne = enregistrement nom : alpha ; prénom : alpha ; naissance : date ; sexe : sex ; fin ; fin ; varp : personne ; Somaya EL GHARRAS

9 Le prénom de la personne enregistrée dans la variable p est sélectionné par : Le prénom de la personne enregistrée dans la variable p est sélectionné par :p.prénom Le mois de sa naissance est sélectionné par : Le mois de sa naissance est sélectionné par :p.naissance.mois Somaya EL GHARRAS

10 Soit a un tableau de 50 personnes. Soit a un tableau de 50 personnes. Var a : tableau [1..50] de personne ; Var a : tableau [1..50] de personne ; Le prénom de la personne enregistrée au rang i est sélectionné par : Le prénom de la personne enregistrée au rang i est sélectionné par :a[i].prénom Son mois de naissance est sélectionné par : Son mois de naissance est sélectionné par :a[i].naissance.mois Somaya EL GHARRAS

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

12 Ex 1 Ex 1 les coordonnées dun point du plan peuvent être données soit en cartésienne soit en polaire. les coordonnées dun point du plan peuvent être données soit en cartésienne soit en polaire. Type Type coordonnée = enregistrement Cas sorte : (cartésien, polaire) de Cartésien : ( x, y : réel) ; Polaire : (r : réel, a: angle) ; Fin ; Somaya EL GHARRAS

13 Lindicateur de cas est sorte qui est du type (cartésien, polaire). Selon la valeur de cet indicateur les composantes suivantes de lenregistrement sont deux réels x et y, ou, un réel r et un angle a où lon suppose que le type angle a été défini préalablement. Lindicateur de cas est sorte qui est du type (cartésien, polaire). Selon la valeur de cet indicateur les composantes suivantes de lenregistrement sont deux réels x et y, ou, un réel r et un angle a où lon suppose que le type angle a été défini préalablement. Somaya EL GHARRAS

14 Si lindicateur de cas est une valeur logique, la déclaration peut prendre la forme suivante : Si lindicateur de cas est une valeur logique, la déclaration peut prendre la forme suivante : Type T = enregistrement Type T = enregistrement s 1 : T 1 ; s 2 : T 2 ; … ; s n-1 : T n-1 ; si t alors (s 1,1 : T 1,1 ; … ; s 1,n1 : T 1,n1 ) sinon (s 2,1 : T 2,1 ; … ; s 2,n2 : T 2,n2 ) sinon (s 2,1 : T 2,1 ; … ; s 2,n2 : T 2,n2 ) Fin; Somaya EL GHARRAS

15 Ex2 Le type coordonnée peut être défini en utilisant une variable logique cart au lieu de sorte, en supposant cart vrai sil sagit de coordonnées cartésiennes et faux sinon. Le type coordonnée peut être défini en utilisant une variable logique cart au lieu de sorte, en supposant cart vrai sil sagit de coordonnées cartésiennes et faux sinon. Type Type coordonnée = enregistrement Si cart alors (x,y : réel) sinon (r : réel ; a :angle) fin ; Somaya EL GHARRAS

16 Type de données abstraites On peut concevoir un type de données abstraites comme la connaissance dun modèle mathématique et des opérations qui lui sont associées. On peut concevoir un type de données abstraites comme la connaissance dun modèle mathématique et des opérations qui lui sont associées. Somaya EL GHARRAS

17 Structures de données dynamiques Considérons, par exemple, la généalogie dune personne connue ou inconnue définie par : Considérons, par exemple, la généalogie dune personne connue ou inconnue définie par : La mention « inconnu » pour un individu qui ne lest pas ; La mention « inconnu » pour un individu qui ne lest pas ; La mention « connu » suivi de son « nom » et de la généalogie du père » et de « celle de la mère », pour une personne connue. La mention « connu » suivi de son « nom » et de la généalogie du père » et de « celle de la mère », pour une personne connue. Somaya EL GHARRAS

18 Pour répondre à ce genre de situation, on a recours à une allocation dynamique de la mémoire, cest-à-dire que la réservation de lespace nécessaire se fait au moment de lexécution au fur et à mesure des besoins rencontrés. Pour répondre à ce genre de situation, on a recours à une allocation dynamique de la mémoire, cest-à-dire que la réservation de lespace nécessaire se fait au moment de lexécution au fur et à mesure des besoins rencontrés. Ceci par opposition à une allocation statique pour laquelle la réservation peut être faite avant lexécution. Les structures de données qui supposent une allocation dynamique sont appelées des structures dynamiques. Ceci par opposition à une allocation statique pour laquelle la réservation peut être faite avant lexécution. Les structures de données qui supposent une allocation dynamique sont appelées des structures dynamiques. Somaya EL GHARRAS

19 Données récursives Données récursives Considérons la généalogie dune personne mentionnée précédemment. Considérons la généalogie dune personne mentionnée précédemment. Type généalogie = enregistrement Si connu alors (nom : alpha ; père, mère : généalogie) fin ; fin ; Somaya EL GHARRAS

20 La valeur du type généalogie définie par : La valeur du type généalogie définie par : (V, Mohammed, (V, Ali, (V, Brahim, (F), (F)), (F)), (V, Fatima, (F), (V, Aicha, (F), (F)))) est représentée par la figure suivante. suivante V et F se lisent vrai et faux, chaque paire de parenthèses associées se lit comme la construction dune valeur du type : généalogie ( ). V et F se lisent vrai et faux, chaque paire de parenthèses associées se lit comme la construction dune valeur du type : généalogie ( ). Somaya EL GHARRAS

21 V Mohammed V Ali V Brahim F F F VFatima F V Aicha F F

22 Exemple 2 Une « expression » consiste en : un terme suivi dun opérateur suivi dun terme. Les deux termes sont les opérandes de lopérateur quils encadrent. Une « expression » consiste en : un terme suivi dun opérateur suivi dun terme. Les deux termes sont les opérandes de lopérateur quils encadrent. Un terme est soit une variable – représentée par un identificateur – soit une expression entre parenthèses. Un terme est soit une variable – représentée par un identificateur – soit une expression entre parenthèses.

23 Type expression = enregistrement Op : opérateur ; op1, op2 : terme ; fin ; fin ; terme = enregistrement si t alors(id : alpha) sinon(sousexp : expression) fin ;

24 Les expressions suivantes : Les expressions suivantes : x + y x + 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 suivantes : suivantes

25 Le type pointeur Considérons la figure qui représente sous une autre forme la généalogie de la figure précédente. Considérons la figure qui représente sous une autre forme la généalogie de la figure précédente. Lindicateur Vrai ou Faux y est présent ainsi que le nom, mais lemboîtement des généalogies y est figurée par deux flèches ou pointeurs qui renvoient respectivement à la généalogie du père pour la plus à gauche, à la généalogie de la mère pour la plus à droite. Lindicateur Vrai ou Faux y est présent ainsi que le nom, mais lemboîtement des généalogies y est figurée par deux flèches ou pointeurs qui renvoient respectivement à la généalogie du père pour la plus à gauche, à la généalogie de la mère pour la plus à droite. Figure Figure Figure

26 Si nous supprimons la généalogie dune personne inconnue, nous pouvons du même coup nous passer de lindicateur. Si nous supprimons la généalogie dune personne inconnue, nous pouvons du même coup nous passer de lindicateur. Certaines flèches, dans un tel cas, « ne vont nulle part ». Nous pouvons le noter au moyen dune flèche spéciale que nous appellerons nil (null). Certaines flèches, dans un tel cas, « ne vont nulle part ». Nous pouvons le noter au moyen dune flèche spéciale que nous appellerons nil (null). figure figure figure

27 Supposons quaprès avoir établi la généalogie de Mohammed, nous découvrons dans une étape ultérieure que la mère de Ali est Zahra dont la généalogie nous est donnée par la figure suivante Supposons quaprès avoir établi la généalogie de Mohammed, nous découvrons dans une étape ultérieure que la mère de Ali est Zahra dont la généalogie nous est donnée par la figure suivantefigure suivantefigure suivante Ces considérations suffisent à justifier lintroduction dun type de données, pointeur, qui répond au fonctionnement des flèches. Ces considérations suffisent à justifier lintroduction dun type de données, pointeur, qui répond au fonctionnement des flèches.

28 Un pointeur est une variable contenant l'adresse d'une autre variable d'un type donné. Un pointeur est une variable contenant l'adresse d'une autre variable d'un type donné. Cette technique de programmation très puissante, permet de définir des structures dynamiques, c'est-à-dire qui évoluent au cours du temps (par opposition aux tableaux par exemple qui sont des structures de données statiques, dont la taille est figée à la définition). Cette technique de programmation très puissante, permet de définir des structures dynamiques, c'est-à-dire qui évoluent au cours du temps (par opposition aux tableaux par exemple qui sont des structures de données statiques, dont la taille est figée à la définition).

29 Un type de pointeur est défini par une déclaration de la forme : Un type de pointeur est défini par une déclaration de la forme : Type Tp = ^T Où la flèche verticale se lit « pointeur vers » et T est un type préalablement défini. Langage C : Langage C : Etant donné un type T quelconque, le type pointeur sur T s'écrit « T* » Etant donné un type T quelconque, le type pointeur sur T s'écrit « T* » Ainsi, la définition d'une variable p du type ««pointeur sur T » correspond à l'instruction T *p; Ainsi, la définition d'une variable p du type ««pointeur sur T » correspond à l'instruction T *p;

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

31 Hormis ce cas spécial, la valeur dun pointeur p de type ^T est une variable de type T. Hormis ce cas spécial, la valeur dun pointeur p de type ^T est une variable de type T. Cette variable est notée p^. Cependant, p^ nest pas entièrement assimilable à un identificateur de variable du type T. En effet, on ne suppose pas a priori quun espace est réservé pour ranger la valeur de p^. La réservation dun tel espace est dynamique. Cette variable est notée p^. Cependant, p^ nest pas entièrement assimilable à un identificateur de variable du type T. En effet, on ne suppose pas a priori quun espace est réservé pour ranger la valeur de p^. La réservation dun tel espace est dynamique. Elle est explicitement demandée par linstruction : Elle est explicitement demandée par linstruction : Nouveau (p) ;

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

33 Lespace alloué à un instant donné à la variable visée par un pointeur peut se trouver libéré lors de lexécution dune instruction de la forme : Lespace alloué à un instant donné à la variable visée par un pointeur peut se trouver libéré lors de lexécution dune instruction de la forme : Nouveau(p)oup := q

34 Après lexécution de la suite dinstructions : Après lexécution de la suite dinstructions : Nouveau (p) ; q := p ; nouveau(p) Lespace initialement réservé pour p^ reste réservé pour q^ (figure 2.5.d) Lespace initialement réservé pour p^ reste réservé pour q^ (figure 2.5.d)figure 2.5.dfigure 2.5.d

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

36 Représentation en mémoire des pointeurs Linstruction nouveau(p), où p est un pointeur de type ^T, a pour effet de réserver lallocation mémoire pour une variable de type T avec p pointant sur cette variable. Linstruction nouveau(p), où p est un pointeur de type ^T, a pour effet de réserver lallocation mémoire pour une variable de type T avec p pointant sur cette variable. Figure Figure Figure

37 Structures fondamentales Les structures fondamentales de base : tableau, enregistrement, pointeur ont été définies comme des types de données. Les structures fondamentales de base : tableau, enregistrement, pointeur ont été définies comme des types de données. Dautres structures : listes linéaires, arbres, …, jouent un rôle important. Mais il nest pas nécessaire pour les définir dintroduire des types dun caractère entièrement nouveau. Dautres structures : listes linéaires, arbres, …, jouent un rôle important. Mais il nest pas nécessaire pour les définir dintroduire des types dun caractère entièrement nouveau.

38 Notion de suite (ou liste) Dans la vie courante, on a souvent affaire à des collections homogènes dobjets ou dindividus, dont la taille est susceptible de varier à la suite dajouts ou de retraits déléments, organisées de la manière suivante : Dans la vie courante, on a souvent affaire à des collections homogènes dobjets ou dindividus, dont la taille est susceptible de varier à la suite dajouts ou de retraits déléments, organisées de la manière suivante : On sait repérer lune, lautre ou les deux extrémités de la structure ; On sait repérer lune, lautre ou les deux extrémités de la structure ; Les éléments sont ordonnés, et lon peut donc définir le suivant et le précédent de tout élément qui nest pas une extrémité ; Les éléments sont ordonnés, et lon peut donc définir le suivant et le précédent de tout élément qui nest pas une extrémité ; Pour atteindre un élément particulier, on doit nécessairement parcourir séquentiellement la structure à partir dune extrémité, jusquà le trouver. Pour atteindre un élément particulier, on doit nécessairement parcourir séquentiellement la structure à partir dune extrémité, jusquà le trouver.

39 Nous appelons suite une telle organisation dynamique homogène. Selon le mode dexploitation dune suite, on définit différentes structures de données que nous allons présenter. Nous appelons suite une telle organisation dynamique homogène. Selon le mode dexploitation dune suite, on définit différentes structures de données que nous allons présenter. La notion de liste linéaire est celle dune suite finie déléments qui est donnée par un premier élément, et pour chaque élément un lien donnant accès à son suivant. La notion de liste linéaire est celle dune suite finie déléments qui est donnée par un premier élément, et pour chaque élément un lien donnant accès à son suivant.

40 Dun point de vue mathématique, une liste est une suite, vide ou non déléments dun type donné (que nous désignerons par TypeElement). Il est habituel de représenter une telle suite par : Dun point de vue mathématique, une liste est une suite, vide ou non déléments dun type donné (que nous désignerons par TypeElement). Il est habituel de représenter une telle suite par : a1, a2, …, an Où n est positif, et où chaque ai est de type TypeElement. Le nombre n déléments sappelle la longueur de la liste. Le nombre n déléments sappelle la longueur de la liste. Si n>= 1, on dit que a1 est le premier élément et an le dernier. Si n>= 1, on dit que a1 est le premier élément et an le dernier. Si n = 0, on parle de liste vide, sans éléments. Si n = 0, on parle de liste vide, sans éléments.

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

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

43 En revanche, linsertion dun élément au milieu dune liste nécessite de déplacer tous les éléments suivants dans le tableau pour créer la place nécessaire au nouveau venu. En revanche, linsertion dun élément au milieu dune liste nécessite de déplacer tous les éléments suivants dans le tableau pour créer la place nécessaire au nouveau venu. De même, la suppression dun élément quelconque du tableau demande que lon déplace tous ses successeurs pour « boucher le trou » produit, sauf sil sagit du dernier élément de la liste. De même, la suppression dun élément quelconque du tableau demande que lon déplace tous ses successeurs pour « boucher le trou » produit, sauf sil sagit du dernier élément de la liste. Figure Figure Figure

44 Const Longmax = 100 ; { ou nimporte quelle constante appropriée } Type LISTE = enregistrement Elements : tableau [1.. longmax] de TypeElement ; Dernier : entier ; Fin ; Fin ; Position = entier ; Fonction Fin (var L : LISTE) : position ; Début Retourne ( L.dernier + 1) Fin ;

45 Mise en œuvre des listes par pointeurs Une liste est un ensemble de cellules « simplement chaînées » Une liste est un ensemble de cellules « simplement chaînées » Grâce à cette mise en œuvre nous naurons plus à faire de la place ou combler de vide pour insérer ou supprimer des éléments dans les listes, puisque nous nutiliserons plus comme zone de stockage un ensemble de cellules contiguës de la mémoire de la machine. Grâce à cette mise en œuvre nous naurons plus à faire de la place ou combler de vide pour insérer ou supprimer des éléments dans les listes, puisque nous nutiliserons plus comme zone de stockage un ensemble de cellules contiguës de la mémoire de la machine.

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

47 Si la liste est composée de la suite a1, a2, …, an, la cellule contenant ai pointe sur celle contenant a i+1, pour i = 1, 2, …, n-1. Si la liste est composée de la suite a1, a2, …, an, la cellule contenant ai pointe sur celle contenant a i+1, pour i = 1, 2, …, n-1. La cellule contenant a n pointe sur nil. La cellule contenant a n pointe sur nil. Il existe aussi une cellule de tête, appelée en_tête, qui pointe sur a1 ; en_tête ne contient pas délément. Il existe aussi une cellule de tête, appelée en_tête, qui pointe sur a1 ; en_tête ne contient pas délément. Dans le cas dune liste vide, en_tête pointe sur nil et la structure ne contient pas dautre cellule. Dans le cas dune liste vide, en_tête pointe sur nil et la structure ne contient pas dautre cellule. Figure Figure Figure

48 Pour les listes simplement chaînées, il est habituel dutiliser une définition du type position quelque peu différente de celle que nous avons donné dans la mise en œuvre par tableau. Pour les listes simplement chaînées, il est habituel dutiliser une définition du type position quelque peu différente de celle que nous avons donné dans la mise en œuvre par tableau. Ici, la position i est un pointeur sur la cellule contenant un pointeur sur ai pour i = 2, 3, …, n. La position 1 est un pointeur sur len-tête, et la position FIN(L) est un pointeur sur la dernière cellule de L. Ici, la position i est un pointeur sur la cellule contenant un pointeur sur ai pour i = 2, 3, …, n. La position 1 est un pointeur sur len-tête, et la position FIN(L) est un pointeur sur la dernière cellule de L.

49 Type Type Typecellule = enregistrement Element : typeElement ; Suivant : ^typecellule ; Fin ; LISTE = ^typecellule ; Position = ^typecellule ;

50 Fonction FIN (L : LISTE) : position { FIN retourne un pointeur sur la dernière cellule de L } var q : position début q := L ; tant que q^.suivant <> nil faire q := q^.suivant ; retourne (q) ; fin ;

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

52 Procédure dinsertion dun élément dans une liste représentée par tableau Procédure dinsertion dun élément dans une liste représentée par tableau Procédure Insérer (x : TypeElement ; p : position ; var L : LISTE) ; {insérer x à la position p dans la liste L} varq : position ; début Si L.dernier >= longmax alors écrire « la liste est pleine » SinonSi (p > L.dernier +1) ou (p L.dernier +1) ou (p < 1) Alors écrire « position non valide » Sinon Début Pour q := L.dernier downto p faire { décaler les éléments aux positions p, p+1,.. dun rang vers la fin de L } dun rang vers la fin de L } L.elements [q+1] := L.elements [q] ; L.elements [q+1] := L.elements [q] ; L.dernier := L.dernier + 1 ; L.elements [p] := x Fin ; Fin ; {insérer}

53 Les piles Une pile est un type de liste particulier dans lequel toute insertion ou suppression délément se fait à une extrémité, appelée dessus ou sommet de la pile. Une pile est un type de liste particulier dans lequel toute insertion ou suppression délément se fait à une extrémité, appelée dessus ou sommet de la pile. les seules actions possibles sont lajout (empilement) ou le retrait (dépilement) dun élément au sommet. les seules actions possibles sont lajout (empilement) ou le retrait (dépilement) dun élément au sommet.

54 Un type de données abstraites de la famille des piles comprend souvent les cinq opérations suivantes : Un type de données abstraites de la famille des piles comprend souvent les cinq opérations suivantes : RAZ (P) : vider le contenu de la pile P. Cette opération est identique à lopération correspondante pour les listes en général. RAZ (P) : vider le contenu de la pile P. Cette opération est identique à lopération correspondante pour les listes en général. SOMMET (P) : retourner (sans le dépiler) lélément au sommet de la pile P. SOMMET (P) : retourner (sans le dépiler) lélément au sommet de la pile P. DEPILER (P) : supprimer physiquement lélément au sommet de la pile P. DEPILER (P) : supprimer physiquement lélément au sommet de la pile P. EMPILER (x, P) : insérer lélément x au sommet de la pile P. Lancien élément le plus haut devient le deuxième et ainsi de suite. EMPILER (x, P) : insérer lélément x au sommet de la pile P. Lancien élément le plus haut devient le deuxième et ainsi de suite. VIDE (P) : cette fonction retourne VRAI si P est vide et FAUX sinon. VIDE (P) : cette fonction retourne VRAI si P est vide et FAUX sinon.

55 Limplantation par pointeurs dune pile est facilitée par le fait que EMPILER et DEPILER nopèrent que sur la tête de liste et la première cellule de la liste. Limplantation par pointeurs dune pile est facilitée par le fait que EMPILER et DEPILER nopèrent que sur la tête de liste et la première cellule de la liste. En fait les têtes de listes peuvent être des pointeurs (ou des curseurs), et on plus des cellules à part entière, puisque la notion de « position » est inutile pour les piles. En fait les têtes de listes peuvent être des pointeurs (ou des curseurs), et on plus des cellules à part entière, puisque la notion de « position » est inutile pour les piles. Un curseur (ou un pointeur) appelé sommet indique la position à tout instant du premier élément de la pile. Figure Un curseur (ou un pointeur) appelé sommet indique la position à tout instant du premier élément de la pile. FigureFigure

56 Type PILE =enregistrement PILE =enregistrement Sommet : 1..longmax ; Elements : tableau [1.. longmax] de TypeElement Fin ; Une variable de type PILE sera donc entièrement déterminée par la donnée de la suite elements [sommet], elements[sommet + 1], …, Une variable de type PILE sera donc entièrement déterminée par la donnée de la suite elements [sommet], elements[sommet + 1], …, elements [longmax]. Remarquez que si sommet = longmax + 1, la pile est vide. Remarquez que si sommet = longmax + 1, la pile est vide.

57 Procédures et fonctions sur les piles Procédures et fonctions sur les piles Procédure RAZ (var P : PILE) ; Début P.sommet := longmax +1 Fin ; Fonction VIDE (P : PILE) : booléen ; Début Si P.sommet > longmaxalors retourne (VRAI) Sinon retourne (FAUX) Fin ;

58 Fonction SOMMET (var P : PILE) : TypeElement ; Début Si VIDE(P)alors écrire (la pile est vide) Sinon retourne (P.elements [P.sommet]) Fin ;

59 Procédure DEPILER (var P : PILE) ; Début Si VIDE(P) alors écrire (la pile est vide) Sinon P.sommet := P.sommet + 1 Fin ; Procédure EMPILER (x : TypeElement ; var P : PILE) ; Début Si P.sommet = 1 alors écrire (la pile est pleine) SinonDébut P.sommet := P.sommet – 1 P.elements [P.sommet] := x Fin ;

60 Les files Une file est un autre type particulier de liste où les éléments sont insérés en queue et supprimés en tête. Une file est un autre type particulier de liste où les éléments sont insérés en queue et supprimés en tête. les insertions se font en fin de liste plutôt quen début. les insertions se font en fin de liste plutôt quen début.

61 Opé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 en tête de la file F. TETE (F) : fonction qui retourne lélément en tête de la file F. ENFILER (x,F) : insère lélément x à la fin de la file F. ENFILER (x,F) : insère lélément x à la fin de la file F. DEFILER (F) : supprime le premier élément de la file F. DEFILER (F) : supprime le premier élément de la file F. VIDE (F) : fonction booléenne qui retourne VRAI si la file F est vide et FAUX sinon. VIDE (F) : fonction booléenne qui retourne VRAI si la file F est vide et FAUX sinon.

62 Mise en œuvre des files par pointeurs Type TypeCellule = enregistrement Element : TypeElement ; Suivant : ^TypeCellule Fin ;

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

64 Type FILE =enregistrement Tete, queue : ^TypeCellule Fin ;

65 Opérations sur les files Opérations sur les files Procédure RAZ (var F : FILE) ; Début Nouveau (F.tete) ; {création dune cellule de tête} F.tete^.suivant := nil ; F.queue := F.tete ; {len-tête est à la fois la dernière et la première cellule} Fin ; Fonction VIDE (F : FILE) : booléen ; Début Si F.tete = F.queuealors retourne (VRAI) Sinon retourne (FAUX) Fin ; Fonction TETE (F : PILE) : TypeElement ; Début Si VIDE(F)alors écrire (la file est vide) Sinon retourne (F.tete^.suivant^.elements) Fin ;

66 Procédure DEFILER (var F : FILE) ; Début Si VIDE(F) alors écrire (la File est vide) Sinon F.tete := F.tete^.suivant Fin ; Procédure ENFILER (x : TypeElement ; var F : FILE) ; Début Nouveau (F.queue^.suivant) ; { ajouter une nouvelle cellule en queue de file } F.queue := F.queue^.suivant ; F.queue^.element := x ; F.queue^.suivant := nil Fin ;


Télécharger ppt "Algorithmique Types de données abstraites Somaya EL GHARRAS."

Présentations similaires


Annonces Google