المكدس هو بنية بيانات خطية تحتوي على مجموعة من العناصر التي تتبع مبدأ "الأخير في الأول" (LIFO). الجزء العلوي من المكدس هو العنصر الذي تمت إضافته مؤخرًا إلى المكدس، والجزء السفلي من المكدس هو العنصر الذي تمت إضافته الأقل حديثًا.
يمكنك التفكير في هيكل البيانات المكدس كمجموعة من أطباق العشاء: تبدأ بواحدة، ثم تضع أخرى فوقها. عندما تأخذ الأطباق من المكدس، فإن الأول الذي تقوم بإزالته من المكدس هو الأخير الذي وضعته على القمة.
تحتوي المكدسات على عمليتين رئيسيتين: push لإضافة عنصر إلى أعلى المكدس وpop لإزالة العنصر من أعلى المكدس. يمكن أن يكون للمكدس حجم ثابت أو يمكن إعادة حجمه ديناميكيًا. المكدسات مفيدة للاستخدام في تصميمخ مثل خوارزميات التراجع.
تنفيذ المكدسات
على الرغم من أن 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