Una pila es una estructura de datos lineal con una colección de elementos que sigue el principio de Último en Entrar, Primero en Salir (LIFO). La parte superior de la pila es el elemento que se agregó más recientemente, y la parte inferior de la pila es el elemento que se agregó hace menos tiempo.
Puedes pensar en la estructura de datos de pila como una pila de platos de cena: comienzas con uno y luego pones otro encima. Cuando quitas platos de la pila, el primero que quitas de la pila es el último que pusiste en la parte superior.
Las pilas tienen dos operaciones principales: push para agregar un elemento a la parte superior de la pila y pop 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 usos de diseño, como algoritmos de retroceso.
Implementar pilas
Aunque Luau no tiene pilas como una estructura de datos incorporada, puedes usar tablas para implementar pilas. El siguiente ejemplo de código muestra cómo crear una pila, hacer push de un objeto a la pila y hacer pop de un objeto de la pila. Para usar esta implementación en tu juego, debes guardarla como un 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
-- Verifica si la pila está vacía
function Stack:isEmpty()
return #self._stack == 0
end
-- Coloca 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 un Script bajo Workspace. Puedes modificar el código, tipo y ubicación de almacenamiento para ajustarlo a tu propio uso, siempre que tengas el código de implementación anterior correctamente almacenado.
Ejemplo de Uso de Pilalocal ReplicatedStorage = game:GetService("ReplicatedStorage")local Stack = require(ReplicatedStorage:WaitForChild("Stack"))local s = Stack.new()-- Cambiar la pila Pila resultante 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 ejecutas el ejemplo de código anterior sin cambiar nada, la salida esperada es:
Salida del Ejemplo105201