Introduction Utilisation Implémentation Piles Informatique pour tous MP 2016-2017 Une structure voisine : les files Introduction Utilisation Implémentation Une structure voisine : les files Présentation des piles • Pile = structure de données (cf. listes, tableaux, dictionnaires) Introduction Utilisation Implémentation Une structure voisine : les files Présentation des piles • Pile = structure de données (cf. listes, tableaux, dictionnaires) • Image de la pile d’assiettes Introduction Utilisation Implémentation Une structure voisine : les files Présentation des piles • Pile = structure de données (cf. listes, tableaux, dictionnaires) • Image de la pile d’assiettes • Fonctionnalités minimales Introduction Utilisation Implémentation Une structure voisine : les files Présentation des piles • Pile = structure de données (cf. listes, tableaux, dictionnaires) • Image de la pile d’assiettes • Fonctionnalités minimales 1. Test de vacuité : . isEmpty(pile) Introduction Utilisation Implémentation Une structure voisine : les files Présentation des piles • Pile = structure de données (cf. listes, tableaux, dictionnaires) • Image de la pile d’assiettes • Fonctionnalités minimales 1. Test de vacuité : . isEmpty(pile) 2. Empilage d’une donnée : . push(pile,donnée) Introduction Utilisation Implémentation Une structure voisine : les files Présentation des piles • Pile = structure de données (cf. listes, tableaux, dictionnaires) • Image de la pile d’assiettes • Fonctionnalités minimales 1. Test de vacuité : . isEmpty(pile) 2. Empilage d’une donnée : . push(pile,donnée) 3. Désempilage d’une donnée : . pop(pile) Introduction Utilisation Implémentation Une structure voisine : les files Présentation des piles • Pile = structure de données (cf. listes, tableaux, dictionnaires) • Image de la pile d’assiettes • Fonctionnalités minimales 1. Test de vacuité : . isEmpty(pile) 2. Empilage d’une donnée : . push(pile,donnée) 3. Désempilage d’une donnée : . pop(pile) 4. Lecture de l’élément en haut de pile . top(pile) Introduction Utilisation Implémentation Une structure voisine : les files Présentation des piles • Pile = structure de données (cf. listes, tableaux, dictionnaires) • Image de la pile d’assiettes • Fonctionnalités minimales 1. Test de vacuité : . isEmpty(pile) 2. Empilage d’une donnée : . push(pile,donnée) 3. Désempilage d’une donnée : . pop(pile) 4. Lecture de l’élément en haut de pile . top(pile) • Structure L.I.F.O pour Last In First Out : on ne peut récupérer que la dernière donnée déposée sur la pile. Introduction Utilisation Implémentation Une structure voisine : les files Exemples • Gestion des appels des fonctions les unes par les autres fun_1 appelle fun_2 appelle fun_3 . états successifs de la pile au tableau Introduction Utilisation Implémentation Une structure voisine : les files Exemples • Gestion des appels des fonctions les unes par les autres fun_1 appelle fun_2 appelle fun_3 . états successifs de la pile au tableau • Gestion d’une fonction récursive. . états successifs de la pile au tableau Introduction Utilisation Implémentation Une structure voisine : les files Exemples • Gestion des appels des fonctions les unes par les autres fun_1 appelle fun_2 appelle fun_3 . états successifs de la pile au tableau • Gestion d’une fonction récursive. . états successifs de la pile au tableau • Gestionnaire d’historiques : pages web visitées. Introduction Utilisation Implémentation Une structure voisine : les files Exemples • Gestion des appels des fonctions les unes par les autres fun_1 appelle fun_2 appelle fun_3 . états successifs de la pile au tableau • Gestion d’une fonction récursive. . états successifs de la pile au tableau • Gestionnaire d’historiques : pages web visitées. • Commandes dans Pyzo. Introduction Utilisation Implémentation Une structure voisine : les files Exemples • Gestion des appels des fonctions les unes par les autres fun_1 appelle fun_2 appelle fun_3 . états successifs de la pile au tableau • Gestion d’une fonction récursive. . états successifs de la pile au tableau • Gestionnaire d’historiques : pages web visitées. • Commandes dans Pyzo. • Commande undo des traitements de textes. Introduction Utilisation Implémentation Exemples • Notation Polonaise Inversée (N.P.I). Une structure voisine : les files Introduction Utilisation Implémentation Une structure voisine : les files Exemples • Notation Polonaise Inversée (N.P.I). • Notation postfixée : (10 * 5) + (4 * 2) = > 10 5 * 4 2 * + Introduction Utilisation Implémentation Une structure voisine : les files Exemples • Notation Polonaise Inversée (N.P.I). • Notation postfixée : (10 * 5) + (4 * 2) = > 10 5 * 4 2 * + • Avantages : pas de parenthèses Introduction Utilisation Implémentation Une structure voisine : les files Exemples • Notation Polonaise Inversée (N.P.I). • Notation postfixée : (10 * 5) + (4 * 2) = > 10 5 * 4 2 * + • Avantages : pas de parenthèses • Utilisation dans certaines calculatrices, dans les calculs des fichiers postscript. Introduction Utilisation Implémentation Une structure voisine : les files Exemples • Notation Polonaise Inversée (N.P.I). • Notation postfixée : (10 * 5) + (4 * 2) = > 10 5 * 4 2 * + • Avantages : pas de parenthèses • Utilisation dans certaines calculatrices, dans les calculs des fichiers postscript. • Comment ça marche ? Introduction Utilisation Implémentation Une structure voisine : les files Exemples • Notation Polonaise Inversée (N.P.I). • Notation postfixée : (10 * 5) + (4 * 2) = > 10 5 * 4 2 * + • Avantages : pas de parenthèses • Utilisation dans certaines calculatrices, dans les calculs des fichiers postscript. • Comment ça marche ? 1. On empile les valeurs numériques ; Introduction Utilisation Implémentation Une structure voisine : les files Exemples • Notation Polonaise Inversée (N.P.I). • Notation postfixée : (10 * 5) + (4 * 2) = > 10 5 * 4 2 * + • Avantages : pas de parenthèses • Utilisation dans certaines calculatrices, dans les calculs des fichiers postscript. • Comment ça marche ? 1. On empile les valeurs numériques ; 2. Quand arrive un opérateur, on désempile le nombre d’opérandes nécessaires, et on empile le résultat de l’opération Introduction Utilisation Implémentation Une structure voisine : les files Exemples • Notation Polonaise Inversée (N.P.I). • Notation postfixée : (10 * 5) + (4 * 2) = > 10 5 * 4 2 * + • Avantages : pas de parenthèses • Utilisation dans certaines calculatrices, dans les calculs des fichiers postscript. • Comment ça marche ? 1. On empile les valeurs numériques ; 2. Quand arrive un opérateur, on désempile le nombre d’opérandes nécessaires, et on empile le résultat de l’opération 3. À la fin du calcul il ne reste normalement qu’une valeur dans la pile, qui est le résultat de l’opération Introduction Utilisation Implémentation Une structure voisine : les files Exemples • Notation Polonaise Inversée (N.P.I). • Notation postfixée : (10 * 5) + (4 * 2) = > 10 5 * 4 2 * + • Avantages : pas de parenthèses • Utilisation dans certaines calculatrices, dans les calculs des fichiers postscript. • Comment ça marche ? 1. On empile les valeurs numériques ; 2. Quand arrive un opérateur, on désempile le nombre d’opérandes nécessaires, et on empile le résultat de l’opération 3. À la fin du calcul il ne reste normalement qu’une valeur dans la pile, qui est le résultat de l’opération 4. . Illustration au tableau sur l’exemple donné plus haut. Introduction Utilisation Implémentation Une structure voisine : les files Implémentation des piles • Programme officiel : implémentation des piles avec des listes ; le sommet de la pile sera le dernier élément de la liste. Introduction Utilisation Implémentation Une structure voisine : les files • Créer une pile . MaPile =[] # Cr é ation d ’ une pile vide . MaPile =[ a ,b ,c ,... s ] # Cr é ation d ’ une pile de sommet s . Introduction Utilisation Implémentation Une structure voisine : les files • Créer une pile . MaPile =[] # Cr é ation d ’ une pile vide . MaPile =[ a ,b ,c ,... s ] # Cr é ation d ’ une pile de sommet s . • Test de vacuité (la pile est-elle vide ?) . MaPile ==[] Introduction Utilisation Implémentation Une structure voisine : les files • Créer une pile . MaPile =[] # Cr é ation d ’ une pile vide . MaPile =[ a ,b ,c ,... s ] # Cr é ation d ’ une pile de sommet s . • Test de vacuité (la pile est-elle vide ?) . MaPile ==[] • Empiler une donnée . MaPile . append ( donn é e ) Introduction Utilisation Implémentation Une structure voisine : les files • Créer une pile . MaPile =[] # Cr é ation d ’ une pile vide . MaPile =[ a ,b ,c ,... s ] # Cr é ation d ’ une pile de sommet s . • Test de vacuité (la pile est-elle vide ?) . MaPile ==[] • Empiler une donnée . MaPile . append ( donn é e ) • Désempiler la donnée au sommet . MaPile . pop () Introduction Utilisation Implémentation Une structure voisine : les files Fonctionnalités supplémentaires • Consultation sans désempilement : top. . MaPile [ len ( MaPile ) -1] ou MaPile [ -1] Introduction Utilisation Implémentation Une structure voisine : les files Fonctionnalités supplémentaires • Consultation sans désempilement : top. . MaPile [ len ( MaPile ) -1] ou MaPile [ -1] • Affichage de la pile : un élément par ligne, avec le dernier élément inséré tout en haut. . for i in range ( len ( MaPile ) -1 , -1 , -1) : print ( MaPile [ i ]) Introduction Utilisation Implémentation Une structure voisine : les files Limites de l’implémentation avec des listes • Des problèmes dans une telle implémentation ? Introduction Utilisation Implémentation Une structure voisine : les files Limites de l’implémentation avec des listes • Des problèmes dans une telle implémentation ? • Possibilité d’utiliser d’autres méthodes que celles autorisées sur les piles ! Introduction Utilisation Implémentation Une structure voisine : les files Limites de l’implémentation avec des listes • Des problèmes dans une telle implémentation ? • Possibilité d’utiliser d’autres méthodes que celles autorisées sur les piles ! • Très dangereux si on repose fortement sur la structure apportée par une pile. Introduction Utilisation Implémentation Une structure voisine : les files Une solution qui a de la classe... • Utilisation d’une classe dédiée. Introduction Utilisation Implémentation Une structure voisine : les files Une solution qui a de la classe... • Utilisation d’une classe dédiée. • La programmation objet n’est pas au programme... Introduction Utilisation Implémentation Une structure voisine : les files Une solution qui a de la classe... • Utilisation d’une classe dédiée. • La programmation objet n’est pas au programme... • mais présentation possible ! Introduction Utilisation Implémentation Une structure voisine : les files Une solution qui a de la classe... • Utilisation d’une classe dédiée. • La programmation objet n’est pas au programme... • mais présentation possible ! • On a ainsi une meilleure protection : on parle d’encapsulation des données. Introduction Utilisation Implémentation Une structure voisine : les files Une solution qui a de la classe... • Utilisation d’une classe dédiée. • La programmation objet n’est pas au programme... • mais présentation possible ! • On a ainsi une meilleure protection : on parle d’encapsulation des données. • Code (on a francisé les noms des méthodes) : page suivante Introduction Utilisation Implémentation Une structure voisine : les files Une solution qui a de la classe class Pile : def __init__ ( self ) : self . ListeInterne =[] def estVide ( self ) : return len ( self . ListeInterne ) ==0 def empiler ( self , donn é e ) : self . ListeInterne . append ( donn é e ) def desempiler ( self ) : return self . ListeInterne . pop () def sommet ( self ) : return self . ListeInterne [ -1] def affiche ( self ) : l = self . ListeInterne [:] l . reverse () for e in l : print ( e ) Introduction Utilisation Implémentation Une structure voisine : les files Une solution qui a de la classe • Variantes class Pile : def __init__ ( self , listeArgument ) : self . Liste = listeArgument def desempiler ( self ) : if estVide ( self ) : return " liste vide impossible de d é sempiler " else : return self . Liste . pop () def sommet ( self ) : if estVide ( self ) : return " liste vide pas de sommet " else : return self . Liste [ -1] Introduction Utilisation Implémentation Les files Structure similaire, mais hors-programme. • Image de la file d’attente à un guichet. Une structure voisine : les files Introduction Utilisation Implémentation Une structure voisine : les files Les files Structure similaire, mais hors-programme. • Image de la file d’attente à un guichet. • Structure F.I.F.O pour First In First Out : on ne peut récupérer que la première donnée mise dans la file. Introduction Utilisation Implémentation Une structure voisine : les files Les files Structure similaire, mais hors-programme. • Image de la file d’attente à un guichet. • Structure F.I.F.O pour First In First Out : on ne peut récupérer que la première donnée mise dans la file. • Exemple : gestion des « événements » d’une interface graphique. Introduction Utilisation Implémentation Une structure voisine : les files Les files Structure similaire, mais hors-programme. • Image de la file d’attente à un guichet. • Structure F.I.F.O pour First In First Out : on ne peut récupérer que la première donnée mise dans la file. • Exemple : gestion des « événements » d’une interface graphique. • Mémorisation clicks de souris pour exécution dans le bon ordre. Introduction Utilisation Implémentation Une structure voisine : les files Les files Structure similaire, mais hors-programme. • Image de la file d’attente à un guichet. • Structure F.I.F.O pour First In First Out : on ne peut récupérer que la première donnée mise dans la file. • Exemple : gestion des « événements » d’une interface graphique. • Mémorisation clicks de souris pour exécution dans le bon ordre. • Implémentation : quelques modifications à apporter par rapport aux piles.