Stos jest liniową strukturą danych z zbiórką przedmiotów, która podąża za zasadą Last-In-First-Out (LIFO). Górna część stosu jest przedmiotem najpierw dodanym do stosu, a dolna część jest przedmiotem, który został najpierw dodany.
Możesz rozważyć strukturę danych stosu jako stos kiełdek do kolacji: zaczynasz od jednej i potem stawiasz kolejną. Gdy bierzesz talerze z stosu, pierwszy z nich, który usuwasz z stosu, jest ostatnim jednym, który stawiasz na górze.
Stosy mają dwa główne operacje: nacisnąć dla dodania elementu do góry stosu i zgnić dla usuwania elementu z góry stosu. Stosy mogą mieć stały rozmiar lub być dynamicznie skalibrowane. Stosy są przydatne dla użycia projektowego, takiego jak algorytmy backtrackingu.
Wprowadzanie stosów
Chociaż Luau nie ma stosów jako wbudowanej struktury danych, możesz użyć tabel do implementacji stosów. Poniższy przykład kodu pokazuje, jak utworzyć stos, push obiekt na stos i pop
local Stack = {}
Stack.__index = Stack
function Stack.new()
local self = setmetatable({}, Stack)
self._stack = {}
return self
end
-- Sprawdź, czy stos jest pusty
function Stack:IsEmpty()
return #self._stack == 0
end
-- Umieść nową wartość na stosie
function Stack:Push(value)
table.insert(self._stack, value)
end
-- Odejmij wartość z tego stosu
function Stack:Pop()
if self:IsEmpty() then
return nil
end
return table.remove(self._stack, #self._stack)
end
return Stack
Poniższy kod przykładowy jest przykładem użycia jako Script pod Workspace . Możesz modyfikować kod, wpisywać i lokalizować przechowywanie, aby dostosować go do własnego użytku, o ile masz poprawnie zapisany poprzedni przykład implementacji.
Przykład użycia stosu
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Stack = require(ReplicatedStorage:WaitForChild("Stack"))local s = Stack.new()-- Zmień stos stosu wynikowegos:Push(1) --s:Push(5) -- {1, 5}s:Push(10) -- :{1, 5, 10}print(s:Pop()) -- {1, 5} 10print(s:Pop()) -- 5s:Push(20) -- :{1, 20}print(s:Pop()) -- {1} 20print(s:Pop()) -- {} 1
Jeśli wykonasz poprzednią próbę kodu bez zmiany nic, oczekiwany wynik to:
Wyjście przykładu
105201