Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Dernière révision Les deux révisions suivantes | ||
gestion_piles [2008/05/02 07:32] tyrtamos |
gestion_piles [2008/05/02 08:18] tyrtamos |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Gestion de piles lifo et fifo ====== | + | ====== Gestion de piles LIFO et FIFO ====== |
(modification le 2/5/2008: ajout taille maxi et améliorations diverses) | (modification le 2/5/2008: ajout taille maxi et améliorations diverses) | ||
- | On rencontre souvent ces problèmes de gestion de piles: pile LIFO (last in first out) et pile FIFO (first in first out). | + | On rencontre souvent ces problèmes de gestion de piles: pile LIFO (Last In First Out) et pile FIFO (First In First Out). |
Le code proposé ici permet non seulement la gestion élémentaire (empile et depile), mais aussi de nombreuses possibilités supplémentaires: | Le code proposé ici permet non seulement la gestion élémentaire (empile et depile), mais aussi de nombreuses possibilités supplémentaires: | ||
- | * on peut empiler n' | + | * on peut empiler n' |
* on peut fixer une taille maxi, | * on peut fixer une taille maxi, | ||
Ligne 17: | Ligne 17: | ||
* on peut obtenir une copie de tout ou partie de la pile, | * on peut obtenir une copie de tout ou partie de la pile, | ||
- | * on peut avoir un accès direct à la pile si les méthodes proposées ne suffisent pas. Par exemple pour lire ou modifier un attribut de l' | + | * on peut avoir un accès direct à la pile si les méthodes proposées ne suffisent pas. Par exemple pour chercher, |
Les données et opérations anormales (exemple: tenter de dépiler une pile vide) génèrent des exceptions afin que des réponses erronées ne soient jamais renvoyées silencieusement. Il appartient au code utilisateur de gérer ces exceptions. | Les données et opérations anormales (exemple: tenter de dépiler une pile vide) génèrent des exceptions afin que des réponses erronées ne soient jamais renvoyées silencieusement. Il appartient au code utilisateur de gérer ces exceptions. | ||
- | ===== Gestion de piles lifo (dernier entré, premier sorti) ===== | + | ===== Gestion de piles LIFO (dernier entré, premier sorti) ===== |
- | Une pile lifo est assimilable à un tas: | + | Une pile LIFO est assimilable à un tas: |
* quand on ajoute un élément (=empile), on le met au dessus de la pile. | * quand on ajoute un élément (=empile), on le met au dessus de la pile. | ||
Ligne 95: | Ligne 95: | ||
__**Commentaires sur ce code:**__ | __**Commentaires sur ce code:**__ | ||
- | **A l' | + | **x=PileLifo(maxpile=None):** |
* créé une instance de la classe PileLifo() et l' | * créé une instance de la classe PileLifo() et l' | ||
- | * la pile créée appartient à l' | + | * la pile créée appartient à l' |
+ | * en mentionnant un paramètre, on peut fixer une taille maxi de la pile. Sans ce maxi, il n'y a pas de limite supérieure, | ||
- | **x.empile(element): | + | **x.empile(element,idx=None):** |
- | * insère | + | * ajoute |
- | * on peut empiler | + | * en ajoutant un index comme paramètre supplémentaire, |
- | * il n' | + | * génère une exception si on a précisé une taille maxi de la pile et si elle est déjà pleine |
- | **x.depile() ou z=x.depile() :** | + | **x.depile(idx=-1):** |
- | * retire de la pile l' | + | * sans paramètre, |
* on peut dépiler sans récupérer l' | * on peut dépiler sans récupérer l' | ||
- | * une tentative | + | * avec un index comme paramètre, on peut retirer un élément |
+ | * génère | ||
- | **x.element() ou x.element(i):** | + | **x.element(idx=-1):** |
- | * sans argument, renvoie l' | + | * sans paramètre, renvoie l' |
- | * avec un argument, renvoie l' | + | * avec un index comme paramètre, renvoie l' |
- | * si l' | + | * si l' |
- | **x.pile() ou x.pile(imin, | + | **x.copiepile() ou x.copiepile(imin, |
- | * sans argument, renvoie la pile complète sous forme d'une liste. Vous noterez la présente de list() dans le code: sans cela, une modification de la liste renvoyée modifierait la pile. | + | * sans paramètre, renvoie |
- | * avec argument(s), vous pouvez préciser l' | + | * avec un ou deux paramètres, vous pouvez préciser l' |
- | * attention: les index d'une liste de longueur lg vont de 0 à lg-1 | + | * rappel: les index d'une liste de longueur lg vont de 0 à lg-1 |
* x.pile(2) ou x.pile(imin=2) renvoie comme liste la pile à partir de l' | * x.pile(2) ou x.pile(imin=2) renvoie comme liste la pile à partir de l' | ||
* x.pile(2,5) ou x.pile(2, | * x.pile(2,5) ou x.pile(2, | ||
* x.pile(imax=5): | * x.pile(imax=5): | ||
- | * NB: le syntaxe x.pile(imin=2, | + | * NB: le syntaxe x.pile(imin=2, |
- | * si l'un des index fournis n'est pas valide | + | * si l'un des index fournis n'est pas valide, génère une exception |
- | **x.estvide():** | + | **x.pilevide():** |
* renvoie True si la pile est vide, et False si elle ne l'est pas. | * renvoie True si la pile est vide, et False si elle ne l'est pas. | ||
+ | |||
+ | **x.pilepleine(): | ||
+ | * renvoie True si la pile est limitée en taille et si elle est pleine, et False si elle ne l'est pas. | ||
**x.taille(): | **x.taille(): | ||
* renvoie le nombre d' | * renvoie le nombre d' | ||
- | ===== Gestion de piles fifo (premier entré, premier sorti) ===== | + | ===== Gestion de piles FIFO (premier entré, premier sorti) ===== |
- | Une pile fifo est assimilable à une file d' | + | Une pile FIFO est assimilable à une file d' |
* quand on ajoute un élément (=empile), on l' | * quand on ajoute un élément (=empile), on l' | ||
Ligne 202: | Ligne 207: | ||
__**Commentaires sur ce code:**__ | __**Commentaires sur ce code:**__ | ||
- | **A l' | + | **x=PileFifo(maxpile=None):** |
* créé une instance de la classe PileFifo() et l' | * créé une instance de la classe PileFifo() et l' | ||
- | * la pile créée appartient à l' | + | * la pile créée appartient à l' |
+ | * en mentionnant un paramètre, on peut fixer une taille maxi de la pile. Sans ce maxi, il n'y a pas de limite supérieure, | ||
- | **x.empile(element): | + | **x.empile(element,idx=None):** |
- | * insère | + | * ajoute |
- | * on peut empiler | + | * en ajoutant un index comme paramètre supplémentaire, |
- | * il n' | + | * génère une exception si on a précisé une taille maxi de la pile et si elle est déjà pleine |
- | **x.depile() ou z=x.depile() :** | + | **x.depile(idx=-1):** |
- | * retire de la pile l' | + | * sans paramètre, |
* on peut dépiler sans récupérer l' | * on peut dépiler sans récupérer l' | ||
- | * une tentative | + | * avec un index comme paramètre, on peut retirer un élément |
+ | * génère | ||
- | **x.element() ou x.element(i):** | + | **x.element(idx=-1):** |
- | * sans argument, renvoie | + | * sans paramètre, renvoie |
- | * avec un argument, renvoie l' | + | * avec un index comme paramètre, renvoie l' |
- | * si l' | + | * si l' |
- | **x.pile() ou x.pile(imin, | + | **x.copiepile() ou x.copiepile(imin, |
- | * sans argument, renvoie la pile complète sous forme d'une liste. Vous noterez la présente de list() dans le code: sans cela, une modification de la liste renvoyée modifierait la pile. | + | * sans paramètre, renvoie |
- | * avec argument(s), vous pouvez préciser l' | + | * avec un ou deux paramètres, vous pouvez préciser l' |
- | * attention: les index d'une liste de longueur lg vont de 0 à lg-1 | + | * rappel: les index d'une liste de longueur lg vont de 0 à lg-1 |
* x.pile(2) ou x.pile(imin=2) renvoie comme liste la pile à partir de l' | * x.pile(2) ou x.pile(imin=2) renvoie comme liste la pile à partir de l' | ||
* x.pile(2,5) ou x.pile(2, | * x.pile(2,5) ou x.pile(2, | ||
* x.pile(imax=5): | * x.pile(imax=5): | ||
- | * NB: le syntaxe x.pile(imin=2, | + | * NB: le syntaxe x.pile(imin=2, |
- | * si l'un des index fournis n'est pas valide | + | * si l'un des index fournis n'est pas valide, génère une exception |
- | **x.estvide():** | + | **x.pilevide():** |
* renvoie True si la pile est vide, et False si elle ne l'est pas. | * renvoie True si la pile est vide, et False si elle ne l'est pas. | ||
+ | |||
+ | **x.pilepleine(): | ||
+ | * renvoie True si la pile est limitée en taille et si elle est pleine, et False si elle ne l'est pas. | ||
**x.taille(): | **x.taille(): | ||
* renvoie le nombre d' | * renvoie le nombre d' | ||
+ | \\ | ||
+ | Amusez-vous bien! | ||
< | < |