Memilih struktur data yang tepat adalah skill paling penting dalam programming. Berikut panduan praktis:
Cheat Sheet
| Kebutuhan | Struktur Data Terbaik |
|---|---|
| Akses by index cepat | Array |
| LIFO (undo, parsing) | Stack |
| FIFO (antrian, BFS) | Queue |
| Pencarian by key cepat | Hash Map |
| Nilai unik, cek membership | Set |
| Insert/delete sering di tengah | Linked List |
| Data terurut + cari cepat | BST |
| Ambil min/max cepat | Heap |
| Relasi antar entitas | Graph |
| Autocomplete, prefix search | Trie |
Decision Flowchart
Butuh urutan?
- Ya → Butuh akses by index? → Array
- Ya → Sering insert/delete? → Linked List
- Ya → LIFO? → Stack | FIFO? → Queue
Butuh pencarian cepat?
- By key → Hash Map
- By value, terurut → BST
- Min/Max saja → Heap
- By prefix → Trie
Butuh relasi antar data?
- Hierarki → Tree
- Jaringan → Graph
Contoh Real-world
// 1. Counting kata — Hash Map
const freq = {};
words.forEach(w => freq[w] = (freq[w] || 0) + 1);
// 2. Hapus duplikat — Set
const unique = [...new Set(items)];
// 3. Undo system — Stack
const history = [];
history.push(currentState); // save
const prev = history.pop(); // undo
// 4. Task queue — Queue
const tasks = new Queue();
tasks.enqueue(newTask); // tambah
const next = tasks.dequeue(); // proses berikutnya
🎭 Analogi sehari-hari: Pilih struktur data = pilih alat di kotak peralatan. Ngebor pakai obeng? Bisa, tapi salah alat. Mau ngitung kata sering muncul pakai array biasa? Bisa, tapi O(n²). Pakai Hash Map = O(n). Alat yang tepat = kerja 1000x lebih cepat.
💡 Pertanyaan kunci saat pilih struktur:
- Operasi paling sering apa? (akses, sisip, hapus, cari)
- Urutan penting? (Set/Map vs Array)
- Boleh duplikat? (Set vs Array)
- Berapa data? (kecil = pakai yang simpel, besar = optimasi)
- Akses by index atau by key? (Array vs Hash Map)
⚠️ Jebakan klasik pemula:
- Pakai Array.includes() terus-menerus padahal Set lebih cepat
- Pakai for loop nested padahal Hash Map bisa hemat ke O(n)
- Pakai Linked List padahal Array sudah cukup (cache locality)
- Pakai BST tanpa balancing = degenerate ke linked list
🎯 Quick reference 80% kasus pakai apa:
- Listing data berurutan → Array
- Counting/grouping/lookup by key → Hash Map
- Cek "ada gak" → Set
- Antrian tugas → Queue
- Undo / parsing → Stack
- Urutkan dengan prioritas → Heap
- Hubungan/relasi → Graph
TL;DR: 80% kasus cuma butuh Array, Hash Map, Set, Queue/Stack. Sisanya situasional. Hafalin kapan pakai apa lebih penting daripada hafal implementasi.