100 likes | 233 Views
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. 2. Les piles.
E N D
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
2. Les piles • Une PILE est un cas particulier de liste pour laquelle on n’accède qu’à un seul élément : le dernier, d’où l’appellation LIFO (Last In, First Out). TYPE ty_structure_de_pile = agrégat_de t_pile : tableau de ty_élément_de_pile indicé [1..TailleMax]; p_top : indice de t_pile /* indice du premier élément vide de la pile */ Fin_agrégat ty_structure_de_pile; VARIABLE pile : ty_structure_de_pile Remarque : p_top ≥ 1 Accéder au premier élément vide de la pile :t_pile[p_top](pile)(attention !! notation différente du poly) Cours Algo - C4-DU
2. Les piles • Deux procédures importantes relatives aux piles : • empiler (PUSH) : stocker une valeur au sommet de la pile • dépiler (POP) : récupérer la valeur de l’objet qui est au sommet de la pile et libère sa place • Empiler (PUSH) Procédure Empiler ( pile :ty_structure_de_pile, Entrée/Sortie; x : ty_élément_de_pile, Entrée; /* valeur à empiler */ OK : indicateur booléen, Sortie ) /* si OK = vrai, l’opération s’est bien déroulée */ Cours Algo - C4-DU
2. Les piles • Dépiler (POP) • Initialiser Pile Procédure Dépiler ( pile :ty_structure_de_pile, Entrée/Sortie; y : ty_élément_de_pile, Sortie; /* valeur dépilée */ OK : indicateur booléen, Sortie ) /* range dans y la valeur du sommet de la pile, libère le sommet, si OK = vrai, l’opération s’est bien déroulée */ Procédure Init_Pile ( pile :ty_structure_de_pile, Entrée/Sortie ) Cours Algo - C4-DU
3. Les files • Une FILE est un autre cas particulier de liste pour laquelle on ne peut ajouter de nouvel élément qu’à la fin de la file et on ne peut extraire un élément qu’en tête. D’où l’appellation FIFO (First In, First Out) TYPE ty_structure_de_file = agrégat_de t_file : tableau de ty_élément_de_file indicé [1..TailleMax]; p_tête : indice de t_file /* indice du premier élément à sortir */ p_queue : indice de t_file/* indice de la première place libre */ Fin_agrégat ty_structure_de_file; VARIABLE file : ty_structure_de_file Accéder à la tête de la file : t_file[p_tête](file) (attention !! notation différente du poly) Cours Algo - C4-DU
3. Les files • Lorsque après une incrémentation de l’indice du tableau celui-ci désigne un indice au-delà de la fin du tableau, on donne l’indice du début du tableau. La fonction « suivant » effectue une telle tâche : Fonction Suivant ( p : indice de t_file, Entrée ) : indice de l’élément suivant de t_file si p < TailleMax alors retourner(p+1); sinon retourner(1); fin_si Fin_fonction Cours Algo - C4-DU
3. Les files • Remarque : • si nous ajoutons un élément de la file presque pleine, elle devient pleine et on a : p_queue = p_tête • si nous retirons un élément de la file presque vide, elle devient vide et on a aussi : p_tête = p_queue Conclusion : il n’est pas possible de détecter l’état vide et l’état plein avec le même test : « si (p_queue = p_tête) alors … » Cours Algo - C4-DU
3. Les files • Solution proposée : • Chaque procédure qui modifie la file tient à jour une variable indiquant l’état_de_la_file : vide, pleine ou normale (c.à-d. ni vide ni pleine). • Ajouter cette variable à l’agrégat : TYPE ty_structure_de_file = agrégat_de t_file : tableau de ty_élément_de_file indicé [1..TailleMax]; p_tête : indice de t_file /* indice du premier élément à sortir */ p_queue : indice de t_file/* indice de la première place libre */ état_de_la_file : indicateur à 3 états (vide, pleine, normale) Fin_agrégat ty_structure_de_file; Cours Algo - C4-DU
3. Les files Procédure Ajouter (file: ty_structure_de_file, Entrée/Sortie; x : ty_élément_de_file, Entrée; OK : indicateur booléen, Sortie ) /* si OK = vrai, l’opération s’est bien déroulée */ • Ajouter • Retirer • Initialiser File Procédure Retirer (file: ty_structure_de_file, Entrée/Sortie; y : ty_élément_de_file, Sortie; OK : indicateur booléen, Sortie ) /* si OK = vrai, l’opération s’est bien déroulée */ Procédure Init_File (file:ty_structure_de_file, Entrée/Sortie) Cours Algo - C4-DU