สแต็คเป็นโครงสร้างข้อมูลแบบเชิงเส้นที่มีคอลเลกชันของรายการที่ติดตามหลักการ Last-In-First-Out (LIFO) สูงสุด ด้านบนของสแต็คคือรายการที่เพิ่มล่าสุดในสแต็ค และด้านล่างของสแต็คคือรายการที่เพ
คุณสามารถคิดถึงโครงสร้างข้อมูลสแต็คเป็นกองจานอาหารค่ำ: คุณเริ่มต้นด้วยหนึ่ง, แล้วคุณวางอีกหนึ่งเหนือมัน เมื่อคุณเอาจานออกจากสแต็ค, หนึ่งแรกที่คุณลบออกจากสแต็คคือ
สแต็คมีสองการดำเนินการหลัก: กด เพื่อเพิ่มองค์ประกอบให้อยู่ด้านบนสแต็คและ ป๊อป เพื่อลบองค์ประกอบออกจากด้านบนสแต็ค สแต็คเป็นประโยชน์สำหรับการใช
การใช้ Stacks
แม้ว่า Luau จะไม่มีสแต็คเป็นโครงสร้างข้อมูลในตัว คุณสามารถใช้ ตาราง เพื่อใช้สแต็คได้ ต
local Stack = {}
Stack.__index = Stack
function Stack.new()
local self = setmetatable({}, Stack)
self._stack = {}
return self
end
-- ตรวจสอบว่ามีพาเลทว่างหรือไม่
function Stack:IsEmpty()
return #self._stack == 0
end
-- ใส่ค่าใหม่ในสแต็ค
function Stack:Push(value)
table.insert(self._stack, value)
end
-- ลบค่าออกจากสแต็ค
function Stack:Pop()
if self:IsEmpty() then
return nil
end
return table.remove(self._stack, #self._stack)
end
return Stack
ตัวอย่างรหัสต่อไปนี้เป็นตัวอย่างการใช้งานเป็น Script ภายใต้ Workspace คุณสามารถปรับแก้รหัส ป้อน และตำแหน่งการเก็บข้อมูลเพื่อให้เหมาะกับการใช้งานของคุณเองได้ ตรา
ตัวอย่างการใช้งานสแต็ค
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Stack = require(ReplicatedStorage:WaitForChild("Stack"))local s = Stack.new()-- เปลี่ยนสถานะของสถานะที่ออกมาs:Push(1) -- {1}s:Push(5) -- :{1, 5}s:Push(10) -- {1, 5, 10}print(s:Pop()) -- {1, 5}เท่าprint(s:Pop()) -- :{1} 5s:Push(20) -- มี {1, 20}print(s:Pop()) -- มี.ค. {1} 20print(s:Pop()) -- {} 1
หากคุณวิเคราะห์โค้ดตัวอย่างก่อนหน้านี้โดยไม่เปลี่ยนแปลงใด ๆ ผลการออกมาจะเป็น:
ออกมาตรฐาน
105201