Pilas

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.

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ó con la menor frecuencia.

Puedes pensar en la estructura de datos de la pila como una pila de platos de cena: comienzas con uno, y luego lo colocas encima. Cuando tomas las plataformas de la pila, el primer primer que eliminas de la pila es el último último que pones en la parte superior.

Las pila tienen dos operaciones principales: empujar para agregar un elemento a la parte superior de la pila y pop para eliminar el elemento de la parte superior de la pila. Las pila pueden tener un tamaño fijo o ser reubicadas dinámicamente. Las pila son útiles para el uso de diseño como los algoritmos de seguimiento de regreso.

Im implementando pilas

Aunque Luau no tiene tablas como estructura de datos incorporada, puedes usar tablas para implementar tablas. El siguiente código de ejemplo muestra cómo crear una tabla, push un objeto a una tabla y pop un objeto desde la tabla.


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
-- Pon un nuevo valor en el stack
function Stack:Push(value)
table.insert(self._stack, value)
end
-- Saca un valor del stack
function Stack:Pop()
if self:IsEmpty() then
return nil
end
return table.remove(self._stack, #self._stack)
end
return Stack

El siguiente código de ejemplo es un ejemplo de uso como Script debajo de Workspace . Puedes modificar el código, introduciry ubicación de almacenamiento para que se adapte a tu propio uso, siempre que tengas el código de implementación anterior guardado correctamente.

Ejemplo de uso de la pila

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Stack = require(ReplicatedStorage:WaitForChild("Stack"))
local s = Stack.new()
-- Cambia el stack que se genera el stack salida
s:Push(1) -- sí
s:Push(5) -- {1, 5}
s:Push(10) -- :{1, 5, 10}
print(s:Pop()) -- {1, 5} 10
print(s:Pop()) -- :{1} 5
s:Push(20) -- :{1, 20}
print(s:Pop()) -- {1} 20
print(s:Pop()) -- {} 1

Si ejecuta el ejemplo de código anterior sin cambiar nada, la salida esperada es:

Ejemplo de salida

10
5
20
1