← All articles
Fundamental

Array, Linked List, Stack, Queue - Struktur Data Dasar yang Wajib Lo Paham

Array, Linked List, Stack, Queue - empat struktur data yang lo pake setiap hari. Bedanya apa? Kapan pake yang mana? Lengkap dengan kode Go dan analisis Big O.

Muhammad AmienMuhammad Amien·Jun 24, 2026·4 min read
Array, Linked List, Stack, Queue - Struktur Data Dasar yang Wajib Lo Paham

Bayangin lo punya 100 juta data pengguna. Lo mau cari user yang namanya dimulai dengan huruf 'R'. Lo pake for loop biasa. Butuh 5 detik. CEO lo di samping lo liat. 'Lambat banget,' katanya. Lo malu.

Masalahnya bukan di bahasa pemrograman. Bukan di server. Masalahnya ada di **cara lo nyimpen data**. Struktur data yang lo pilih nentuin apakah program lo jalan dalam milidetik atau menit. Dan ironisnya, yang paling dasar justru yang paling sering dilupain.

Artikel ini bakal ngebahas 4 struktur data paling fundamental yang lo pake - sadar atau gak - di setiap kode yang lo tulis. **Array, Linked List, Stack, dan Queue.** Gue gak cuma jelasin teorinya, tapi gue bakal kasih lo kode real di Go, plus kapan lo harus pake yang mana.

Array: Si Paling Sederhana, Tapi Ada Batasnya

Array adalah struktur data paling basic. Bayangin lemari dengan nomor laci. Lo mau ambil barang di laci nomor 5 - langsung dapet, gak perlu buka laci 1 sampe 4 dulu. Itu yang disebut akses **O(1)**.

Di Go, array punya ukuran tetap:

Tapi masalahnya: ukurannya tetap. Lo gak bisa nambahin elemen ke-6 kalau array cuma punya 5 slot. Makanya di Go, orang lebih sering pake **slice** - array yang bisa tumbuh.

Tapi ini ada harganya. Setiap kali lo pake append, Go mungkin perlu alokasi memory baru dan ngopi semua data lama. Kalau slice lo udah gede (ribuan elemen), append bisa jadi mahal.

Yang menarik: akses random itu cepet (O(1)), tapi **nyari data tertentu** di array - meskipun udah pake for loop - tetep O(n). Kalau array lo 10 juta elemen dan data yang dicari ada di posisi terakhir, ya lo harus nge-loop 10 juta kali.

Linked List: Fleksibel Tapi Lemot Diakses

Linked List beda. Daripada data berjejer rapi di memory, setiap elemen (disebut **node**) nyimpen alamat ke node berikutnya. Kayak petunjuk harta karun - lo cuma tahu 1 alamat, sisanya harus ngikut rantai.

Ini kelebihan linked list: **insert dan delete di tengah itu murah**. Di array, kalau lo hapus elemen index ke-3, semua elemen setelahnya harus geser. Di linked list, lo tinggal ubah pointer.

Tapi ada harga yang harus dibayar. **Akses random itu lambat** - O(n). Mau ambil elemen ke-100? Lo harus lompat dari node 1, ke node 2, ke node 3, sampe node 100. Gak bisa langsung.

Dan soal memory. Setiap node nyimpen data + pointer. Kalau array butuh 8 byte per integer, linked list butuh 16 byte (8 data + 8 pointer). Dua kali lipat. Buat 10 juta data, ini gak main-main.

Praktiknya: Gue pake linked list kalau operasi utamanya adalah insert/delete di tengah. Tapi jarang. Di Go, kebanyakan developer lebih milih slice + copy daripada linked list, karena cache locality lebih bagus.

Stack: Last In, First Out - Kayak Tumpukan Piring

Stack itu kayak tumpukan piring di restoran. Piring yang terakhir ditaruh di atas adalah yang pertama diambil. **LIFO - Last In, First Out.**

Operasinya cuma 2: push (naruh di atas) sama pop (ngambil dari atas). Dua-duanya O(1).

Stack dipake di **mana-mana** tanpa lo sadar:

  • Undo/redo - tiap action di-push ke stack. Undo = pop.
  • Function call stack - pas lo manggil fungsi, alamat return di-push. Pas fungsi selesai, di-pop.
  • Browser history - tombol Back itu pop dari stack.
  • Depth-First Search - stack nentuin node mana yang harus dijelajah selanjutnya.

Queue: First In, First Out - Kayak Antrian Sembako

Queue kebalikan dari stack. Kayak antrian di kasir - yang pertama dateng adalah yang pertama dilayani. **FIFO - First In, First Out.**

Operasi: enqueue (masuk antrian di belakang) dan dequeue (keluar dari depan).

Tapi hati-hati. Pake slice buat queue di Go itu **gak efisien** buat skala gede. Karena `queue[1:]` itu bikin slice baru dan ngopi semua data. Buat antrian ribuan item, ini mahal banget.

Solusinya: pake linked list atau ring buffer. Atau di Go, pake channel yang emang didesain buat ini:

Gue Pake yang Mana Kapan?

  • Array / Slice: kalau lo butuh akses random cepet dan ukuran relatif tetap
  • Linked List: kalau insert/delete di tengah adalah operasi utama (jarang terjadi)
  • Stack: kalau butuh LIFO - undo, backtracking, parsing
  • Queue: kalau butuh FIFO - job queue, request pipeline, BFS

Intinya

Struktur data bukan soal teori yang lo hafal buat interview. Ini soal **tools** yang lo pilih pas nulis kode. Salah pilih, bayarnya mahal - CPU cycles, memory, dan yang paling berharga: waktu lo debugging.

Mulai besok, tiap kali lo nulis slice di Go, tanyain: "Apa bener ini yang paling tepat?" Jawabannya belum tentu. Tapi seenggaknya lo punya alasan kenapa milih satu di atas yang lain.

Referensi

1. Go Slices: usage and internals

2. Introduction to Algorithms (CLRS)

3. Computer Science Roadmap - roadmap.sh

Share this article
XLinkedInWhatsAppTelegram
Muhammad Amien

Muhammad Amien

Building software that bridges the gap between design and engineering. React, Laravel, and the art of shipping.

Have a project in mind?

I'm currently available for freelance work and collaboration. Let's build something together.

Get in Touch →

Comments

0 responses
Loading...
Loading comments