Tumpukan adalah struktur data linier dengan koleksi item yang mengikuti prinsip Last-In-First-Out (LIFO). Puncak tumpukan adalah item yang paling baru ditambahkan ke tumpukan, dan dasar tumpukan adalah item yang paling sedikit baru ditambahkan.
Anda dapat memikirkan struktur data tumpukan sebagai tumpukan piring makan: Anda mulai dengan satu, dan kemudian Anda meletakkan satu lagi di atasnya. Ketika Anda mengambil piring dari tumpukan, yang pertama Anda ambil dari tumpukan adalah yang terakhir Anda letakkan di atas.
Tumpukan memiliki dua operasi utama: push untuk menambahkan elemen ke atas tumpukan dan pop untuk menghapus elemen dari atas tumpukan. Tumpukan dapat memiliki ukuran tetap atau diubah ukurannya secara dinamis. Tumpukan berguna untuk penggunaan desain seperti algoritma pencarian mundur.
Mengimplementasikan tumpukan
Meskipun Luau tidak memiliki tumpukan sebagai struktur data bawaan, Anda dapat menggunakan tabel untuk mengimplementasikan tumpukan. Contoh kode berikut menunjukkan cara membuat tumpukan, push objek ke tumpukan, dan pop objek dari tumpukan. Untuk menggunakan implementasi ini untuk permainan Anda, Anda harus menyimpannya sebagai ModuleScript dan menyimpannya di ReplicatedStorage, sehingga tumpukan Anda dapat diakses oleh klien dan server.
local Stack = {}
Stack.__index = Stack
function Stack.new()
local self = setmetatable({}, Stack)
self._stack = {}
return self
end
-- Periksa apakah tumpukan kosong
function Stack:isEmpty()
return #self._stack == 0
end
-- Masukkan nilai baru ke dalam 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
Contoh kode berikut adalah contoh penggunaan sebagai Script di bawah Workspace. Anda dapat memodifikasi kode, jenis, dan lokasi penyimpanan sesuai penggunaan Anda sendiri, asalkan Anda memiliki contoh kode implementasi sebelumnya yang disimpan dengan benar.
Contoh Penggunaan Tumpukanlocal ReplicatedStorage = game:GetService("ReplicatedStorage")local Stack = require(ReplicatedStorage:WaitForChild("Stack"))local s = Stack.new()-- Ubah tumpukan Tumpukan yang dihasilkan Outputs: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
Jika Anda menjalankan contoh kode sebelumnya tanpa mengubah apapun, hasil yang diharapkan adalah:
Contoh Output105201