Salut;
Comment declare-t-on une pile et une file sous python
comment empiler et depiler ? enfiler et defiler ?
merci d'avance
Salut;
Comment declare-t-on une pile et une file sous python
comment empiler et depiler ? enfiler et defiler ?
merci d'avance
Il n'y a pas de type pile ou file à proprement parler, mais il est facile d'utiliser une liste pour cela.
Par exemple:
pile = [1,2,3]
Empiler x => pile.append(x)
Dépiler => pile.pop()
file = [1,2,3]
Enfiler x => file.append(x)
Défiler => file.pop(0)
Mais il y a d'autres façons de faire.
Il existe bien une classe Queue dans le module du même nom, mais elle sert plutôt à communiquer entre threads...
merci de ta reponse dividee
dans ton exemple , il n'y a pas de difference entre une pile et une file ?
et aussi comment faire pour respecter les priorités ?
merci
Edit: je pense avoir compris :
c'est dans le depilage :
l.pop() pour une pile
et l.pop(0) pour une file
Bonjour,
Simulation d'une pile avec une liste:
Déclaration:
Empilage de 'toto':
Code : Sélectionner tout - Visualiser dans une fenêtre à part pile=[]
Dépilage:
Code : Sélectionner tout - Visualiser dans une fenêtre à part pile.append('toto')
Ça, c'était une pile lifo, pour une pile fifo, il suffit de retirer le 1er élément (indice 0):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 x=pile[-1] del pile[-1]
Je ne sais pas ce que tu entends par "file": tu pourrais préciser?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 x=pile[0] del pile[0]
Tyrtamos
[edit]: encore grillé... mais c'est lui qui a raison: pop est mieux
peut on utiliser des listes chainnées ?
j'ai defini la classe suivante :
avec ca on peut peut etre creer des files et des piles ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 class Noeud: def __init__(self,valeur,suivant): self.val=valeur self.suiv=suivant def __repr__(self): return "Noeud de Valeur "+str(self.val)
Une idée de solution à adapter:
Dans une liste python, chaque élément peut être n'importe quoi, et pourquoi pas une liste.
Si l'élement est une liste, elle peut contenir l'indice de l'élément suivant en plus d'une valeur. On doit donc pouvoir chainer ces sous-listes dans un ordre différent de la liste de base.
Exemple:
Dans cet exemple simpliste, le 1er élément est L[1] (il faut le mémoriser dans une autre variable), qui renvoie à L[0], puis à L[3], puis enfin à L[2] qui est le dernier élément à qui on a attribué un suivant "None" qui peut être testé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part L=[[3,'titi'],[0,'toto'],[None,'tutu'],[2,'tata']]
Mais, bon, gérer une pile avec cette liste chainée ne sera pas facile à coder...
Tyrtamos
on peut aussi definir les deux classes:
et pour les arbres binaires :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 class noeudPile: def __init__(self,arbre,suivant=None) self.arbre=arbre self.suiv=suivant
maintenant le plus dur est de definir les operations sur ces nouveaux objets
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 class noeudArbre: def __init__(self,valeur,gauche,droite): self.val=valeur self.filsgauche=gauche self.filsdroit=droite def __repr__(self): return "Noeud de valeur "+str(self.val)
a suivre ...
Partager