Un stack è una struttura dati lineare con una collezione 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 di recente.
Puoi pensare alla struttura dei dati di stack come un insieme di piastre da cena: inizi con una e poi metti un'altra sopra. Quando prendi i piatti dallo stack, il primo primo che rimuovi dallo stack è l'ultimo ultimo che metti sopra.
Le matrici hanno due operazioni principali: push per aggiungere un elemento alla parte superiore della matrice e pop per rimuovere l'elemento dalla parte superiore della matrice. Le matrici possono avere una dimensione fissa o essere ridimensionate dinamicamente. Le matrici sono utili per l'uso del design come i backtracking algorithm.
Realizzazione di Stack
Anche se Luau non ha tabelle come struttura di dati incorporata, puoi usare tabelle per implementare tabelle. Il seguente esempio di codice mostra come creare una tavola, push un oggetto dalla tavola e pop un og
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 sulla stack
function Stack:Push(value)
table.insert(self._stack, value)
end
-- Rimuovi 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 codice di esempio è un esempio di utilizzo come Script sotto Workspace . Puoi modificare il codice, il inserisci / scrivie la posizione di archiviazione per adattarti all'uso personale, fintanto che hai il precedente esempio di codice di implementazione correttamente archiviato.
Esempio di utilizzo della stack
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Stack = require(ReplicatedStorage:WaitForChild("Stack"))local s = Stack.new()-- Cambia il stack Rendimento dello stack Uscitas:Push(1) -- italian:{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 precedente esempio di codice senza modificare nulla, l'output previsto è:
Output di esempio
105201