Une pile est une structure de données linéaire avec une collection d'éléments qui suit le principe du dernier arrivé en premier (LIFO).Le sommet de la pile est l'élément le plus récemment ajouté à la pile, et le fond de la pile est l'élément le moins récemment ajouté.
Vous pouvez penser à la structure de données de pile comme un堆 de plats de dîner : vous commencez par un, puis vous en mettez un autre au-dessus.Lorsque vous prenez des plaques de la pile, la première que vous enlevez de la pile est la dernière que vous mettez en haut.
Les piles ont deux opérations principales : pousser pour ajouter un élément au sommet de la pile et popper pour retirer l'élément du sommet de la pile.Une pile peut avoir une taille fixe ou être redimensionnée dynamiquement.Les piles sont utiles pour l'utilisation de conception telles que les algorithmes de rétrogradation.
Implémenter des piles
Bien que Luau n'ait pas de piles en tant que structure de données intégrée, vous pouvez utiliser tables pour implémenter des piles.L'exemple de code suivant montre comment créer une pile, push une pile à un objet et pop un objet à partir de la pile.Pour utiliser cette implémentation pour votre expérience, vous devez la sauvegarder en tant que ModuleScript et la stocker dans ReplicatedStorage afin que votre pile soit accessible pour le client et le serveur.
local Stack = {}
Stack.__index = Stack
function Stack.new()
local self = setmetatable({}, Stack)
self._stack = {}
return self
end
-- Vérifiez si la pile est vide
function Stack:isEmpty()
return #self._stack == 0
end
-- Mettre une nouvelle valeur sur la pile
function Stack:push(value)
table.insert(self._stack, value)
end
-- Prendre une valeur hors de la pile
function Stack:pop()
if self:isEmpty() then
return nil
end
return table.remove(self._stack, #self._stack)
end
return Stack
L'exemple de code suivant est un exemple d'utilisation en tant que Script sous Workspace .Vous pouvez modifier le code, le taperet l'emplacement de stockage pour s'adapter à votre propre utilisation, à condition que vous ayez correctement stocké l'échantillon de code d'implémentation précédent.
Exemple d'utilisation de pile
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Stack = require(ReplicatedStorage:WaitForChild("Stack"))local s = Stack.new()-- Changer le résultat du pilon résultant du pilon Outputs:push(1) -- {1}s:push(5) -- {1, 5}s:push(10) -- {1, 5, 10}print(s:pop()) -- {1, 5} 10print(s:pop()) -- {1} 5s:push(20) -- {1, 20}print(s:pop()) -- {1} 20print(s:pop()) -- {} 1
Si vous exécutez l'échantillon de code précédent sans rien changer, la sortie attendue est :
Sortie d'exemple
105201