Ein Stapel ist eine lineare Datenstruktur mit einer Sammlung von Artikeln, die dem Prinzip des Last-In-First-Out (LIFO) folgen.Die Spitze des Stacks ist der Artikel, der am neuesten zum Stapel hinzugefügt wurde, und die Unterseite des Stacks ist der Artikel, der am wenigsten zuvor zum Stapel hinzugefügt wurde.
Du kannst die Stapeldatenstruktur als einen Stapel Abendplatten betrachten: Du fängst mit einer an und fügst dann eine weitere darüber hinweg.Wenn du Platten aus dem Stapel nimmst, ist die erste , die du vom Stapel entfernst, die letzte , die du oben platzierst.
Stapel haben zwei Hauptoperationen: push für das Hinzufügen eines Elements an die Spitze des Stacks und pop für das Entfernen des Elements von der Spitze des Stacks.Ein Stack kann entweder eine feste Größe haben oder dynamisch skaliert werden.Stapel sind hilfreich für den Gebrauch von Design, wie z. B. Rücktrittsalgorithmen.
Implementiere Stapel
Obwohl Luau keine Stapel als eingebaute Datenstruktur hat, kannst du Tabellen verwenden, um Stapel zu implementieren.Das folgende Codebeispiel zeigt, wie man einen Stapel erstellt, push ein Objekt auf einen Stapel und pop ein Objekt von einem Stapel.Um diese Implementierung für deine Erlebniszu verwenden, solltest du sie als ModuleScript speichern und in ReplicatedStorage speichern, damit dein Stack sowohl für Client als auch für Server zugänglich ist.
local Stack = {}
Stack.__index = Stack
function Stack.new()
local self = setmetatable({}, Stack)
self._stack = {}
return self
end
-- Überprüfe, ob der Stack leer ist
function Stack:isEmpty()
return #self._stack == 0
end
-- Setze einen neuen Wert auf den Stapel
function Stack:push(value)
table.insert(self._stack, value)
end
-- Nimm einen Wert vom Stapel ab
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.Du kannst den Codes, die eingebenund den Speicherort modifizieren, um sie an deine eigene Nutzung anzupassen, solange du den zuvor gespeicherten Implementierungs-Code-Probemuster richtig gespeichert hast.
Beispiel für Stack-Verwendung
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Stack = require(ReplicatedStorage:WaitForChild("Stack"))local s = Stack.new()-- Ändern Sie den Stack Ergebnis-Stack 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 du das vorherige Codebeispiel ausführst, ohne etwas zu ändern, ist die erwartete Ausgabe:
Beispielausgabe
105201