Stack adalah struktur data yang mengikuti prinsip LIFO — Last In, First Out. Elemen terakhir yang masuk adalah yang pertama keluar.
Analogi: Tumpukan piring — kamu ambil piring paling atas, bukan paling bawah.
Operasi utama:
| Operasi | Kompleksitas | Penjelasan |
|---|---|---|
push(item) |
O(1) | Tambah di atas tumpukan |
pop() |
O(1) | Ambil & hapus dari atas |
peek() |
O(1) | Lihat atas tanpa menghapus |
isEmpty() |
O(1) | Cek apakah kosong |
class Stack {
constructor() {
this.items = [];
}
push(item) {
this.items.push(item);
}
pop() {
if (this.isEmpty()) return undefined;
return this.items.pop();
}
peek() {
return this.items[this.items.length - 1];
}
isEmpty() {
return this.items.length === 0;
}
}
const stack = new Stack();
stack.push("A"); // [A]
stack.push("B"); // [A, B]
stack.push("C"); // [A, B, C]
stack.pop(); // "C" → [A, B]
stack.peek(); // "B"
Kegunaan nyata:
- Undo/Redo di text editor
- Call stack saat menjalankan fungsi
- Validasi kurung dalam kode:
({[]}) - Browser history (tombol Back)
💡 Mengapa Stack pas untuk validasi kurung? Kurung selalu cocok dengan yang terakhir dibuka. ({[]}) — saat ketemu ], harus matching dengan [ paling terakhir. Itu literal definisi LIFO. Mau pakai struktur lain? Bakal ribet.
🎭 Analogi sehari-hari (selain piring):
- Tab browser yang ditutup — Ctrl+Shift+T buka yang terakhir ditutup duluan
- Notifikasi yang ditumpuk — yang baru muncul di atas, yang lama tertutup
- Tumpukan tugas yang ditunda — yang ditunda terakhir biasanya yang dikerjain duluan
⚠️ Jebakan umum:
pop()di stack kosong =undefined(bukan error). CekisEmpty()dulu kalau perlu- Pakai array biasa OK, tapi
arr.shift()itu O(n) — jangan pakai sebagai pop kalau push di akhir - Stack overflow = call stack penuh karena rekursi terlalu dalam. Solusi: jadikan iteratif pakai stack manual
🎯 Kapan pakai Stack vs Queue?
- Stack (LIFO): urutan tidak penting, yang baru dulu — undo, parsing, traversal DFS
- Queue (FIFO): urutan penting, FCFS (First Come First Served) — antrian, BFS, scheduling
🧪 Tebakan cepat: Push 1,2,3 lalu pop pop pop — outputnya? 3, 2, 1. Kebalikan dari urutan masuk.
TL;DR: Stack = LIFO. Operasi cuma di puncak. Pakai untuk undo, parsing, dan traversal yang butuh "kembali ke posisi sebelumnya".