Stosy

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

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ście
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

Jeśli uruchomisz poprzedni przykład kodu bez zmiany niczego, oczekiwany wynik to:

Przykładowy wynik

10
5
20
1

Na tej stronie