Qu'est-ce qu'une pile en premier lieu? Oui, stockez et récupérez des données. C'est tout. Cependant, je souhaite pouvoir récupérer les dernières données stockées en premier. Σ(oдΟ;)
Par exemple, comme indiqué ci-dessous, lors de l'empilement vertical de 6 données Supposons que vous ayez une boîte que vous pouvez stocker.
Commencez par vider la boîte, stockez A, puis retirez-le. Après avoir stocké et récupéré A, il est revenu à son état vide d'origine. C'est facile.
Maintenant, après avoir nommé le stockage de données comme Push et la récupération comme Pop, J'ai essayé de comprendre un peu plus le mouvement de Push / Pop des données. J'ai poussé A et B, et finalement sauté. La dernière chose qui reste dans la boîte est A, n'est-ce pas? De cette façon, vous pouvez maintenant imaginer le comportement de la pile qui affiche les dernières données Pushed en premier.
J'aurais aimé ne pas avoir une profondeur de boîte de 6!? Je me fiche des détails (rires). Maintenant, écrivons en Python.
Avant cela, si vous ne comprenez pas la description ici, Nous vous recommandons d'étudier avec Progate !! https://prog-8.com/
Préparons d'abord une boîte pour réaliser la pile. L'image ressemble à ceci. J'ai préparé une boîte nommée str et défini la capacité comme le nombre de données pouvant être stockées. ptr représente la position de 1 à 6. J'ai ajouté le mouvement de ptr à la figure précédente. Comme ceci, ptr (pointeur) montre la position de la boîte qui peut être poussée. Maintenant que vous pouvez imaginer ptr, c'est enfin Python. J'ai fait une boîte.
stack.py
def __init__(self,capacity:int = 10):
self.str = [None] * capacity
self.capa = capacity
self.ptr = 0
"def __ init __" Définissez la valeur initiale dans le programme préparé! C'est un cliché. L'histoire ne démarre que si vous la chargez d'abord lorsque le programme s'exécute. Vient ensuite Push.
stack.py
def push(self,value):
if self.ptr >= self.capa:
raise top.full
self.str[self.ptr] = value
print(self.str[self.ptr])
self.ptr += 1
Il y a une impression entre les deux, mais vous pouvez l'ignorer. L'important est de s'assurer d'abord que la position ptr n'est pas Full. Plein si ptr == capacité Si ptr> capacité, le programme est hors de contrôle !! Vous pouvez voir qu'il est confirmé par if self.ptr> = self.capa:. S'il n'est pas Complet, définissez self.str [self.ptr] = valeur et Push est terminé avec succès. Incrémentez ptr de un en préparation du prochain Push. C'est tout ce que nous faisons avec Push.
Vient ensuite Pop.
stack.py
def pop(self):
if self.ptr <= 0:
raise top.empty
self.ptr -= 1
return self.str[self.ptr]
Si le pointeur ptr était négatif, Parce que vous allez percer le fond et visser les données dans le sol Pour le moment, vérifiez avec l'instruction if. Je suis sûr que certains d'entre vous se sont peut-être interrogés ici. En remarque, dans le monde Python, le stockage ne commence pas à 1. Il commence à 0. Je suis désolé, le premier chiffre n'était pas bon. Donc, si ptr = 0, cela signifie vide. C'est vide. S'il n'est pas vide, décrémentez ptr de 1 comme indiqué ci-dessous. Spécifiez les données à récupérer. Après cela, vous pouvez récupérer les données stockées en faisant return self.str [self.ptr].
Non, j'ai pu renvoyer les données avec retour, La zone spécifiée n'est pas vide! ?? Oui! C'est vrai !! Bakon! (----) / ☆ (* _ *)
En fait, la pile gère les données à la position de ptr. Même si vous ne l'avez pas vidé, le prochain Push le réécrira automatiquement, non? Par conséquent, si vous ne regardez que le mouvement de ptr, vous pouvez créer une pile. C'est pourquoi je vais mettre l'image entière de la pile préparée à la hâte.
stack.py
class top:
class full(Exception):
pass
class empty(Exception):
pass
def __init__(self,capacity:int = 10):
self.str = [None] * capacity
self.capa = capacity
self.ptr = 0
def push(self,value):
if self.ptr >= self.capa:
raise top.full
self.str[self.ptr] = value
print(self.str[self.ptr])
self.ptr += 1
def pop(self):
if self.ptr <= 0:
raise top.empty
self.ptr -= 1
return self.str[self.ptr]
test = top()
while True:
num = int(input("select 1.push , 2.pop : "))
if num == 1 :
s = int(input("enter data: "))
try:
test.push(s)
except test.full:
print("full!")
elif num == 2:
try:
x = test.pop()
print(x)
except test.empty:
print("empty!")
else:
break
Peut-être que "__ init __", push, pop est la clé, donc si vous le savez, J'espère que tu comprends.
Ceci est mon premier message, donc s'il y a quelque chose qui manque ou est difficile à comprendre Merci de bien vouloir préciser !! m (_ _) m
Recommended Posts