สแต็ค

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

สแต็คเป็นโครงสร้างข้อมูลแบบเชิงเส้นที่มีคอลเลกชันของรายการที่ติดตามหลักการ 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} 5
s:Push(20) -- มี {1, 20}
print(s:Pop()) -- มี.ค. {1} 20
print(s:Pop()) -- {} 1

หากคุณวิเคราะห์โค้ดตัวอย่างก่อนหน้านี้โดยไม่เปลี่ยนแปลงใด ๆ ผลการออกมาจะเป็น:

ออกมาตรฐาน

10
5
20
1