J'ai écrit la pile en Python

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. 図1.PNG

Commencez par vider la boîte, stockez A, puis retirez-le. 図2.PNG 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? 図3.PNG 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. 図4.PNG 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. 図5.PNG 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. 図9.PNG 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. 図10.PNG 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

Autres articles
Essayez d'implémenter deux piles en Python sur un seul tableau
Valeur minimale pour la pile réalisée avec Python(min)Ajoutez la possibilité de revenir mais de pousser/pop/min est un O basique(1) !!

Recommended Posts

J'ai écrit la pile en Python
J'ai écrit la file d'attente en Python
J'ai écrit python en japonais
J'ai écrit Fizz Buzz en Python
[Python débutant] J'ai rassemblé les articles que j'ai écrits
J'ai écrit l'aile coulissante dans la création.
J'ai écrit le code pour écrire le code Brainf * ck en python
Un mémo que j'ai écrit un tri rapide en Python
J'ai essayé de simuler "Birthday Paradox" avec Python
J'ai essayé la méthode des moindres carrés en Python
J'ai écrit une classe en Python3 et Java
J'ai écrit "Introduction à la vérification des effets" en Python
J'ai essayé d'implémenter la fonction gamma inverse en python
Je veux afficher la progression en Python!
Trouver des erreurs en Python
Pile et file d'attente en Python
Je comprends Python en japonais!
Ce que j'ai appris en Python
J'ai téléchargé la source python
J'ai essayé de représenter graphiquement les packages installés en Python
Je veux écrire en Python! (3) Utiliser des simulacres
Je veux utiliser le jeu de données R avec python
[Examen d'ingénieur d'information de base] J'ai écrit l'algorithme de la méthode de division mutuelle euclidienne en Python.
Notez que je comprends l'algorithme des moindres carrés. Et je l'ai écrit en Python.
Python dans le navigateur: la recommandation de Brython
Enregistrez le fichier binaire en Python
Frappez l'API Sesami en Python
Obtenez le chemin du bureau en Python
J'ai écrit la grammaire de base de Python dans Jupyter Lab
J'ai écrit le fonctionnement de base de Seaborn dans Jupyter Lab
J'ai participé au tour de qualification ISUCON10!
Obtenez le chemin du script en Python
Dans la commande python, python pointe vers python3.8
Implémenter le modèle Singleton en Python
J'ai essayé de programmer le test du chi carré en Python et Java.
J'ai écrit Gray Scale avec Pytorch
Je l'ai écrit en langage Go pour comprendre le principe SOLID
Accédez à l'API Web en Python
J'ai aimé le tweet avec python. ..
Je viens d'écrire le matériel original pour l'exemple de code python
J'ai essayé d'étudier le processus avec Python
Scikit-learn ne peut pas être installé en Python
J'ai essayé d'implémenter la fonction d'envoi de courrier en Python
Examiner la classe d'un objet avec python
J'ai écrit le fonctionnement de base de Numpy dans Jupyter Lab.
Obtenez le chemin du bureau en Python
Obtenez le nom d'hôte en Python
Accéder à l'API Twitter avec Python
Recherche de priorité de profondeur à l'aide de la pile en Python
J'ai écrit un script qui divise l'image en deux
Maîtriser le module lowref en Python
J'ai écrit un doctest dans "J'ai essayé de simuler la probabilité d'un jeu de bingo avec Python"
J'ai comparé le temps de calcul de la moyenne mobile écrite en Python
J'ai essayé le mouvement Python3 qui change la direction dans le système de coordonnées
[Python] J'ai écrit la route du typhon sur la carte en utilisant le folium
J'ai eu un AttributeError en me moquant de la méthode ouverte en python
J'ai écrit une fonction pour charger le script d'extension Git en Python
J'ai écrit un script pour extraire les liens de pages Web en Python
J'ai mis Python 2.7 dans Sakura VPS 1 Go.