Struktur Data Dasar: Array, Linked List, Stack, dan Queue untuk Programmer Pemula

πŸ“‹ Daftar Isi

Struktur Data Dasar: Array, Linked List, Stack, dan Queue untuk Programmer Pemula

β€œData itu ibarat barang di rumah β€” kalau disimpan sembarangan, susah dicari. Struktur data adalah cara kita menata barang biar gampang diambil, dipake, dan dikembalikan.”

Daftar Isi

  1. Apa Itu Struktur Data?
  2. Kenapa Struktur Data Penting?
  3. Array β€” Kumpulan Data Berurutan
  4. Linked List β€” Rantai Data yang Fleksibel
  5. Stack β€” Tumpukan LIFO
  6. Queue β€” Antrian FIFO
  7. Tree β€” Data Bercabang
  8. Perbandingan Struktur Data
  9. Kesimpulan

Apa Itu Struktur Data?

Bayangkan kamu punya 100 buku. Kalau buku-buku itu ditumpuk sembarangan di lantai, butuh waktu lama buat menemukan buku tertentu. Tapi kalau kamu atur rapi di rak berdasarkan genre, urut abjad, atau pakai sistem katalog digital β€” jauh lebih cepat, kan?

Struktur data adalah cara komputer menyusun, mengelola, dan menyimpan data supaya efisien saat diakses atau dimodifikasi.

Pilih struktur data yang tepat bisa bikin program kamu:

  • Lebih cepat β€” operasi yang butuh O(nΒ²) bisa jadi O(log n)
  • Lebih hemat memori β€” penyimpanan yang efisien
  • Lebih mudah dikembangkan β€” kode yang rapi dan maintainable

Di artikel Algoritma & Logika Dasar, kita udah bahas soal cara berpikir komputasional. Sekarang kita lihat wadah konkret tempat data itu disimpan dan dimanipulasi.


Kenapa Struktur Data Penting?

Seperti kita belajar tipe data dan variabel yang menentukan jenis data yang bisa disimpan, struktur data menentukan cara data itu diatur. Bedanya:

AspekTipe DataStruktur Data
FungsiMenentukan jenis nilai (angka, teks, boolean)Menentukan cara penyimpanan & akses
Contohint, string, boolean, floatArray, linked list, stack, tree
LevelPrimitif, bawaan bahasaBisa primitif atau bentukan
EfekValidasi nilaiEfisiensi operasi (baca/tulis/cari/hapus)

Struktur data dan algoritma itu dua sisi mata uang yang sama. Algoritma butuh struktur data yang tepat biar bisa jalan efisien.


Array β€” Kumpulan Data Berurutan

Analogi

Bayangkan deretan loker di sekolah. Setiap loker punya nomor (indeks). Kamu tinggal bilang β€œnomor 7” untuk buka loker tertentu.

Cara Kerja

Array menyimpan element secara berurutan dalam memori. Setiap element punya indeks yang dimulai dari 0.

Contoh Kode

# Array di Python (sebenarnya list, tapi mirip)
buah = ["apel", "pisang", "jeruk", "mangga"]
print(buah[0])  # Output: "apel"
print(buah[2])  # Output: "jeruk"
buah[1] = "anggur"  # Ganti elemen indeks 1

Kelebihan & Kekurangan

AspekPenjelasan
βœ… Akses cepatO(1) β€” langsung ke indeks berapa pun
βœ… SederhanaPaling mudah dipahami dan dipakai
❌ Ukuran tetapArray statis nggak bisa gedein ukuran
❌ Sisip/hapus lambatO(n) karena harus geser-geser element

Kapan pakai array? Saat jumlah data tetap dan sering diakses secara acak (random access). Contoh: daftar nilai mahasiswa dalam satu kelas, data sensor per detik.


Linked List β€” Rantai Data yang Fleksibel

Analogi

Bayangkan rantai sepeda β€” setiap mata rantai nyambung ke mata rantai berikutnya. Kamu bisa nambah atau ngilangin satu mata rantai tanpa bongkar semuanya.

Cara Kerja

Linked list terdiri dari node yang saling terhubung. Setiap node punya:

  • Data β€” nilai yang disimpan
  • Pointer/next β€” alamat node berikutnya
Node1 β†’ Node2 β†’ Node3 β†’ null
[data | β†’] [data | β†’] [data | null]

Contoh Sederhana (Konsep)

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

# Bikin 3 node
node1 = Node("apel")
node2 = Node("pisang")
node3 = Node("jeruk")

# Sambungin
node1.next = node2
node2.next = node3

Kelebihan & Kekurangan

AspekPenjelasan
βœ… Sisip/hapus cepatO(1) kalau udah di posisi yang tepat β€” tinggal ubah pointer
βœ… Ukuran dinamisBisa nambah node kapan aja
❌ Akses lambatO(n) β€” harus telusuri dari awal
❌ Boros memoriSetiap node butuh memory tambahan buat pointer

Kapan pakai linked list? Saat data sering ditambah/dihapus di tengah dan akses acak jarang dilakukan. Contoh: implementasi undo-redo, playlist lagu.


Stack β€” Tumpukan LIFO

Analogi

