• Aucun résultat trouvé

def __init__(self): self.liste

N/A
N/A
Protected

Academic year: 2022

Partager "def __init__(self): self.liste"

Copied!
3
0
0

Texte intégral

(1)

# ======================================================= #

# UNE IMPLEMENTATION ORIENTEE OBJETS DE LA NOTION DE PILE #

# ======================================================= #

class stack:

"""Une classe permettant d'effectuer diverses manipulations sur les piles.

Version du 04 octobre 2016.

Rappelons que, fondamentalement, nous utilisons la structure de liste pour définir notre notion de pile ! Notre classe comporte ainsi un seul attribut (appelé "liste") et correspondant à la liste représentant la pile.

"""

def __init__(self):

self.liste = []

# On représente ...

# Rappelons que la méthode __repr__ doit renvoyer une chaîne de caractères.

def __repr__(self):

if self.liste != []:

# Le sommet est ... en haut !!!

S = 'Sommet'

for i in range(len(self.liste)):

S += '\n*** ' + str(self.liste[i]) + ' ***' else:

S = 'La pile est vide !' return(S)

"""On définit maintenant les méthodes correspondant aux manipulationx de base (cf. le cahier des charges) des piles.

"""

# La pile est-elle vide ?

def isempty(self):

return(self.liste == []) # Ajout d'un élément au sommet

def push(self,e):

self.liste.insert(0,e) # Suppression du sommet courant

def pop(self):

del self.liste[0]

# Obtention du sommet. Celui-ci n'est pas détruit.

def peek(self):

return(self.liste[0])

"""On définit maintenant les méthodes plus complexes demandées dans le TD.

"""

# Copie de la pile

def copy(self):

s2 = stack()

while not self.isempty():

s2.push(self.peek()) self.pop()

s_copy = stack()

while not s2.isempty():

self.push(s2.peek()) s_copy.push(s2.peek())

1

(2)

s2.pop() del s2

return(s_copy) # Inversion de la pile

def reverse(self):

s2 = self.copy() rs = stack()

while not s2.isempty():

rs.push(s2.peek()) s2.pop()

del s2 return(rs)

# Permutation circulaire (acte 1)

def circperm(self,n):

# REMARQUE : ce code NE TIENT PAS compte du fait que n peut être # supérieur à la taille de la pile...

# self est modifiée en place.

# Pile auxiliaire s2 = stack()

# Boucle principale for i in range(n):

# On place le sommet de s dans x et on dépile le reste de self dans s2 x = self.peek()

self.pop()

while not self.isempty():

s2.push(self.peek()) self.pop()

# self est vide, on y place x self.push(x)

# on dépile s2 dans self while not s2.isempty():

self.push(s2.peek()) s2.pop()

# Destruction de la pile auxiliaire del s2

# Permutation circulaire (acte 2)

def circperm2(self,k):

# Pile auxiliaire s2 = stack()

# On récupère le sommet de self x = self.peek()

self.pop()

# On dépile k-1 éléments de self dans s2 for i in range(k-1):

s2.push(self.peek()) self.pop()

# On replace x x dans self self.push(x)

# On dépile s2 dans self (on peut aussi utiliser une boucle while...) for i in range(k-1):

self.push(s2.peek()) s2.pop()

# Destruction de la pile auxiliaire del s2

# Pour tester...

s=stack() s.push(2) s.push(5)

2

(3)

s.push(10) s.push(50) s.push(500) s.push(25000) s.push(55000) s_copy = s.copy()

print(" Pile d\'origine...") print(s)

print(" Copie...") print(s_copy)

s_rev = s.reverse()

print(" Pile d\'origine...") print(s)

print(" Pile inversée...") print(s_rev)

print(" Permutation circulaire (acte 1)...") print(s)

s.circperm(2) print(s)

print(" Permutation circulaire (acte 2)...") print(s_copy)

s_copy.circperm2(3) print(s_copy)

3

Références

Documents relatifs

La gendarmerie et le maire de Rochechouart enquêtent encore sur ce drame, cette catastrophe aurait pu être évitée.. Ils interrogent les victimes hospitalisées et 3

jusqu'à 10 000 euros et risque de fermer ses portes jusqu'à temps que l'hygiène soit rétablie?. Que deviennent

Il les avait cachés dans le gymnase, il voulait punir les élèves d'avoir mis le bazar en salle d'étude.. Après réflexion, la principale a pris une décision

Il était vêtu d'un pull- over avec une capuche noire et portait dans la main droite une arme blanche, avec

Multi- self-similar Markov processes were introduced by Jacobsen and Yor [11] in the aim of extending the Lamperti transformation of positive self-similar Markov processes to R d

It is well known that the number of isomorphism classes of irreducible representations of the symmetric group S n over F , is equal to the number of conjugacy classes of

Using the wavelet scheme, we described a self-stabilizing layer clocks protocol and showed that it provides an efficient device in the design of local coordination problems at

Out of this lengthy gestation, several particularities of the French context of research on and practices in adult education were born: a focus on the term “formation”, which