Una pila es una estructura de datos lineal con una colección de elementos que sigue el principio de Last-In-First-Out (LIFO).La parte superior de la pila es el elemento más recientemente agregado a la pila y la parte inferior de la pila es el elemento que se agregó menos recientemente.
Puedes pensar en la estructura de datos de la pila como un montón de platos de cena: comienzas con uno, y luego pones otro encima.Cuando tomas platos de la pila, el primero que sacas de la pila es el último que pones en la parte superior.
Las pilas tienen dos operaciones principales: empujar para agregar un elemento a la parte superior de la pila y sacar para eliminar el elemento de la parte superior de la pila.Una pila puede tener un tamaño fijo o ser redimensionada dinámicamente.Las pilas son útiles para el uso de diseño, como los algoritmos de retroceso.
Implementar pilas
Aunque Luau no tiene pilas como estructura de datos integrada, puedes usar tablas para implementar pilas.El siguiente ejemplo de código muestra cómo crear una pila, push una objeto a una pila, y pop un objeto desde la pila.Para usar esta implementación para tu experiencia, deberías guardarla como ModuleScript y almacenarla en ReplicatedStorage, para que tu pila sea accesible tanto para el cliente como para el servidor.
local Stack = {}
Stack.__index = Stack
function Stack.new()
local self = setmetatable({}, Stack)
self._stack = {}
return self
end
-- Compruebe si la pila está vacía
function Stack:isEmpty()
return #self._stack == 0
end
-- Poner un nuevo valor en la pila
function Stack:push(value)
table.insert(self._stack, value)
end
-- Toma un valor de la pila
function Stack:pop()
if self:isEmpty() then
return nil
end
return table.remove(self._stack, #self._stack)
end
return Stack
El siguiente ejemplo de código es un ejemplo de uso como Script bajo Workspace .Puedes modificar el código, el introduciry la ubicación de almacenamiento para adaptarlos a tu propio uso, siempre que tengas la muestra de código de implementación anterior almacenada correctamente.
Ejemplo de uso de pila
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Stack = require(ReplicatedStorage:WaitForChild("Stack"))local s = Stack.new()-- Cambiar el resultado de la pila Cambiar el resultado de la pila Salidas: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 ejecuta el ejemplo de código anterior sin cambiar nada, el resultado esperado es:
Salida de ejemplo
105201