Les Piles - Créer son blog

publicité
Les Piles
Piles et files
Les piles apparaissent tôt dans le monde de l’informatique en
permettant une description théorique et une modélisation du
fonctionnement des ordinateurs.
Lycée Blaise Pascal
Septembre 2015
1 / 23
Les Piles
2 / 23
Les Piles
Définition
Une pile (en anglais a stack) est une structure de données reposant
sur le principe de "dernier arrivé, premier sorti".
"Stack overflow"
On parle également de mode LIFO : Last In, First Out.
3 / 23
4 / 23
Les Piles
Les fonctions de base
Pour utiliser une pile, il suffit de savoir :
I
Créer une pile (initialement vide)
I
Empiler un élément (en anglais push)
I
Dépiler un élément (en anglais pop)
5 / 23
Les fonctions presque de base
6 / 23
Et en Python ?
Nous créons sous Python une structure de pile à l’aide des listes.
Ici, le sommet de la pile est le dernier élément.
On peut compléter ces fonctions de base par d’autres :
I
Tester si la pile est vide
I
Demander le sommet de la pile, sans le retirer de celle-ci
I
Afficher la pile
def creer_pile () :
return []
def empile (a , p ) :
p . append ( a )
def depile ( p ) :
return p . pop ()
7 / 23
8 / 23
Et en Python ?
Capacité d’une pile
Le sommet de la pile est le dernier élément.
Dans l’implémentation d’une pile, on distinguera deux cas :
def est_vide ( p ) :
return ( p ==[])
def sommet ( p ) :
return p [ -1]
Remarque
I
Les piles à capacité non bornée :
Il n’y a pas de limite (autre que celle de l’ordinateur lui-même)
au nombre d’objets empilables.
I
Les piles à capacité bornée :
La taille de la pile est bornée à l’initialisation.
L’accès à un élément d’une liste Python étant en O(1), les
fonctions ci-dessus sont également en O(1).
10 / 23
9 / 23
Exemple d’utilisation
>>>
>>>
>>>
>>>
>>>
[3 ,
>>>
5
>>>
>>>
3
>>>
Un peu de POO
p = creer_pile
p = creer_pile ()
empile (3 , p )
empile (5 , p )
p
5]
depile ( p )
Telle que nous l’avons créée, une pile est une liste. . .
Et on pourrait alors tricher. . .
Nous allons construire un objet de type Pile :
a = depile ( p )
a
depile ( p )
IndexError : pop from empty list
11 / 23
12 / 23
Un peu de POO
Un peu de POO
class Pile :
def empile ( self , a ) :
self . liste . insert (0 , a )
def __init__ ( self ) :
# Initialisation d ’ une pile
self . liste = []
def estVide ( self ) :
return len ( self . liste ) == 0
def __repr__ ( self ) :
Aff = ’ Haut \ n ’
longueur = len ( self . liste )
i = 0
while i < longueur :
Aff = Aff + str ( self . liste [ i ]) + ’\ n
’
i += 1
Aff = Aff + ’ Bas \ n ----- ’
return Aff
def sommet ( self ) :
assert not ( self . estVide () ) , ’ La pile est
vide : pas de sommet ’
return self . liste [0]
def depile ( self ) :
assert not ( self . estVide () ) , ’ La pile est
vide : on ne peut pas la d é piler ’
return self . liste . pop (0)
13 / 23
Un peu de POO
14 / 23
Les Files
>>> p = Pile ()
>>> p . empile (3)
>>> p . empile (5)
>>> print ( p )
Haut
5
3
Bas
---->>> p . depile ()
5
>>> p . estVide ()
False
Définition
Une file (en anglais a queue) est une structure de données reposant
sur le principe de "premier arrivé, premier sorti".
On parle également de mode FIFO : First In, First Out.
15 / 23
16 / 23
Les Files
Les fonctions de base
C’est le principe d’une file d’attente. . .
Pour utiliser une file, il suffit de savoir :
I
Créer une file (initialement vide)
I
Emfiler un élément (en anglais enqueue)
I
Défiler un élément (en anglais dequeue)
I
...
17 / 23
En Python
18 / 23
double-ended queue
Dans le module collections, on trouve la classe deque
spécialement conçue pour ajouter et extraire des éléments à droite
et à gauche, de façon plus efficace qu’avec une liste.
On pourra consulter la documentation officielle :
Python » Documentation » The Python Standard Library
» 8.3 collections » 8.3.3 deque objects
https://docs.python.org/3/library/collections.html#
module-collections
def creer_file () :
return []
def enfile (a , f ) :
f . append ( a )
def defile ( f ) :
return f . pop (0)
19 / 23
20 / 23
deque
deque
>>> from collections import deque
>>> d = deque ( ’ ghi ’)
>>> for elem in d :
...
print ( elem . upper () )
G
H
I
>>> d
deque ([ ’f ’ , ’g ’ , ’h ’ , ’i ’ , ’j ’ ])
>>> d . pop ()
’j ’
>>> d . popleft ()
’f ’
>>> list ( d )
[ ’g ’ , ’h ’ , ’i ’]
>>> d [0]
’g ’
>>> d [ -1]
’i ’
>>> d . append ( ’j ’)
>>> d . appendleft ( ’f ’)
>>> d
deque ([ ’f ’ , ’g ’ , ’h ’ , ’i ’ , ’j ’ ])
21 / 23
deque
>>> from collections import deque
>>> d = deque ([0 ,1 ,2] ,4) # Taille max à 4
>>> d
deque ([0 , 1 , 2] , maxlen =4)
>>> d . append (3)
>>> d
deque ([0 , 1 , 2 , 3] , maxlen =4)
>>> d . append (4)
>>> d
deque ([1 , 2 , 3 , 4] , maxlen =4)
23 / 23
22 / 23
Téléchargement