Uno stack è una struttura dati lineare con una raccolta di elementi che segue il principio Last-In-First-Out (LIFO). La parte superiore dello stack è l'elemento aggiunto più di recente allo stack, mentre la parte inferiore dello stack è l'elemento che è stato aggiunto meno recentemente.
Puoi pensare alla struttura dati stack come a una pila di piatti da cena: inizi con uno e poi ne metti un altro sopra. Quando prendi i piatti dalla pila, il primo che rimuovi dalla pila è il ultimo che hai messo sopra.
Gli stack hanno due operazioni principali: push per aggiungere un elemento in cima allo stack e pop per rimuovere l'elemento dalla parte superiore dello stack. Uno stack può avere una dimensione fissa oppure essere ridimensionato dinamicamente. Gli stack sono utili per applicazioni di design come gli algoritmi di backtracking.
Implementare stack
Sebbene Luau non disponga di stack come struttura dati integrata, puoi utilizzare tabelle per implementare stack. Il seguente esempio di codice mostra come creare uno stack, push un oggetto in uno stack e pop un oggetto dallo stack. Per utilizzare questa implementazione nel tuo gioco, dovresti salvarla come ModuleScript e archiviarla in ReplicatedStorage, in modo che il tuo stack sia accessibile sia per il client che per il server.
local Stack = {}
Stack.__index = Stack
function Stack.new()
local self = setmetatable({}, Stack)
self._stack = {}
return self
end
-- Controlla se lo stack è vuoto
function Stack:isEmpty()
return #self._stack == 0
end
-- Metti un nuovo valore nello stack
function Stack:push(value)
table.insert(self._stack, value)
end
-- Togli un valore dallo stack
function Stack:pop()
if self:isEmpty() then
return nil
end
return table.remove(self._stack, #self._stack)
end
return Stack
Il seguente esempio di codice è un esempio di utilizzo come Script sotto Workspace. Puoi modificare il codice, il tipo e la posizione di archiviazione per adattarli al tuo utilizzo, purché tu abbia correttamente memorizzato il campione di codice di implementazione precedente.
Esempio di utilizzo dello Stacklocal ReplicatedStorage = game:GetService("ReplicatedStorage")local Stack = require(ReplicatedStorage:WaitForChild("Stack"))local s = Stack.new()-- Cambia lo stack Stack risultante 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
Se esegui il campione di codice precedente senza modifiche, l'output previsto è:
Output di esempio105201