Bir yığın, LIFO prensibini takip eden bir dizi öğeyle birlikte lineer bir veri yapısıdır.Yığının üst kısmı en yeni eklenen öğedir ve yığının en alt kısmı en az yeni eklenen öğedir.
Yığın veri yapısını bir yemek tabağı yığını olarak düşünebilirsiniz: ilk önce bir tane alırsınız ve ardından bir tane daha eklersiniz.Yığından plakalar aldığınızda, yığından çıkardığınız ilk biri yığından kaldırdığınız sonuncusu üstüne koyduğunuzdur.
Yığınların iki ana işlemi vardır: bir elemanı yığının üstüne eklemek için itme ve bir elemanı yığının üstünden kaldırmak için pop .Bir Yığın sabit bir boyuta sahip olabilir veya dinamik olarak yeniden boyutlandırılabilir.Yığınlar, geri gitme algoritmleri gibi tasarım kullanımına yardımcı olur.
Yığınları uygula
Luau'nun yerleşik bir veri yapısı olarak yığınlara sahip olmasına rağmen, yığınları uygulamak için tabloları kullanabilirsiniz.Aşağıdaki kod örneği, bir yığın oluşturma, push bir nesneyi bir yığına aktarma ve pop bir yığından bir nesne oluşturmayı gösterir.Deneyiminiz için bu uygulamayı kullanmak için, bunu ModuleScript olarak kaydetmeli ve ReplicatedStorage 'de saklamalısınız, böylece yığınız hem istemci hem de sunucu için erişilebilir olur.
local Stack = {}
Stack.__index = Stack
function Stack.new()
local self = setmetatable({}, Stack)
self._stack = {}
return self
end
-- Yığın boş olup olmadığını kontrol et
function Stack:isEmpty()
return #self._stack == 0
end
-- Yığına yeni bir değer koyun
function Stack:push(value)
table.insert(self._stack, value)
end
-- Yığından bir değer çıkarın
function Stack:pop()
if self:isEmpty() then
return nil
end
return table.remove(self._stack, #self._stack)
end
return Stack
Aşağıdaki kod örneği, Script altında bir kullanım örneğidir Workspace .Önceki uygulama kod örneğini doğru sakladığınız sürece, kodu, yazve depolama konumunu kendi kullanımınıza uyacak şekilde değiştirebilirsiniz, sürece önceki uygulama kod örneği doğru saklanmıştır.
Yığın Kullanım Örneği
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Stack = require(ReplicatedStorage:WaitForChild("Stack"))local s = Stack.new()-- Yığını değiştir Sonuç yığını Çıktı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
Önceki kod örneğini hiçbir şeyi değiştirmeden çalıştırırsanız, beklenen çıkış şudur:
Örnek Çıktı
105201