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