Bir yığın, Son Giren İlk Çıkar (LIFO) ilkesini izleyen bir dizi öğeden oluşan doğrusal bir veri yapısıdır. Yığının en üstü, yığına en son eklenen öğe iken, yığının en altı en az son eklenen öğedir.
Yığın veri yapısını, bir yığın yemek tabağı gibi düşünebilirsiniz: bir tane ile başlarsınız ve sonra bir tane daha onun üzerine koyarsınız. Yığınlardan tabak alırken, yığınından ilk çıkardığınız tabak en son üstüne koyduğunuz tabaktır.
Yığınların iki ana işlemi vardır: yığının en üstüne bir nesne eklemek için push ve yığının en üstünden bir nesne çıkarmak için pop. Bir yığın ya sabit boyutlu olabilir ya da dinamik olarak boyutu değiştirilebilir. Yığınlar, geri izleme algoritmaları gibi tasarım kullanımları için yararlıdır.
Yığınları Uygulama
Luau'da yığınlar yerleşik bir veri yapısı olarak bulunmasa da, yığınları uygulamak için tabloları kullanabilirsiniz. Aşağıdaki kod örneği, bir yığın oluşturmayı, bir nesneyi yığının üstüne push etmeyi ve yığından bir nesneyi pop etmeyi göstermektedir. Bu uygulamayı oyununuzda kullanmak için, bir ModuleScript olarak kaydetmeli ve ReplicatedStorage içinde saklamalısınız, böylece yığını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ın boş olup olmadığını kontrol et
function Stack:isEmpty()
return #self._stack == 0
end
-- Yığına yeni bir değer ekle
function Stack:push(value)
table.insert(self._stack, value)
end
-- Yığınından bir değeri al
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, Workspace altında bir Script olarak bir kullanım örneğidir. Kodu, türü ve saklama konumunu kendi kullanımınıza uyacak şekilde değiştirebilirsiniz, yeter ki önceki uygulama kod örneğini düzgün bir şekilde saklayın.
Yığın Kullanım Örneğilocal ReplicatedStorage = game:GetService("ReplicatedStorage")local Stack = require(ReplicatedStorage:WaitForChild("Stack"))local s = Stack.new()-- Yığını değiştir Elde Edilen 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
Eğer önceki kod örneğini hiçbir şeyi değiştirmeden çalıştırırsanız, beklenen çıktı şudur:
Örnek Çıktı105201