Tumpukan

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

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 keluaran
s: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

10
5
20
1