Les piles On a affaire une pile de

  • Slides: 19
Download presentation
Les piles On a affaire à une pile de *** • si on a

Les piles On a affaire à une pile de *** • si on a un *** au sommet et qu'en le retirant, on trouve une pile de *** ou bien • si on a une pile vide de *** Les opérations primitives possibles • EMPILER un élément au sommet de la pile • DEPILER : oter le sommet d'une pile non vide • CREER une pile VIDE • savoir si la PILE EST VIDE? • connaître le SOMMET d'une pile non vide Ch. Duchâteau © Ce. FIS - 2002 3/11/2021 Initiation à la programmation - Les piles 1

Les piles (en Pascal) Attention : une fonction ne peut être d'un type structuré

Les piles (en Pascal) Attention : une fonction ne peut être d'un type structuré On déclare : type Type. Des. Elements =. . . Pile =. . . (c'est là tout le problème) Procédures Fonctions • EMPILER procedure EMPILER(var P: Pile; E: Type. Des. Elements); function PILE_AUGMENTEE (P: Pile; E: Type. Des. Elements): Pile; • DEPILER procedure DEPILER(var P: Pile); function PILE_DIMINUEE (P : Pile): Pile; procedure CREER_PILE_VIDE • CREER pile VIDE (var P: Pile); • PILE EST VIDE? • SOMMET procedure VERIFIER_SI_PILE_VIDE (P: Pile; var Vide: boolean); procedure DONNER_SOMMET (P: Pile; var Sommet: Type. Des. Elements); Ch. Duchâteau © Ce. FIS - 2002 3/11/2021 function NOUVELLE_PILE_VIDE : Pile; function PILE_VIDE(P: Pile) : boolean; function SOMMET(P: Pile) : Type. Des. Elements; Initiation à la programmation - Les piles 2

Les piles Implémentation utilisant un tableau : empiler On déclare : const Maxi =

Les piles Implémentation utilisant un tableau : empiler On déclare : const Maxi = taille maximale admise pour le tableau type Type. Des. Elements =. . . Pile = record pile Emplacement. Du. Sommet : 0. . Maxi; Empilement : array[1. . Maxi] of Type. Des. Elements end; tableau Ch. Duchâteau © Ce. FIS - 2002 3/11/2021 Initiation à la programmation - Les piles 3

Les piles Implémentation utilisant un tableau : empiler On déclare : const Maxi =

