Pile et file d'attente en Python

Cette fois, j'ai lu les chapitres 1 à 9 du didacticiel Python en ligne, et il semblait que Stack et Queue pouvaient faire quelque chose, j'ai donc écrit le code. Stack: Un autre nom pour Stack est LIFO (Last In First Out), mais comme son nom l'indique, c'est la première structure de données à être sortie lorsque le dernier élément est sorti. Il y a deux fonctions requises pour implémenter une pile: push (), qui place un élément à la fin de la pile, et pop (), qui place un élément à la fin de la pile. En tant qu'image, lorsque vous empilez des livres, vous devez penser que vous allez les ramasser du haut des livres empilés. Le module ressemble à ceci et j'écrirai l'explication plus tard.

stack.py


class Stack:
    def __init__(self, stack = None):
        if type(stack) is type([]):
            self.stack = stack
        elif stack is None:
            self.stack = []
        else:
            print '\nError Message:\n\tYour input is not type of list!\n\tPlease enter list type!\n'
        
    def push(self, e):
        self.stack.append(e)    
        return self.stack       
        
    def pop(self):
        try:
            sEl = self.stack.pop()
            return (sEl, self.stack)  
        except IndexError:            
            print '\nError Message:\n\tThere is no element in the stack!\n'

Tout d'abord, j'ai créé une classe pour Stack, et dans le constructeur, Stack prend une liste comme paramètre (argument). En Python, il semble mettre self dans le premier paramètre du constructeur pour une raison quelconque, mais quand je regarde la ligne suivante, il dit self.stack. C'est peut-être ça en Java. J'ai l'impression de l'utiliser en Java pour dire si la variable à laquelle je souhaite accéder est définie localement ou globalement. (Peut-être, absolument, j'ai oublié w) Donc dans le cas de Python, je pense qu'il est possible de faire la distinction entre la pile de noms de variables de paramètres et la pile de variables nouvellement définies dans cette classe. push(): La poussée de la première fonction n'insère l'élément qu'à la fin, il suffit donc d'appeler l'ajout de la fonction intégrée dans la liste en donnant le e de l'élément pris comme paramètre. Juste au cas où, la pile est retournée comme valeur de retour afin que vous puissiez imprimer comment la pile a changé. Vous devriez pouvoir le voir avec print lorsque vous appelez cette fonction. pop(): Encore une fois, vous pouvez récupérer et supprimer l'élément head en utilisant simplement la fonction intégrée pop (). Affectez-le à la nouvelle variable sEl (qui signifie stackElement) et renvoyez-le comme valeur de retour. Dans la valeur de retour, je voulais renvoyer la pile elle-même pour vérifier si la configuration de la pile a changé, je l'enferme donc dans un taple et renvoie les deux valeurs en même temps. Si cette fonction est appelée alors que la pile ne contient aucun élément, IndexError se produira, donc si une erreur se produit lors de l'utilisation de try, le message après l'impression sera émis comme un avertissement. try est utilisé pour exécuter le code à l'intérieur et s'il y a un problème, attrapez-le dans le bloc suivant et émettez un message. Ceci est également utilisé en Java pour try & catch, donc si vous souhaitez étudier Java à partir de maintenant, veuillez vous en souvenir.

Queue Dans Queue, lorsque vous placez un élément, il effectue le même processus que Stack, mais lorsque vous sortez un élément, il commence par celui qui a été placé en premier des éléments restants. Cela s'appelle FIFO (First In First Out). Nous allons créer deux fonctions de la même manière que Stack. Tout d'abord, j'ai nommé la fonction à mettre en file d'attente () et la fonction à exécuter en tant que dequeue (). L'image de cette structure de données peut être plus facile à comprendre si vous pensez à disposer les boules de billard dans une rangée, à les pousser à la fois à partir de la fin et à les faire tomber dans les trous depuis le début.

queue.py


class Queue:
    def __init__(self, queue = None):
        if type(queue) is type([]):
            self.queue = queue
        elif queue is None:
            self.queue = []
        else:
            print '\nError Message:\n\tYour input is not type of list!\n\tPlease enter list type!\n'
        
    def enqueue(self, e):
        self.queue.append(e)   
        return self.queue     

    def dequeue(self):
        try:
            qEl = self.queue[0]     
            del self.queue[0]     
            return (qEl, self.queue)  
        except IndexError: 
            print '\nError Message:\n\tThere is no element in the queue!\n'

dequeue(): Dans enqueu (), j'ai suivi la même procédure que push () de Stack, mais dans dequeue (), je veux récupérer l'élément qui a été mis en premier, donc j'attribue l'élément de l'index 0 à une nouvelle variable, puis je le supprime. .. En supprimant avec del, l'élément détenu par l'index 1 dans la liste se déplacera automatiquement vers l'index 0, de sorte que l'élément le plus ancien de la liste sera sélectionné même lors de la répétition. Ici, comme avec pop (), une instruction try est utilisée pour indiquer une erreur lorsque la liste ne contient aucun élément, et un message s'affiche en cas d'erreur.

Dans cet article, j'ai implémenté une structure de données simple car je suis presque un débutant en Python. J'aimerais lire un peu plus le livre de référence Python et coder un algorithme adapté au traitement du langage naturel, etc., mais je pense qu'il y a encore beaucoup de choses que je ne sais pas quoi faire, alors peut-être que je vais créer une autre structure de données Je peux le poster. Après avoir lu le livre de référence, s'il y a des fonctionnalités intéressantes de Python, je les posterai toutes ensemble. À bientôt!

Remarque: le code de cet article n'a été qu'un simple test et peut ne pas fonctionner. Si vous l'utilisez vous-même et que vous rencontrez des problèmes, je vais le corriger et le modifier. Si vous utilisez ce code, ou si vous le lisez, veuillez nous le faire savoir dans les commentaires ou par e-mail s'il manque quelque chose ou comment le faire efficacement.

Recommended Posts

Pile et file d'attente en Python
Module d'implémentation de file d'attente et Python "deque"
Unittest et CI en Python
Différence entre list () et [] en Python
Différence entre == et est en python
Manipuler des fichiers et des dossiers en Python
Affectations et modifications des objets Python
Vérifiez et déplacez le répertoire en Python
Chiffrement avec Python: IND-CCA2 et RSA-OAEP
Synthèse de fonctions et application en Python
J'ai écrit la file d'attente en Python
Exporter et exporter des fichiers en Python
Inverser le pseudonyme plat et le katakana en Python2.7
Lire et écrire du texte en Python
[GUI en Python] Menu PyQt5 et barre d'outils-
Recherche de priorité de profondeur à l'aide de la pile en Python
J'ai écrit la pile en Python
Créer et lire des paquets de messages en Python
Chevauchement d'expressions régulières en Python et Java
Quadtree en Python --2
Python en optimisation
CURL en Python
Différence d'authenticité entre Python et JavaScript
Métaprogrammation avec Python
Notes utilisant cChardet et python3-chardet dans Python 3.3.1.
Python 3.3 avec Anaconda
Géocodage en python
SendKeys en Python
Livre Ali en python: Auto-implémentation de la file d'attente prioritaire
Les modules et packages en Python sont des "espaces de noms"
Évitez les boucles imbriquées en PHP et Python
Différences entre Ruby et Python dans la portée
Modulation et démodulation AM avec Python Partie 2
Méta-analyse en Python
différence entre les instructions (instructions) et les expressions (expressions) en Python
Valeurs authentiques et vecteurs propres: Algèbre linéaire en Python <7>
Unittest en Python
Graphique à lignes pliées et ligne d'échelle en python
Implémenter le filtre FIR en langage Python et C
Différences entre la syntaxe Python et Java
Vérifier et recevoir le port série en Python (vérification du port)
Rechercher et lire des vidéos YouTube avec Python
Époque en Python
Discord en Python
Allemand en Python
DCI en Python
tri rapide en python
Différence entre append et + = dans la liste Python
Différence entre non local et global en Python
Ecrire le fichier O_SYNC en C et Python
N-Gram en Python
Programmation avec Python
Gérer les "années et mois" en Python
Plink en Python
Constante en Python
Lire et écrire des fichiers JSON avec Python
Représentez facilement des données graphiques dans le shell et Python
Méthodes et champs privés en python [chiffrement]
Rechercher et vérifier la matrice inverse en Python