coursAlgo_V4

Embed Size (px)

Citation preview

  • 7/30/2019 coursAlgo_V4

    1/53

    iUT ORSAY

    U niversit Paris XI

    I.U.T. d'OrsayDpartement InformatiqueAnne scolaire 2003-2004

    Algorithmique : Volume 4 Listes chanes Piles et files

    Ccile Balkanski, Nelly Bensimon, Grard Ligozat

  • 7/30/2019 coursAlgo_V4

    2/53

    Algorithmique 4 : Listes chanes 1

    Retour au type tableau

    Avantages

    - Accs direct un lment quelconque du tableau par unindice

    - Souplesse dans lcriture des algorithmes

    - Algorithmes de recherche trs performants quand leslments sont ordonns

  • 7/30/2019 coursAlgo_V4

    3/53

    Algorithmique 4 : Listes chanes 2

    Retour au type tableau (suite)

    Inconvnients- Ncessit de dfinir la dimension maximale alloue ds la

    dclaration, c'est dire de faon statique

    - Lourdeur dans la gestion optimale de l'espace occup parles donnes

    - Ncessit d'effectuer des contrles de dbordement chaque tape du traitement

  • 7/30/2019 coursAlgo_V4

    4/53

    Algorithmique 4 : Listes chanes 3

    Cahier des charges d'une

    reprsentation moins contrainte Permettre l'allocation de mmoire en fonction des besoins,

    de faon dynamique

    Faciliter la gestion de la mmoire occupe en casd'insertion ou de suppression de nouvelles donnes

    Simulation de phnomnes du monde physique malreprsents par la structure en tableaux

    Exemples de situations : File d'attente un guichet Urgences d'un hpital

    Distribution de cartes une table de joueurs

    Gestion des dossiers empils sur un bureau

  • 7/30/2019 coursAlgo_V4

    5/53

    Algorithmique 4 : Listes chanes 4

    La notion de liste chane

    donne

    donne donne

    donne donne

    cellule

    li e n

  • 7/30/2019 coursAlgo_V4

    6/53

    Algorithmique 4 : Listes chanes 5

    Insertion/suppression d'une donne

    donne

    donne donne

    donne donne

    nouvelledonne

    nouvelledonne

    nouvelledonne

    Cellule insrer en milieu de chane

    Cellule insrer

    en fin de chane

    Cellule insrer en dbut de chane

    cellule retirer

  • 7/30/2019 coursAlgo_V4

    7/53

    Algorithmique 4 : Listes chanes 6

    Reprage des cellules

    d'une liste chane

    donne

    donne donne

    donnedonne

    Premire("tte")

    PrcdenteCourante

    Suivante

    Dernire("queue")

  • 7/30/2019 coursAlgo_V4

    8/53

    Algorithmique 4 : Listes chanes 7

    Exemples de traitements oprssur les listes (1)

    Traitements relatifs la composition structurellede la liste :- Positionnement sur la premire cellule de la structure

    - Positionnement sur la dernire cellule de la structure

    - Calcul de la longueur d'une liste (nombre de cellules)

    - Reconnaissance d'une liste vide

    - Dplacement du positionnement courant sur la cellule

    suivante

  • 7/30/2019 coursAlgo_V4

    9/53

    Algorithmique 4 : Listes chanes 8

    Exemples de traitements oprssur les listes (2)

    Traitements relatifs l'information enregistredans une liste :- Enregistrement de donnes jusqu' puisement du flot de

    donnes

    - Visualisation de l'information enregistre dans une cellule,quelle que soit sa place dans la liste

    - Visualisation de l'ensemble des informations enregistresdans la liste

    - Suppression d'une cellule; ajout dune cellule

  • 7/30/2019 coursAlgo_V4

    10/53

    Algorithmique 4 : Listes chanes 9

    Cahier des charges

    pour une classe Liste Les attributs de la classe Liste doivent

    permettre: le positionnement sur les diffrentes cellules de la liste

    la dfinition du type d'information enregistre dans lacellule

    Les mthodes de la classe doivent permettretous les traitements dcrits prcdemment(et plus...)

  • 7/30/2019 coursAlgo_V4

    11/53

    Algorithmique 4 : Listes chanes 10

    Dfinition de la classe Liste

    classe ListeAttributs :

    tte : rfrence {rfrence la cellule tte de liste}curseur : rfrence {rfrence la cellule courante}

    rfrence : type dont le domaine de dfinition est l'ensemble des adressesmmoire.

    - Valeur de lattribut tte (attribut curseur ) : adresse de la case mmoire oest stocke la cellule de tte de liste (cellule courante)

    - Reprsentation graphique : une flche

    cellule tte

    curseur

    listeAcellule

  • 7/30/2019 coursAlgo_V4

    12/53

    Algorithmique 4 : Listes chanes 11

    Dfinition d'une cellule

    type Cellule = agrgatval : Info {information stocke dans une cellule}suivant : rfrence {rfrence une autre cellule}fin

    Info : le type de l'information stocke; peut-tre un type de base (par

    exemple, un entier) ou bien un type complexe (un agrgat)

    Reprsentation graphique des cellules :

    tte

    curseur

    val1 val2

    val4

    val3

    listeA

  • 7/30/2019 coursAlgo_V4

    13/53

    Algorithmique 4 : Listes chanes 12

    Mthodes de la classe ListeMProcdure suivant(){place le curseur sur la cellule qui suit la cellule courante.Si le curseur tait sur la dernire cellule, il devient hors liste. Erreur si la liste

    est vide ou si le curseur est dj hors liste.}paramtre (D/R) cible : Liste

    exemple :

    liste initiale L1 aprs L1.suivant()

  • 7/30/2019 coursAlgo_V4

    14/53

    Algorithmique 4 : Listes chanes 13

    Mthodes (suite)MProcdure premier(){place le curseur sur la premire cellule de la liste.Si la liste est vide, le curseur reste hors liste.}paramtre (D/R) cible : Liste

    MProcdure dernier(){place le curseur sur la dernire cellule de la liste.Si la liste est vide, le curseur reste hors liste.}paramtre (D/R) cible : Liste

    MFonction vide() retourne boolen{retourne vrai si la liste est vide, faux sinon}paramtre (D) cible : Liste

  • 7/30/2019 coursAlgo_V4

    15/53

    Algorithmique 4 : Listes chanes 14

    Mthodes (suite)MFonction horsListe() retourne boolen{retourne vrai si le curseur est plac hors liste ou si la liste est vide, faux sinon.}

    paramtre (D) cible : ListeMFonction info() retourne Info{retourne la valeur enregistre dans la cellule courante.

    Erreur si la liste est vide ou si le curseur est hors liste.}paramtre (D) cible : Liste

    MProcdure affecter(val)

    {affecte la valeur val la cellule courante.Erreur si la liste est vide ou si le curseur est hors liste.}paramtres (D/R) cible : Liste

    (D) val : Info

  • 7/30/2019 coursAlgo_V4

    16/53

    Algorithmique 4 : Listes chanes 15

    Mthodes (suite)MProcdure insrerAvant(val){cre une nouvelle cellule, y affecte la valeur val, et l'insre avant la cellule courante. Le curseur est alors plac sur cette nouvelle cellule qui devient ainsi la nouvelle cellule courante. Si le curseur tait plac sur la tte, la nouvelle cellule devient la nouvelle tte.Si la liste tait vide, elle contient maintenant l'unique cellule qui

    vient d'tre cre.Erreur si la liste tait non vide et le curseur hors liste.}paramtres (D/R) cible : Liste

    (D) val : Info

    Remarque :premier() suivi de insrerAvant(val) ajouter en tte

  • 7/30/2019 coursAlgo_V4

    17/53

    Algorithmique 4 : Listes chanes 16

    Insertion dune cellule : insrerAvant

    cellule couranteinsrerAvant :en milieu de liste

    1e donne 2e donne nouvelle

    donne3e donne 4 e donne

    nouvelle cellule

    nouvelledonne

    1e donne 2 e donne

    cellule courante

    nouvelle cellule couranteinsrerAvant :en dbut de liste

    nouvelle cellule

  • 7/30/2019 coursAlgo_V4

    18/53

    Algorithmique 4 : Listes chanes 17

    Mthodes (suite)

    MProcdure insrerAprs(val){cre une nouvelle cellule, y affecte la valeur val, et l'insre aprs

    la cellule courante. Le curseur est alors plac sur cette nouvelle cellule qui devient ainsi la nouvelle cellule courante. Si liste tait vide, elle contient maintenant l'unique cellule qui vient d'tre cre. Erreur si la liste tait non vide et le curseur hors liste.}paramtres (D/R) cible : Liste

    (D) val : Info

    Remarque :dernier() suivi de insrerAprs(val) ajouter en queue

  • 7/30/2019 coursAlgo_V4

    19/53

    Algorithmique 4 : Listes chanes 18

    Insertion dune cellule : insrerAprsinsrerAprs :en milieu de liste

    cellule courante

    1e donne 2 e donne 3 e donne nouvelledonne 4e donne

    nouvelle cellule

    nouvelledonne

    nouvelle cellule

    1e donne 2 e donne 3 e donne

    cellule courante

    nouvelle cellule couranteinsrerAprs :en fin de liste

  • 7/30/2019 coursAlgo_V4

    20/53

    Algorithmique 4 : Listes chanes 19

    Mthodes (suite)MProcdure supprimer(){supprime la cellule courante. Le curseur est alors plac sur la cellule suivante qui devient ainsi la nouvelle cellule courante.

    Si la cellule supprimer est la dernire cellule, le curseur devient hors liste. Si la cellule supprimer est la tte, la cellule suivante devient alors la nouvelle tte. Si la liste ne contenait qu'une seule cellule, la liste devient vide. Erreur si la liste est vide ou si le curseur est hors liste.}paramtre (D/R) cible : Liste

    Remarquepremier() suivi de supprimer() supprimer en ttedernier() suivi de supprimer() supprimer en queue

  • 7/30/2019 coursAlgo_V4

    21/53

    Algorithmique 4 : Listes chanes 20

    Suppression dune cellulecellule courante, supprimer

    1e donne 2 e donne 3 e donne 4 e donne 5 e donne

    4e

    donne1e donne 2 e donne 3 e donne

    nouvelle cellule courante

    cellule courante, supprimer

    supprimer :en milieu de liste

    supprimer :en fin de liste

    Mth d ( i fi )

  • 7/30/2019 coursAlgo_V4

    22/53

    Algorithmique 4 : Listes chanes 21

    Mthodes (suite et fin)

    MProcdure saisirListe(){Saisit des valeurs (de type Info), jusqu' une valeur d'arrt, et cre au fur et mesure autant de cellules que ncessaire, en y affectant les valeurs saisies. Le curseur est ensuite replac en tte de liste.}paramtre (R) cible : Liste

    MProcdure afficherListe(){Affiche toutes les valeurs contenues dans la liste cible.}paramtre (D) cible : Liste

    MProcdure supprimerTout(){supprime toutes les cellules de la liste (qui peut tre vide); la liste devient vide et le curseur devient hors liste.}paramtre (D/R) cible : Liste

  • 7/30/2019 coursAlgo_V4

    23/53

    Algorithmique 4 : Listes chanes 22

    Remarques importantes

    Mthodes de deux types :- mthodes de base: leur dfinition ncessite de modifier les attributs

    privs de la classe (sera fait en C++).- saisirListe() , afficherListe(), supprimerTout() : mthodes rajoutes

    la classe pour rendre son utilisation plus commode; leur dfinitionpeut se faire laide des mthodes de base.

    Rappel : les 3 acteurs de la programmationobjet :- programmeur concepteur de la classe- programmeur utilisateur de la classe- utilisateur de lapplication

    Saisie d'une liste

  • 7/30/2019 coursAlgo_V4

    24/53

    Algorithmique 4 : Listes chanes 23

    Saisie d une liste

    MProcdure saisirListe(){Saisit des valeurs (de type Info), jusqu' une valeur d'arrt (constante dfinie dans l'algorithme appelant), et cre au fur et mesure autant de cellules que ncessaire, en y affectant les valeurs saisies. Le curseur est ensuite replac en

    tte de liste.}paramtre (R) cible : Listevariables uneVal : Info

    cpt : entier

    dbut saisir (uneVal) ; cpt 0tant que uneVal valStop faire

    cpt cpt + 1

    cible.insrerAprs(uneVal)saisir(uneVal)ftqcible.premier() {replace le curseur en tte}afficher(La nouvelle liste contient , cpt, cellules.)fin

  • 7/30/2019 coursAlgo_V4

    25/53

    Algorithmique 4 : Listes chanes 24

    Saisie d'une liste : simulation

    Affi h d' li t

  • 7/30/2019 coursAlgo_V4

    26/53

    Algorithmique 4 : Listes chanes 25

    Affichage d'une liste

    MProcdure afficherListe(){Affiche toutes les valeurs contenues dans la liste cible.}paramtre (D) cible : Listevariable copieCible : Listedbut

    copieCible cible {copie de la cible,pour permettre modification du curseur}

    copieCible.premier() {place le curseur en tte}tant que non copieCible.horsListe() faire

    {arrt quand curseur hors liste}afficher( copieCible.info()) {rcupre la valeur de la cellule

    courante et l'affiche}copieCible.suivant() {place le curseur sur la cellule

    suivante}ftq

    fin

  • 7/30/2019 coursAlgo_V4

    27/53

    Algorithmique 4 : Listes chanes 26

    Exemple dalgorithme (1)

    Algorithme ManipListes1{Saisie et affichage dune liste.}constante (VALSTOP : entier) 0variable listeA : Listedbut

    listeA.saisirListe()

    afficher("Liste saisie : ")listeA.afficher()fin

  • 7/30/2019 coursAlgo_V4

    28/53

    Algorithmique 4 : Listes chanes 27

    Exemple de fonction utilisant la

    classe liste (1)Fonction valMin(uneListe) retourne rel{retourne la plus petite valeur contenue dans une liste de rels suppose non

    vide}paramtre (D) uneListe : ListeRel

    l d f l l

  • 7/30/2019 coursAlgo_V4

    29/53

    Algorithmique 4 : Listes chanes 28

    Exemple de fonction utilisant la

    classe liste (2)Fonction inverse(uneListe) retourne Liste{cre une nouvelle liste, en y affectant les valeurs de la liste uneListe mais dans

    l'ordre inverse. La liste uneListe est suppose non vide}paramtre (D) uneListe : Liste

    E l d f i ili l

  • 7/30/2019 coursAlgo_V4

    30/53

    Algorithmique 4 : Listes chanes 29

    Exemple de fonction utilisant la

    classe liste (3)Procdure supprimerGlobal(uneVal, uneListe){supprime toutes les cellules de la liste uneListe qui contiennent la valeur uneVal. Replace le curseur en tte.}paramtre (D/R) uneListe : Liste

    (D) uneVal : Info

    E l d l i h (2)

  • 7/30/2019 coursAlgo_V4

    31/53

    Algorithmique 4 : Listes chanes 30

    Exemple dalgorithme (2)Algorithme ManipListes2{Exemple dalgorithme manipulant les listes.}constante (VALSTOP : entier) 0variables listeA, listeB, listeC : Liste

    dbut listeA.saisir()afficher("listeA: ")listeA.afficher()

    si non listeA.vide()alors listeB inverse(listeA)afficher("listeB contient les lments de la listeA en ordre

    inverse : ")

    listeB.afficher()supprimerGlobal(0, listeA)afficher("ListeA sans zros: ")listeA.afficher()

    afficher("Plus petite valeur de listeA :" , valMin(listeA) )fsifin

    Files et Piles

  • 7/30/2019 coursAlgo_V4

    32/53

    Algorithmique 4 : Files et Piles 31

    Files et Piles

    Retour sur la motivation:pourquoi des listes chanes? Possibilit de crotre ou de diminuer selon les besoins Facilit de rordonnancement des lments

    Exemples :- placer le dernier lment en tte : changer trois rfrences

    (tableau : tout dcaler)- insertion d'un nouvel lment : changer deux rfrences,

    indpendamment de la longueur de la liste- effacement d'un lment

    Mais : mal adaptes d'autres oprations- trouver le k-ime lment : parcours squentiel de k rfrences

    (tableau : accs direct lindice k)

    - trouver l'lment qui prcde un lment donn

  • 7/30/2019 coursAlgo_V4

    33/53

    Algorithmique 4 : Files et Piles 32

    Files et PilesDans beaucoup d'applications, on peut se contenter demodes d'accs trs restreints la structure de donnes

    Avantages :

    le programme n'a pas se proccuper de dtails de gestion(des rfrences, par exemple)

    traitements plus simples et moins rigides(moins d'oprations)

    Reprsentation d'une file

  • 7/30/2019 coursAlgo_V4

    34/53

    Algorithmique 4 : Files et Piles 33

    Reprsentation d une file

    par une liste chaneAlice Julie Anna Pierre Daniel

    cible.ajouterEnFin ("Daniel")

    cible. supprimerEnTte()tte queue

    - les ajouts se font en fin de file, les suppressions en tte de file

    - seule linformation de la tte est accessible et traitable file dattente un guichet "premier rentr, premier sorti"

    (FIFO : first in first out, queue)

    Reprsentation d'une pile

  • 7/30/2019 coursAlgo_V4

    35/53

    Algorithmique 4 : Files et Piles 34

    Reprsentation d une pile

    par une liste chaneAlice Julie Anna Pierre Daniel

    cible.empiler("Alice")

    cible.dpiler( )tte

    - les ajouts comme les suppressions se font en tte de pile

    - seule linformation de la tte est accessible et traitable pile dassiettes "dernier rentr, premier sorti"

    (LIFO : last in first out, stack)

    l l Fil

  • 7/30/2019 coursAlgo_V4

    36/53

    Algorithmique 4 : Files et Piles 35

    la classe File :les besoins

    Attributs :- la tte et la queue, mais pas de curseur

    Mthodes :

    - infoTte() : retourne la valeur de linformation en tte de file

    - vide() : indique si la file est vide

    - ajouterEnFin(val) : ajoute une information en fin de file

    - supprimerEnTte() : supprime (et retourne) linformation en tte de file- saisirFile()- afficherFile()

    Dfinition de la classe File

  • 7/30/2019 coursAlgo_V4

    37/53

    36

    Attributs :

    tte : rfrence {rfrence la tte de file}queue : rfrence {rfrence la queue de file}Mthodes

    MFonction infoTte() retourne Info{retourne la valeur enregistre dans la cellule de tte. Erreur si la file est vide}paramtre (D) cible : File

    Mfonction vide() retourne boolen{retourne vrai si la file est vide, faux sinon}paramtre (D) cible : File

    Mprocdure ajouterEnFin(val){Cre une nouvelle cellule, y affecte la valeur val, et l'insre aprs la dernire cellule .

    Si file tait vide, elle contient maintenant lunique cellule qui vient d'tre cre.}paramtre (D/R) cible : File ; (D) val : Info

    Mfonction supprimerEnTte() retourne Info{Supprime la premire cellule de la file et retourne la valeur quelle contient. Si la

    file ne contenant qu'une seule cellule, la file devient vide. Erreur si la file est vide.}paramtre (D/R) cible : File

  • 7/30/2019 coursAlgo_V4

    38/53

    Algorithmique 4 : Files et Piles 37

    Mthodes (suite)MProcdure saisirFile (){Saisit des valeurs (de type Info), jusqu' une valeur d'arrt (constante dfinie dans l'algorithme appelant), et cre au fur et mesure autant de cellules que

    ncessaire, en y affectant les valeurs saisies . }paramtre (R) cible : Filevariables uneVal : Info, cpt : entierdbut

    saisir (uneVal) ; cpt 0tant que uneVal VALSTOP fairecpt cpt + 1cible.ajouterEnFin(uneVal)

    saisir(uneVal)ftqafficher(La nouvelle file contient , cpt, cellules.)

    fin

  • 7/30/2019 coursAlgo_V4

    39/53

    Algorithmique 4 : Files et Piles 38

    Mthodes (suite)

    MProcdure afficherFile(){Affiche toutes les valeurs contenues dans la file cible.}

    paramtre (D) cible : Filevariables uneVal : InfocopieCible : File

    dbutcopieCible cibletant que non copieCible.vide() faire

    uneVal copieCible. supprimerEnTte()afficher(uneVal)

    ftqfin

    la classe Pile :

  • 7/30/2019 coursAlgo_V4

    40/53

    Algorithmique 4 : Files et Piles 39

    la classe Pile :les besoinsAttributs :

    - la tte mais pas de curseur

    Mthodes :

    - infoTte() : retourne la valeur de linformation en tte de pile

    - vide() : indique si la pile est vide

    - empiler(val) : ajoute une information en tte de pile

    - dpiler() : supprime (et retourne) linformation en tte de pile- saisirPile()

    - afficherPile()

    Dfinition de la classe Pile

  • 7/30/2019 coursAlgo_V4

    41/53

    40

    t o de a c asse eAttributs :

    tte : rfrence {rfrence la tte de pile}Mthodes

    MFonction infoTte() retourne Info{retourne la valeur enregistre dans la cellule de tte. Erreur si la pile est vide}paramtre (D) cible : Pile

    Mfonction vide() retourne boolen

    {retourne vrai si la pile est vide, faux sinon}paramtre (D) cible : Pile

    Mprocdure empiler(val){Cre une nouvelle cellule, y affecte la valeur val, et l'insre en tte de pile. Si pile tait vide,

    elle contient maintenant l'unique cellule qui vient d'tre cre.}paramtre (D/R) cible : Pile ; (D) val : Info

    Mfonction dpiler() retourne Info{Supprime la premire cellule de la pile et retourne la valeur quelle contient. Si la pile ne contenant qu'une seule cellule, la pile devient vide. Erreur si la pile est vide.}paramtre (D/R) cible : Pile

    Mthodes (suite)

  • 7/30/2019 coursAlgo_V4

    42/53

    Algorithmique 4 : Files et Piles 41

    Mthodes (suite)MProcdure saisirPile(){Saisit des valeurs (de type Info), jusqu' une valeur d'arrt (constante dfinie dans l'algorithme appelant), et cre au fur et mesure autant de cellules que ncessaire,en y affectant les valeurs saisies}paramtre (R) cible : Pilevariables uneVal : Info

    cpt : entierdbut

    saisir (uneVal) ; cpt 0tant que uneVal VALSTOP faire

    cpt cpt + 1cible.empiler(uneVal)saisir(uneVal)

    ftqafficher("La nouvelle pile contient", cpt, "cellules.")

    fin

    Mthodes (suite)

  • 7/30/2019 coursAlgo_V4

    43/53

    Algorithmique 4 : Files et Piles 42

    Mthodes (suite)

    MProcdure afficherPile(){Affiche toutes les valeurs contenues dans la pile cible.}

    paramtre (D) cible : Pilevariables uneVal : InfocopieCible : Pile

    dbutcopieCible cibletant que non copieCible.vide() faire

    uneVal copieCible. dpiler()afficher(uneVal)

    ftqfin

    Exemple 1 : Parenthsage

  • 7/30/2019 coursAlgo_V4

    44/53

    Algorithmique 4 : Files et Piles 43

    p gFonction bienForm(tab, nbr) retourne boolen{tab est un tableau de nbr parenthses. Retourne vrai si le parenthsage est cohrent}paramtres (D) tab: tableau [1, MAX] de caractres ; nbr : entiervariables cpt, marque, val : entier ; bienform : boolen

    unePile : Pile {unePile est vide au dpart}dbut

    cpt 1; marque 0 {jeton} ; bienform vraitant que bienform et cpt nbr faire

    si tab[cpt] = '('alors unePile.empiler(marque)sinon si unePile.vide() alors bienform faux

    sinon val unePile.dpiler() {on a alors ') }fsi

    fsicpt cpt +1

    ftqretourne (bienform et unePile.vide() )

    fin

    Parenthsage : simulation

  • 7/30/2019 coursAlgo_V4

    45/53

    Algorithmique 4 : Files et Piles 44

    Parenthsage : simulation

    Exemple 2: valuation d'une

  • 7/30/2019 coursAlgo_V4

    46/53

    Algorithmique 4 : Files et Piles 45

    pexpression arithmtique

    5 * (((9 + 8) * (4 * 6)) + 7)OBJECTIF:1. empiler (5)2. empiler (9)3. empiler (8)4. empiler( dpiler () + dpiler())

    5. empiler (4)6. empiler (6)7. empiler (dpiler () * dpiler())8. empiler (dpiler () * dpiler())

    9. empiler (7)10. empiler (dpiler () + dpiler())11. empiler (dpiler () * dpiler())12. afficher( dpiler())

    valuation : simulation

  • 7/30/2019 coursAlgo_V4

    47/53

    Algorithmique 4 : Listes chanes 46

    valuation : simulation

    Dabord : conversion infix postfix

  • 7/30/2019 coursAlgo_V4

    48/53

    Algorithmique 4 : Files et Piles 47

    Procdure infixVersPostfix(tab, nbr, tab_res, nbr_res)paramtres (D) tab : tableau [1, MAX] de caractres

    (D) nbr : entier(R) tabRes: tableau [1, MAX] de caractres(R) nbrRes : entier

    variables i, j : entier ; unePile : Piledbuti 0 ; j 0tant que ( i < nbr)

    i

    i + 1si oprateur(tab[i])alors unePile.empiler (tab[i])sinon si tab[i] = ')

    alors j j + 1; tabRes[j] unePile .dpiler() ;sinon si nombre(tab[i]) alors j j+1 ; tabRes[j] tab[i]

    fsifsi

    ftqnbrRes jfin

    Conversion : simulation

  • 7/30/2019 coursAlgo_V4

    49/53

    Algorithmique 4 : Files et Piles 48

    Conversion : simulation

    Ensuite : calculer postfix

  • 7/30/2019 coursAlgo_V4

    50/53

    Algorithmique 4 : Files et Piles 49

    pFonction calculerPostfix (tab, nbr) retourne (entier)paramtres (D) tab: tableau [1, MAX] de caractres

    (D) nbr : entiervariables i, res : entiers

    unePile : Piledbuti 1; res 0tant que ( i nbr) faire

    si tab[i] = '+' alors res unePile.dpiler() + unePile.dpiler()sinon si tab[i] = -' alors res unePile.dpiler() - unePile.dpiler()sinon si tab[i] = '*' alors res unePile.dpiler() * unePile.dpiler()sinon si nombre(tab[i]) alors res tab[i]

    fsiunePile.empiler (res)i i+1

    ftqretourne(unePile .dpiler())

    fin

    Calculer postfix : simulation

  • 7/30/2019 coursAlgo_V4

    51/53

    Algorithmique 4 : Files et Piles 50

    Calculer postfix : simulation

    Retour lvaluation d'une

  • 7/30/2019 coursAlgo_V4

    52/53

    Algorithmique 4 : Listes chanes 51

    expression arithmtiqueAlgorithme valuation{affiche l'valuation dune expression arithmtique}

    variables expInfix : tableau [1, MAX] de caractres {expression en criture infixe}expPostfix : tableau [1, MAX] de caractres {expression en criture postfixe}

    nbrEltsInfix : entier {nombre dlments de lexpression infixe}nbrEltsPostfix : entier {nombre dlments de lexpression postfixe}

    valeur : entier {rsultat de lvaluation}dbutsaisirExpInfix(expInfix, nbrEltsInfix )infixVersPostfix(expInfix, nbrEltsInfix , expPostfix , nbrEltsPostfix )valeur calculerPostfix(expPostfix , nbrEltsPostfix )afficher( Lvaluation de votre expression est , valeur)

    fin

  • 7/30/2019 coursAlgo_V4

    53/53

    Algorithmique 4 : Files et Piles 52

    Fin Volume 4