Stos to liniowa struktura danych z kolekcją przedmiotów, które podążają za zasadą Last-In-First-Out (LIFO).Górna część stosu to element najbardziej ostatnio dodany do stosu, a dolna część stosu to element, który został najmniej ostatnio dodany.
Możesz myśleć o strukturze danych stosu jako o stosie talerzy na kolację: zaczynasz od jednego, a następnie umieszczasz na nim kolejny.Kiedy bierzesz płyty ze stosu, pierwszą z nich, którą usuwasz ze stosu, jest ostatnia , którą umieszczasz na górze.
Stosy mają dwie główne operacje: push do dodania elementu na szczyt stosu i pop do usunięcia elementu z góry stosu.Stos może mieć stały rozmiar lub może być dynamicznie zmieniany.Stosy są przydatne do celów użytkowania projektu, takich jak algorytmy odwracania.
Wdroż stosy
Chociaż Luau nie ma stosów jako wbudowanej struktury danych, możesz użyć tabel do wdrożenia stosów.Poniższy przykład kodu pokazuje, jak utworzyć stos, push obiekt na stos i pop obiekt z stosu.Aby skorzystać z tej implementacji dla swojego doświadczenia, powinieneś zapisać ją jako ModuleScript i przechować w ReplicatedStorage, aby twój stos był dostępny zarówno dla klienta, jak i serwera.
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
-- Włóż nową wartość na stos
function Stack:push(value)
table.insert(self._stack, value)
end
-- Zdejmij wartość ze stosu
function Stack:pop()
if self:isEmpty() then
return nil
end
return table.remove(self._stack, #self._stack)
end
return Stack
Poniższy przykład kodu jest przykładem użycia jako Script pod Workspace .Możesz modyfikować kod, wpisywaći lokalizację przechowywania, aby dopasować do własnego użytku, pod warunkiem, że masz poprawnie przechowany poprzedni kod próbny implementacji.
Przykład użycia stosu
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Stack = require(ReplicatedStorage:WaitForChild("Stack"))local s = Stack.new()-- Zmień wynik stosu Rezultat stosu Wyjścies: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
Jeśli uruchomisz poprzedni przykład kodu bez zmiany niczego, oczekiwany wynik to:
Przykładowy wynik
105201