Langsung ke konten
KamusNgoding
Pemula Data-structures 4 menit baca

Pengenalan Struktur Data dan Algoritma untuk Pemula

#data-structures #beginner #pengenalan

Pendahuluan

Halo, rekan-rekan developer! Selamat datang di artikel pertama dalam seri pengembangan Sistem Antrian. Jika kamu baru saja memulai perjalanan di dunia pemrograman, mungkin kamu sering mendengar istilah “Struktur Data” dan “Algoritma” disebut-sebut sebagai fondasi paling krusial. Banyak developer pemula yang langsung terjun belajar framework populer seperti React atau Laravel, namun seringkali merasa kesulitan saat harus menyelesaikan logika bisnis yang kompleks. Mengapa hal itu terjadi? Jawabannya adalah karena pemahaman dasar tentang bagaimana data disimpan dan diproses masih belum kuat.

Dalam seri ini, kita tidak hanya akan belajar teori yang membosankan. Kita akan membangun sebuah proyek nyata, yaitu Sistem Antrian. Bayangkan kamu sedang membuat sistem manajemen antrian untuk sebuah bank seperti BCA atau sebuah gerai makanan di GoFood. Kita akan belajar bagaimana mengatur nama-nama nasabah, bagaimana menentukan siapa yang harus dilayani terlebih dahulu, dan bagaimana memastikan sistem kita tetap efisien meskipun jumlah antrian membengkarkan.

Pada artikel pertama ini, kita akan fokus pada pengenalan konsep dasar. Kita akan membedah apa itu struktur data, apa itu algoritma, dan bagaimana keduanya saling berinteraksi dalam sebuah program. Di akhir artikel, kita akan melihat implementasi awal bagaimana sebuah antrian sederhana bekerja menggunakan bahasa pemrograman Python.

Apa Itu Struktur Data?

Secara sederhana, Struktur Data adalah cara kita mengatur, mengelola, dan menyimpan data di dalam memori komputer agar dapat diakses dan dimodifikasi secara efisien. Jika kamu membayangkan komputer sebagai sebuah gudang besar, maka struktur data adalah rak, lemari, atau kotak-kotak yang kita gunakan untuk menata barang agar tidak berantakan.

Tanpa struktur data yang tepat, mencari sebuah barang di gudang akan memakan waktu sangat lama. Begitu juga dengan data. Jika kita menyimpan ribuan data nasabah (seperti Budi, Siti, dan Andi) dalam satu tumpukan yang tidak teratur, komputer akan bekerja sangat keras hanya untuk menemukan satu nama.

Beberapa contoh struktur data yang sering kita temui adalah:

  1. Array: Kumpulan elemen yang disusun secara berurutan dalam memori. Mirip seperti deretan kursi di bioskop yang memiliki nomor urut.
  2. List: Mirip dengan array, namun biasanya lebih fleksibel dalam hal ukuran.
  3. Stack (Tumpukan): Mengikuti prinsip Last In, First Out (LIFO). Seperti tumpukan piring di warung makan; piring yang terakhir diletakkan adalah yang pertama kali diambil.
  4. Queue (Antrian): Mengikuti prinsip First In, First Out (FIFO). Seperti antrian di kasir Indomaret; orang yang datang pertama adalah yang dilayani pertama.

Berikut adalah contoh sederhana penggunaan list (salah satu bentuk struktur data) di Python untuk menyimpan nama pelanggan:

# Contoh penggunaan List untuk menyimpan nama pelanggan
# Di sini kita menyimpan nama-nama yang sedang mengantri

daftar_pelanggan = ["Budi", "Siti", "Andi", "Dewi"]

# Menambah pelanggan baru ke dalam daftar (Enqueue)
pelanggan_baru = "Reza"
daftar_pelanggan.append(pelanggan_baru)

print(f"Daftar pelanggan saat ini: {daftar_pelanggan}")
# Output: ['Budi', 'Siti', 'Andi', 'Dewi', 'Reza']

# Menampilkan pelanggan pertama dalam daftar
print(f"Pelanggan pertama yang datang: {daftar_pelanggan[0]}")

Apa Itu Algoritma?

Jika struktur data adalah “wadah” atau “tempat penyimpanan”, maka Algoritma adalah “instruksi” atau “langkah-langkah” untuk memproses data tersebut. Algoritma adalah urutan langkah logis yang harus diikuti untuk menyelesaikan sebuah masalah atau mencapai tujuan tertentu.

Bayangkan kamu ingin membuat segelas kopi instan. Langkah-langkahnya adalah:

  1. Ambil gelas.
  2. Masukkan kopi ke dalam gelas.
  3. Tuangkan air panas.
  4. Aduk hingga rata.
  5. Kopi siap diminum.

Urutan langkah di atas adalah sebuah algoritma. Jika kamu menukar langkah 1 dan 4 (mengaduk sebelum mengambil gelas), maka hasilnya akan berantubur dan gagal. Dalam pemrograman, algoritma yang buruk akan menyebabkan program berjalan lambat atau bahkan error.

