Ein Stack ist eine lineare Datenstruktur mit einer Reihe von Elementen, die dem Last-in-First-Out-Prinzip (LIFO) folgt. Die obere Seite des Stapels ist das Element, das kürzlichst zum Stapel hinzugefügt wurde, und die untere Seite des Stapels ist das Element, das am wenigsten kürzlich hinzugefügt wurde.
Du kannst die Stack-Datenstruktur als eine Stack-Vergabeliste betrachten: du startest mit einer und setzt dann eine andere darüber. Wenn du Platten vom Stack nimmst, ist die erste Platte, die du vom Stack entfernst, die letzte, die du oben setzt.
Stapel haben zwei Hauptbetriebsarten: push für das Hinzufügen eines Elements an die Spitze des Stapels und pop für das Entfernen des Elements an die Spitze des Stapels. Ein Stack kann entweder eine feste Größe haben oder dynamisch resized werden. Stapel sind hilfreich für Design-Anwendungen wie Rückverfolgungsalgorithmen.
Stapel implementieren
Obwohl Luau keine Stapel als integrierte Datenstruktur hat, können Sie Tabellen verwenden, um Stapel zu implementieren. Das folgende Codebeispiel zeigt, wie Sie einen Stapel erstellen, push ein Objekt zu einem Stapel und pop ein Ob
local Stack = {}
Stack.__index = Stack
function Stack.new()
local self = setmetatable({}, Stack)
self._stack = {}
return self
end
-- Überprüfen Sie, ob der Stack leer ist
function Stack:IsEmpty()
return #self._stack == 0
end
-- Lege einen neuen Wert auf den Stack
function Stack:Push(value)
table.insert(self._stack, value)
end
-- Entferne einen Wert von der Stack
function Stack:Pop()
if self:IsEmpty() then
return nil
end
return table.remove(self._stack, #self._stack)
end
return Stack
Das folgende Codebeispiel ist ein Verwendungsbeispiel als Script unter Workspace . Sie können den Codes, die eingebenund den Speicherort anpassen, um Ihre eigene Verwendung anzupassen, solange Sie den vorherigen Codebeispiel-Sammlung richtig gespeichert haben.
Beispiel für die Verwendung von Stack
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Stack = require(ReplicatedStorage:WaitForChild("Stack"))local s = Stack.new()-- Ändere den Stapel Ergebnisstapel Ausgabes: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
Wenn Sie den vorherigen Codebeispiel ohne Änderungen ausführen, ist die erwartete Ausgabe:
Ausgabebeispiel
105201