Pile

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Una 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 più recentemente aggiunto allo stack e la parte inferiore dello stack è l'elemento che è stato aggiunto meno recentemente allo stack.

Puoi pensare alla struttura dei dati dello stack come uno stack di piatti da cena: inizi con uno e poi ne metti un altro sopra.Quando prendi i piatti dallo stack, il primo che rimuovi dallo stack è l'ultimo che metti in cima.

Le pile hanno due operazioni principali: push per aggiungere un elemento in cima alla pila e pop per rimuovere l'elemento dalla cima della pila.Una Stack può avere una dimensione fissa o essere ridimensionata dinamicamente.Le pile sono utili per l'uso del design come gli algoritmi di ritorno.

Implementa gli stack

Anche se Luau non ha stack come struttura dati integrata, puoi usare tabelle per implementare stack.Il seguente esempio di codice mostra come creare uno stack, push un oggetto a uno stack e pop un oggetto da uno stack.Per utilizzare questa implementazione per la tua esperienza, dovresti salvarla come ModuleScript e conservarla in ReplicatedStorage , in modo che la tua 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 sullo stack
function Stack:push(value)
table.insert(self._stack, value)
end
-- Prendi 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 inserisci / scrivie la posizione di archiviazione per adattarlo al tuo uso, a patto di avere il precedente campione di codice di implementazione correttamente archiviato.

Esempio di utilizzo dello stack

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local Stack = require(ReplicatedStorage:WaitForChild("Stack"))
local s = Stack.new()
-- Cambia lo stack Risultante stack Output
s:push(1) -- {1}
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

Se esegui il precedente esempio di codice senza cambiare nulla, l'output previsto è:

Output di esempio

10
5
20
1

Su questa pagina