กองเป็นโครงสร้างข้อมูลเชิงเส้นที่มีคอลเลกชันของรายการที่ทำตามหลักการ Last-In-First-Out (LIFO)ด้านบนของกองคือรายการที่เพิ่มล่าสุดในกอง และด้านล่างของกองคือรายการที่เพิ่มล่าสุดน้อยที่สุด
คุณสามารถคิดถึงโครงสร้างข้อมูลสแต็กเป็นกองจานอาหารค่ำ: คุณเริ่มต้นด้วยหนึ่งแล้วจึงวางอีกอันบนมันเมื่อคุณเอาแผ่นออกจากกอง แผ่นแรกที่คุณลบออกจากกองคือแผ่นสุดท้ายที่คุณวางบนด้านบน
กองมีสองการดำเนินการหลัก: ผลัก เพื่อเพิ่มองค์ประกอบไปยังด้านบนของกองและ ป๊อป เพื่อลบองค์ประกอบออกจากด้านบนของกองกองสามารถมีขนาดคงที่หรือปรับขนาดได้อย่างไดนามิกกองเป็นประโยชน์สำหรับการใช้งานด้านการออกแบบเช่นอัลกอริทึ่มการย้อนกลับ
ดำเนินการสแต็ก
แม้ Luau จะไม่มีกองเป็นโครงสร้างข้อมูลที่ติดตั้งไว้ คุณสามารถใช้ ตาราง เพื่อใช้กองได้ตัวอย่างโค้ดต่อไปนี้แสดงวิธีการสร้างสแต็ก, push สร้างวัตถุไปยังสแต็ก, และ pop วัตถุจากสแต็กเพื่อใช้การดําเนินการนี้สําหรับประสบการณ์ของคุณคุณควรบันทึกเป็น ModuleScript และเก็บไว้ใน ReplicatedStorage เพื่อให้กองของคุณสามารถเข้าถึงได้ทั้งสําหรับไคลเอนต์และเซิร์ฟเวอร์
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} 10print(s:pop()) -- {1} 5s:push(20) -- {1, 20}print(s:pop()) -- {1} 20print(s:pop()) -- {} 1
หากคุณดำเนินการตัวอย่างโค้ดก่อนหน้าโดยไม่เปลี่ยนแปลงอะไร ผลลัพธ์ที่คาดไว้คือ:
ออกตัวอย่าง
105201