Sebuah stack adalah struktur data linier dengan koleksi item yang mengikuti prinsip Last-In-First-Out (LIFO). Bagian atas dari stack adalah item terbaru yang ditambahkan ke stack, dan bagian bawah dari stack adalah item yang paling tidak baru.
Anda dapat menganggap struktur data stack sebagai stack piring makan malam: Anda memulai dengan satu, dan kemudian Anda menempatkan yang lain di atasnya. Saat Anda mengambil piring dari stack, yang pertama adalah pertama yang Anda lepas dari stack adalah yang terakhir yang Anda letakkan di atas.
Tumpukan memiliki dua operasi utama: dorong untuk menambahkan elemen ke bagian atas tumpukan dan pop untuk menghapus elemen dari bagian atas tumpukan. Tumpukan dapat memiliki ukuran tetap atau dapat diubah dinamis. Tumpukan berguna untuk desain seperti algoritma backtracking.
Meng implementasikan Stack
Meskipun Luau tidak memiliki tumpukan sebagai struktur data bawaan, Anda dapat menggunakan tabel untuk menerapkan tumpukan. Contoh kode berikut menunjukkan cara mengatur tumpukan, push dan obj
local Stack = {}
Stack.__index = Stack
function Stack.new()
local self = setmetatable({}, Stack)
self._stack = {}
return self
end
-- Periksa apakah stack kosong
function Stack:IsEmpty()
return #self._stack == 0
end
-- Tambahkan nilai baru ke tumpukan
function Stack:Push(value)
table.insert(self._stack, value)
end
-- Ambil nilai dari tumpukan
function Stack:Pop()
if self:IsEmpty() then
return nil
end
return table.remove(self._stack, #self._stack)
end
return Stack
Sampel kode berikut adalah contoh penggunaan sebagai Script di bawah Workspace . Anda dapat mengubah kode, ketik, dan lokasi penyimpanan untuk menyesuaikan penggunaan Anda, asalkan Anda memiliki sampel kode implementasi yang benar.
Contoh Penggunaan Stack
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Stack = require(ReplicatedStorage:WaitForChild("Stack"))local s = Stack.new()-- Ganti stapel yang dihasilkan stapel keluarans:Push(1) -- anda {1}s:Push(5) -- :{1, 5}s:Push(10) -- :{1, 5, 10}print(s:Pop()) -- :{1, 5}print(s:Pop()) -- pengenalan {1}s:Push(20) -- :{1, 20}print(s:Pop()) -- dokumenasi pengguna {1}print(s:Pop()) -- {} 1
Jika Anda mengeksekusi contoh kode sebelumnya tanpa mengubah apa pun, hasil yang diharapkan adalah:
Output Contoh
105201