Bayangkan tumpukan piring di restoran. Piring terakhir yang ditaruh di atas adalah piring pertama yang diambil. Nggak mungkin ambil piring paling bawah tanpa ngambil semua piring di atasnya dulu.

Prinsip LIFO (Last In, First Out)

Element yang terakhir masuk adalah yang pertama keluar.

Operasi Dasar

OperasiDeskripsiKompleksitas
push(data)Menambah element ke puncak tumpukanO(1)
pop()Mengambil & menghapus element puncakO(1)
peek()Melihat element puncak tanpa hapusO(1)
isEmpty()Cek apakah stack kosongO(1)

Contoh Kode

stack = []
stack.append("halaman 1")  # push
stack.append("halaman 2")  # push
stack.append("halaman 3")  # push
print(stack.pop())  # Output: "halaman 3"
print(stack.pop())  # Output: "halaman 2"

Contoh Real

  • Tombol Back di browser β€” halaman terakhir yang dikunjungi adalah yang pertama ditutup
  • Undo di editor β€” perubahan terakhir di-undo duluan
  • Function call stack β€” fungsi yang dipanggil terakhir selesai duluan

Queue β€” Antrian FIFO

Analogi

Bayangkan antrian di kasir Indomaret. Orang yang pertama datang dilayani pertama. Orang yang baru datang antri di belakang.

Prinsip FIFO (First In, First Out)

Element yang pertama masuk adalah yang pertama keluar.

Operasi Dasar

OperasiDeskripsiKompleksitas
enqueue(data)Menambah element ke belakang antrianO(1)
dequeue()Mengambil element dari depan antrianO(1)
front()Lihat element depanO(1)
isEmpty()Cek antrian kosongO(1)

Contoh Kode

from collections import deque
antrian = deque()
antrian.append("pelanggan A")  # enqueue
antrian.append("pelanggan B")  # enqueue
antrian.append("pelanggan C")  # enqueue
print(antrian.popleft())  # Output: "pelanggan A"
print(antrian.popleft())  # Output: "pelanggan B"

Contoh Real

  • Print spooler β€” dokumen yang dikirim duluan dicetak duluan
  • Message queue β€” pesan diantriin biar nggak overload
  • Breadth-First Search β€” algoritma pencarian yang pakai queue

Tree β€” Data Bercabang

Analogi

Bayangkan pohon keluarga (family tree) atau struktur organisasi perusahaan. Ada CEO di puncak, lalu VP di bawahnya, manager, staff, dan seterusnya. Setiap orang punya satu atasan langsung tapi bisa punya banyak bawahan.

Cara Kerja

Tree punya satu root (akar). Dari root, bercabang ke child nodes (anak). Node yang nggak punya anak disebut leaf (daun).

        CEO          ← root
       /   \
     VP    VP        ← child nodes
    /  \      \
  Mgr  Mgr   Mgr     ← leaf

Jenis Tree Populer

JenisKegunaanContoh
Binary TreeSetiap node maksimal 2 anakParse tree di compiler
Binary Search Tree (BST)Pencarian cepat O(log n)Database indexing
HeapCari min/max cepatPriority queue

Kapan pakai tree? Saat data punya hubungan hirarkis. Contoh: file system di komputer, DOM di HTML, struktur organisasi.


Perbandingan Struktur Data

Struktur DataAkses AcakSisip/Hapus DepanSisip/Hapus BelakangPencarianMemori
ArrayO(1) βœ…O(n) ❌O(1)* βœ…O(n)Rendah
Linked ListO(n) ❌O(1) βœ…O(n)* ❌O(n)Tinggi
Stack-O(1) βœ… (push/pop)-O(n)Rendah
Queue-O(1) βœ… (dequeue)O(1) βœ… (enqueue)O(n)Sedang
Tree (BST)---O(log n) βœ…Sedang

*Array: sisip/hapus belakang O(1) kalau nggak perlu resize. Linked List: sisip belakang O(1) kalau ada tail pointer.

Kapan Pakai yang Mana?

SituasiPilihan
Data tetap, sering diakses indeksArray
Sering tambah/hapus di tengahLinked List
但Butuh LIFO (undo, back button)
Butuh FIFO (antrian, scheduler)Queue
Data hirarkis, butuh pencarian cepatTree

Kesimpulan

Struktur data adalah fondasi yang nggak bisa kamu hindari kalau serius jadi programmer. Memahami kapan pakai array vs linked list, atau stack vs queue, akan membedakan kode kamu dari yang asal-asalan jadi yang profesional.

AspekIntinya
ArrayCepat akses indeks, lambat sisip/hapus tengah
Linked ListFleksibel tambah/hapus, lambat akses acak
StackLIFO β€” undo, back button, function call
QueueFIFO β€” antrian, scheduler, BFS
TreeData hirarkis β€” file system, database, HTML DOM

Tips dari admin: Jangan cuma baca teorinya. Implementasiin satu per satu di Python atau JavaScript. Buat program sederhana: undomanager pake stack, atau aplikasi antrian pake queue. Praktek langsung adalah guru terbaik.

Kalau udah paham struktur data, lanjut belajar control flow dan algoritma biar makin jago!



πŸ’¬ Komentar