Algoritma yang baik harus memenuhi kriteria:

  • Input: Memiliki data yang akan diproses.
  • Output: Menghasilkan solusi yang diharapkan.
  • Definiteness: Setiap langkah harus jelas dan tidak ambigu.
  • Finiteness: Harus memiliki titik henti (tidak berjalan selamanya).

Berikut adalah contoh algoritma sederhana untuk menghitung total belanjaan di sebuah toko online seperti Tokopedia:

def hitung_total_belanja(daftar_harga: list[int], diskon_persen: int) -> int:
    """
    Algoritma sederhana untuk menghitung total harga setelah diskon.
    """
    total_sebelum_diskon = 0
    
    # Langkah 1: Iterasi (mengulangi) setiap harga dalam daftar
    for harga in daftar_harga:
        total_sebelum_diskon += harga
    
    # Langkah 2: Hitung nilai diskon
    nilai_diskon = total_sebelum_diskon * (diskon_persen / 100)
    
    # Langkah 3: Hitung harga akhir
    total_akhir = total_sebelum_diskon - nilai_diskon
    
    return int(total_akhir)

# Data input: Harga barang-barang belanjaan dalam Rupiah
keranjang_belanja = [50000, 25000, 100000, 15000] # Total: 190.000
diskon = 10 # Diskon 10%

hasil = hitung_total_belanja(keranjang_belarg, diskon)
print(f"Total yang harus dibayar: Rp{hasil:,}")
# Output: Total yang harus dibayar: Rp171,000

Hubungan Antara Struktur Data dan Algoritma

Penting untuk dipahami bahwa struktur data dan algoritma tidak bisa dipisahkan. Efisiensi sebuah program sangat bergantung pada kombinasi keduanya.

Misalnya, jika kita memiliki algoritma “Mencari Nama Nasabah” dan kita menggunakan struktur data Array yang tidak terurut, kita harus mengecek satu per satu dari awal sampai akhir (ini disebut Linear Search). Namun, jika kita menggunakan struktur data yang lebih canggend seperti Hash Table, kita bisa menemukan nama tersebut hampir secara instan.

Dalam proyek Sistem Antrian kita, kita akan menggunakan struktur data Queue (antrian) karena secara alami sistem antrian mengikuti aturan First In, First Out (FIFO). Algoritma yang akan kita buat adalah algoritma untuk menambah orang ke antrian (enqueue) dan mengambil orang dari antrian untuk dilayani (dequeue).

Implementasi dalam Proyek: Awal Sistem Antrian

Mari kita mulai langkah pertama proyek kita. Kita akan membuat kelas SistemAntrian sederhana menggunakan Python. Kita akan menggunakan collections.deque yang merupakan struktur data double-ended queue yang sangat efisien untuk operasi penambahan dan penghapusan di ujung list.

from collections import deque

class SistemAntrian:
    def __init__(self, nama_lokasi: str):
        self.nama_lokasi = nama_lokasi
        # Menggunakan deque sebagai struktur data Queue (FIFO)
        self.antrian = deque()

    def tambah_nasabah(self, nama: str):
        """Menambahkan nasabah ke ujung antrian (Enqueue)"""
        self.antrian.append(nama)
        print(f"[INFO] {nama} telah masuk ke antrian {self.nama_lokasi}.")

    def layani_nasabah(self):
        """Mengambil nasabah terdepan untuk dilayani (Dequeue)"""
        if not self.antrian:
            print("Antrean kosong! Tidak ada yang bisa dilayani.")
            return None
        
        nasabah = self.antrian.popleft()
        print(f"[PROSES] Melayani nasabah: {nasabah}")
        return nasabah

    def tampilkan_antrean(self):
        """Menampilkan daftar semua orang yang sedang menunggu"""
        if not self.antrian:
            print("Antrean saat ini kosong.")
        else:
            print(f"Daftar tunggu {self.nama_lokasi}: {list(self.antrian)}")

# --- Uji Coba Program ---

# 1. Inisialisasi sistem antrean untuk Bank ABC
bank_abc = SistemAntrian(nama_lokasi="Bank ABC")

# 2. Menambahkan nasabah ke antrean
bank_abc.tambah_nasabah("Andi")
bank_abc.tambah_nasabah("Budi")
bank_abc.tambah_nasabah("Citra")

# 3. Melihat daftar antrean
bank_abc.tampilkan_antrean()

# 4. Melayani nasabah
bank_abc.layani_nasabah()
bank_abc.layani_nasabah()

# 5. Melihat sisa antrean
bank_abc.tampilkan_antrean()

(Catatan: Kode di atas adalah penyederhanaan untuk tujuan edukasi)

Dalam implementasi di atas:

  1. Struktur Data: Kita menggunakan deque dari modul collections karena popleft() pada deque jauh lebih cepat daripada pop(0) pada list biasa.
  2. Algoritma: Kita menerapkan logika FIFO (First In, First Out). Orang yang pertama datang adalah yang pertama dilayani.

Dengan memahami dasar ini, pada artikel berikutnya kita akan belajar Array dan Operasi Dasarnya — struktur data paling fundamental yang menjadi dasar dari hampir semua struktur data lainnya.

Artikel Terkait