Les piles Implémentation utilisant un tableau : empiler On déclare : const Maxi = taille maximale admise pour le tableau type Type. Des. Elements =. . . Pile = record Emplacement. Du. Sommet : 0. . Maxi; Empilement : array[1. . Maxi] of Type. Des. Elements end; • EMPILER procedure EMPILER(var P: Pile; E: Type. Des. Elements); { Elle fait placer E au dessus de la pile P. Pour cela elle incrémente de 1 l'Emplacement. Du. Sommet et place E dans le tiroir correspondant} begin with P do begin Emplacement. Du. Sommet: =succ(Emplacement. Du. Sommet); Empilement[Emplacement. Du. Sommet]: =E; end; Ch. Duchâteau © Ce. FIS - 2002 3/11/2021 Initiation à la programmation - Les piles 4

Les piles Implémentation utilisant un tableau : dépiler, créer pile vide • DEPILER procedure

Les piles Implémentation utilisant un tableau : dépiler, créer pile vide • DEPILER procedure DEPILER(var P: Pile); { Elle fait enlever le sommet de la pile P non vide. Pour cela, elle diminue simplement de 1 la valeur du champ Emplacement. Du. Sommet } begin P. Emplacement. Du. Sommet: = pred(P. Emplacement. Du. Sommet); end; • CREER pile VIDE procedure CREER_PILE_VIDE (var P: Pile); { Elle fait créer une pile vide P. Pour cela, elle place simplement dans le champ Emplacement. Du. Sommet de P le nombre 0 } begin P. Emplacement. Du. Sommet: =0; end; Ch. Duchâteau © Ce. FIS - 2002 3/11/2021 Initiation à la programmation - Les piles 5

Les piles Implémentation utilisant un tableau : Pile vide? , Sommet • PILE EST

Les piles Implémentation utilisant un tableau : Pile vide? , Sommet • PILE EST VIDE? function PILE_VIDE(P: Pile) : boolean; { Elle teste si P est une pile vide. Pour cela, elle teste si l'Emplacement. Du. Sommet est égal à 0} begin PILE_VIDE: =P. Emplacement. Du. Sommet=0; end; • SOMMET function SOMMET(P: Pile) : Type. Des. Elements; { Elle donne l'élément qui est au sommet de la pile P non vide } begin SOMMET: =P. Empilement[P. Emplacement. Du. Sommet]; end; Ch. Duchâteau © Ce. FIS - 2002 3/11/2021 Initiation à la programmation - Les piles 6

Pointeurs et variables dynamiques variable statique variable dynamique définie dès la compilation créée pendant

Pointeurs et variables dynamiques variable statique variable dynamique définie dès la compilation créée pendant l'exécution nécessité de définir une variable pointeur vers le type de la variable dynamique si la variable dynamique "sera" de type Type. Dynamique, on déclare var P : ^Type. Dynamique ou encore type Pointeur. Vers. Type. Dynamique = ^Type. Dynamique et var P : Pointeur. Vers. Type. Dynamique la variable (quand elle existera) pointée par P est notée P^ Ch. Duchâteau © Ce. FIS - 2002 3/11/2021 Initiation à la programmation - Les piles 7

Pointeurs et variables dynamiques création : new Après une déclaration comme et type Pointeur.

Pointeurs et variables dynamiques création : new Après une déclaration comme et type Pointeur. Vers. Entier = ^integer var P : Pointeur. Vers. Entier P^ n'existe pas encore (P pointe vers "rien de précis") Pour faire exister P^ , il faut donner l'instruction new(P) Ch. Duchâteau © Ce. FIS - 2002 3/11/2021 Initiation à la programmation - Les piles 8

Pointeurs et variables dynamiques le pointeur nil Après une déclaration comme et type Pointeur.

Pointeurs et variables dynamiques le pointeur nil Après une déclaration comme et type Pointeur. Vers. Entier = ^integer var P : Pointeur. Vers. Entier P^ n'existe pas encore (P pointe vers "rien de précis") On peut aussi écrire P: =nil Ch. Duchâteau © Ce. FIS - 2002 3/11/2021 Initiation à la programmation - Les piles 9

Pointeurs et variables dynamiques l'affectation entre pointeur Après une déclaration comme et type Pointeur.

Pointeurs et variables dynamiques l'affectation entre pointeur Après une déclaration comme et type Pointeur. Vers. Entier = ^integer var P, Q : Pointeur. Vers. Entier Q: =P Ch. Duchâteau © Ce. FIS - 2002 3/11/2021 Initiation à la programmation - Les piles 10

Les piles : implémentation utilisant pointeurs et variables dynamiques : définition On déclare :

Les piles : implémentation utilisant pointeurs et variables dynamiques : définition On déclare : type Type. Des. Elements =. . . Pile = Noeud = ^Noeud record Contenu : Type. Des. Eléments; Lien : Pile; end; Ch. Duchâteau © Ce. FIS - 2002 3/11/2021 Initiation à la programmation - Les piles 11

Les piles : implémentation utilisant pointeurs et variables dynamiques : empiler (1) • EMPILER

Les piles : implémentation utilisant pointeurs et variables dynamiques : empiler (1) • EMPILER procedure EMPILER(var P: Pile; E: Type. Des. Elements); var PP : Pile; begin new(PP); Ch. Duchâteau © Ce. FIS - 2002 PP^. Contenu: =E; 3/11/2021 Initiation à la programmation - Les piles 12

Les piles : implémentation utilisant pointeurs et variables dynamiques : empiler (2) • EMPILER

Les piles : implémentation utilisant pointeurs et variables dynamiques : empiler (2) • EMPILER procedure EMPILER(var P: Pile; E: Type. Des. Elements); PP^. Lien: =P; Ch. Duchâteau © Ce. FIS - 2002 3/11/2021 Initiation à la programmation - Les piles 13

Les piles : implémentation utilisant pointeurs et variables dynamiques : empiler (3) • EMPILER

Les piles : implémentation utilisant pointeurs et variables dynamiques : empiler (3) • EMPILER procedure EMPILER(var P: Pile; E: Type. Des. Elements); P: =PP; end; Ch. Duchâteau © Ce. FIS - 2002 3/11/2021 Initiation à la programmation - Les piles 14

Les piles : implémentation utilisant pointeurs et variables dynamiques : dépiler • DEPILER procedure

Les piles : implémentation utilisant pointeurs et variables dynamiques : dépiler • DEPILER procedure DEPILER(var P: Pile); begin P: =P^. Lien; end; Ch. Duchâteau © Ce. FIS - 2002 3/11/2021 Initiation à la programmation - Les piles 15

Les piles : implémentation utilisant pointeurs et variables dynamiques : créer pile vide •

Les piles : implémentation utilisant pointeurs et variables dynamiques : créer pile vide • CREER pile VIDE procedure CREER_PILE_VIDE (var P: Pile); begin P: =nil; end; Ch. Duchâteau © Ce. FIS - 2002 3/11/2021 Initiation à la programmation - Les piles 16

Les piles : implémentation utilisant pointeurs et variables dynamiques : pile vide? , sommet

Les piles : implémentation utilisant pointeurs et variables dynamiques : pile vide? , sommet • PILE EST VIDE? function PILE_VIDE(P: Pile) : boolean; begin PILE_VIDE: =P=nil; end; • SOMMET function SOMMET(P: Pile) : Type. Des. Elements; begin SOMMET : = P^. Contenu; end; Ch. Duchâteau © Ce. FIS - 2002 3/11/2021 Initiation à la programmation - Les piles 17

Les piles compter les éléments Une procédure utilisant les primitives sous forme de procédures

Les piles compter les éléments Une procédure utilisant les primitives sous forme de procédures et fonctions procedure COMPTER(P: Pile; var Nombre : integer); begin if PILE_VIDE (P) then begin Nombre : = 0; exit; end; DEPILER(P); COMPTER (P, Nombre); Nombre : = Nombre +1; end; Ch. Duchâteau © Ce. FIS - 2002 3/11/2021 Une fonction utilisant les primitives sous forme de fonctions function NOMBRE(P: Pile) : integer; begin if PILE_VIDE(P) then begin NOMBRE: =0; exit; end; NOMBRE: =NOMBRE(PILE_DIMINUEE(P))+1; end; en vert, les primitives en bleu, les appels récursifs Initiation à la programmation - Les piles 18

Les piles obtenir le dernier élément d'une pile non vide Une procédure utilisant les

Les piles obtenir le dernier élément d'une pile non vide Une procédure utilisant les primitives sous forme de procédures et fonctions Une fonction utilisant les primitives sous forme de fonctions procedure DONNER_DERNIER(P: Pile; var Dernier : Type. Des. Elements); begin Dernier: = SOMMET(P); DEPILER(P); if PILE_VIDE (P) then begin exit; end; DONNER_DERNIER(P, Dernier) end; function DERNIER(P: Pile) : Type. Des. Elements; begin if PILE_VIDE(PILE_DIMINUEE(P)) then begin DERNIER: =SOMMET(P); exit; end; DERNIER: =DERNIER(PILE_DIMINUEE(P)); end; Ch. Duchâteau © Ce. FIS - 2002 3/11/2021 en vert, les primitives en bleu, les appels récursifs Initiation à la programmation - Les piles 19