Piles Files 1

9
Cours Algorithmique et Analyse : Structures linéaires (suite) Mathieu Roche Jérôme Azé Fondé sur le polycopié de J.P Chevillard 2003 - 2004 Université Paris-Sud Filière : C4 - DU

description

concepts et exemlpes

Transcript of Piles Files 1

  • Cours Algorithmique et Analyse :Structures linaires (suite)

    Mathieu RocheJrme Az

    Fond sur le polycopi de J.P Chevillard

    2003 - 2004 Universit Paris-Sud

    Filire : C4 - DU

  • Cours Algo - C4-DU 2

    2. Les pilesUne PILE est un cas particulier de liste pour laquelle on naccde qu un seul lment : le dernier, do lappellation LIFO (Last In, First Out).

    1

    p_top

    TailleMax

    TYPE

    ty_structure_de_pile = agrgat_de

    t_pile : tableau de ty_lment_de_pile

    indic [1..TailleMax];

    p_top : indice de t_pile

    /* indice du premier lment vide de la pile */

    Fin_agrgat ty_structure_de_pile;

    VARIABLEpile : ty_structure_de_pile

    Remarque : p_top 1

    Accder au premier lment vide de la pile :t_pile[p_top](pile) (attention !! notation diffrente du poly)

  • Cours Algo - C4-DU 3

    2. Les pilesDeux procdures importantes relatives aux piles :

    - empiler (PUSH) : stocker une valeur au sommet de la pile

    - dpiler (POP) : rcuprer la valeur de lobjet qui est au sommet de la pile et libre sa place

    Empiler (PUSH)Procdure Empiler (

    pile :ty_structure_de_pile, Entre/Sortie;

    x : ty_lment_de_pile, Entre; /* valeur empiler */

    OK : indicateur boolen, Sortie )

    /* si OK = vrai, lopration sest bien droule */

  • Cours Algo - C4-DU 4

    2. Les pilesDpiler (POP)

    Initialiser Pile

    Procdure Dpiler (

    pile :ty_structure_de_pile, Entre/Sortie;

    y : ty_lment_de_pile, Sortie; /* valeur dpile */

    OK : indicateur boolen, Sortie )

    /* range dans y la valeur du sommet de la pile, libre le sommet, si OK = vrai, lopration sest bien droule */

    Procdure Init_Pile ( pile :ty_structure_de_pile, Entre/Sortie )

  • Cours Algo - C4-DU 5

    3. Les filesUne FILE est un autre cas particulier de liste pour laquelle on ne peut ajouter de nouvel lment qu la fin de la file et on ne peut extraire un lment quen tte. Do lappellation FIFO (First In, First Out)

    p_queuep_tte

    TailleMax1

    TYPE

    ty_structure_de_file = agrgat_de

    t_file : tableau de ty_lment_de_file indic [1..TailleMax];

    p_tte : indice de t_file /* indice du premier lment sortir */

    p_queue : indice de t_file /* indice de la premire place libre */

    Fin_agrgat ty_structure_de_file;VARIABLEfile : ty_structure_de_file

    Accder la tte de la file : t_file[p_tte](file)

    (attention !! notation diffrente du poly)

  • Cours Algo - C4-DU 6

    3. Les filesLorsque aprs une incrmentation de lindice du tableau celui-ci dsigne un indice au-del de la fin du tableau, on donne lindice du dbut du tableau. La fonction suivant effectue une telle tche :

    p_ttep_queue

    Fonction Suivant ( p : indice de t_file, Entre ) : indice de llment suivant de t_file

    si p < TailleMax alors

    retourner(p+1);

    sinon

    retourner(1);

    fin_si

    Fin_fonction

  • Cours Algo - C4-DU 7

    3. Les filesRemarque : si nous ajoutons un lment de la file presque pleine, elle

    devient pleine et on a : p_queue = p_tte

    si nous retirons un lment de la file presque vide, elle devient vide et on a aussi : p_tte = p_queue

    p_ttep_queue

    p_queuep_tte

    Conclusion : il nest pas possible de dtecter ltat vide et ltat plein avec le mme test : si (p_queue = p_tte) alors

  • Cours Algo - C4-DU 8

    3. Les filesSolution propose : Chaque procdure qui modifie la file tient jour une variable

    indiquant ltat_de_la_file : vide, pleine ou normale (c.-d. ni vide ni pleine).

    Ajouter cette variable lagrgat :

    TYPE

    ty_structure_de_file = agrgat_de

    t_file : tableau de ty_lment_de_file indic [1..TailleMax];

    p_tte : indice de t_file /* indice du premier lment sortir */

    p_queue : indice de t_file /* indice de la premire place libre */

    tat_de_la_file : indicateur 3 tats (vide, pleine, normale)

    Fin_agrgat ty_structure_de_file;

  • Cours Algo - C4-DU 9

    3. Les filesAjouter

    Retirer

    Initialiser File

    Procdure Retirer (file: ty_structure_de_file, Entre/Sortie;

    y : ty_lment_de_file, Sortie;

    OK : indicateur boolen, Sortie )

    /* si OK = vrai, lopration sest bien droule */

    Procdure Init_File (file:ty_structure_de_file, Entre/Sortie)

    Procdure Ajouter (file: ty_structure_de_file, Entre/Sortie;

    x : ty_lment_de_file, Entre;

    OK : indicateur boolen, Sortie )

    /* si OK = vrai, lopration sest bien droule */

    Cours Algorithmique et Analyse :Structures linaires (suite)2. Les piles2. Les piles2. Les piles3. Les files3. Les files3. Les files3. Les files3. Les files