Struktur Data Dasar: Array, Linked List, Stack, dan Queue

1. Pendahuluan

Dalam dunia pemrograman, struktur data adalah salah satu pilar utama yang menentukan efisiensi dan performa dari sebuah program. Struktur data adalah cara penyimpanan dan pengorganisasian data agar dapat digunakan secara efisien. Pemilihan struktur data yang tepat dapat meningkatkan kecepatan eksekusi dan mengurangi penggunaan memori dalam aplikasi.

Empat struktur data dasar yang sering digunakan adalah Array, Linked List, Stack, dan Queue. Keempatnya digunakan dalam berbagai aplikasi nyata, seperti sistem antrian layanan, pemrosesan teks, sistem navigasi, bahkan dalam implementasi algoritma tingkat lanjut seperti graf dan pohon.

Artikel ini membahas definisi, implementasi, kelebihan, kekurangan, dan aplikasi dari keempat struktur data tersebut, serta bagaimana pemrogram dapat menggunakannya secara optimal dalam pengembangan perangkat lunak.


2. Array

2.1 Definisi

Array adalah struktur data linear yang menyimpan elemen dengan tipe data yang sama dalam blok memori yang berdekatan. Elemen dalam array diakses menggunakan indeks numerik.

Contoh dalam C:

c
SalinEdit
int angka[5] = {1, 2, 3, 4, 5};

2.2 Karakteristik

  • Ukuran tetap setelah dideklarasikan.
  • Akses elemen cepat karena indeks langsung mengarah ke lokasi memori.

2.3 Kelebihan dan Kekurangan

KelebihanKekurangan
Akses elemen O(1)Ukuran tidak fleksibel
Sederhana untuk diimplementasikanOperasi insert/delete mahal (O(n))

2.4 Aplikasi

  • Penyimpanan data statis (contoh: nilai ujian).
  • Matriks dalam komputasi numerik.
  • Buffer dalam sistem operasi dan jaringan.

3. Linked List

3.1 Definisi

Linked List adalah struktur data linear di mana setiap elemen (disebut node) berisi data dan pointer yang menunjuk ke node berikutnya. Tidak seperti array, linked list tidak menyimpan elemen secara berurutan di memori.

Jenis-jenis linked list:

  • Singly Linked List: hanya memiliki satu arah.
  • Doubly Linked List: memiliki pointer ke node sebelumnya dan berikutnya.
  • Circular Linked List: node terakhir menunjuk kembali ke node pertama.

3.2 Contoh dalam C++

cpp
SalinEdit
struct Node {
  int data;
  Node* next;
};

3.3 Kelebihan dan Kekurangan

KelebihanKekurangan
Ukuran dinamisAkses elemen lambat (O(n))
Operasi insert/delete efisienOverhead memori karena pointer

3.4 Aplikasi

  • Implementasi struktur data lainnya (stack, queue, hash table).
  • Sistem navigasi (undo/redo).
  • Alokasi memori dinamis.

4. Stack

4.1 Definisi

Stack (tumpukan) adalah struktur data linear yang menerapkan prinsip Last In, First Out (LIFO). Elemen terakhir yang ditambahkan akan menjadi yang pertama diambil.

Operasi dasar:

  • push(): menambahkan elemen ke atas stack.
  • pop(): menghapus elemen teratas.
  • peek()/top(): melihat elemen teratas tanpa menghapusnya.

4.2 Contoh dalam Python

python
SalinEdit
stack = []
stack.append(10)  # push
stack.pop()       # pop

4.3 Kelebihan dan Kekurangan

KelebihanKekurangan
Mudah diimplementasikanTidak cocok untuk akses acak
Digunakan dalam rekursi dan parsingUkuran terbatas jika menggunakan array

4.4 Aplikasi

  • Pemrosesan ekspresi matematika (postfix, infix).
  • Implementasi fungsi rekursif.
  • Algoritma Depth First Search (DFS).
  • Undo pada editor teks.

5. Queue

5.1 Definisi

Queue (antrian) adalah struktur data linear yang menerapkan prinsip First In, First Out (FIFO). Elemen pertama yang masuk akan menjadi yang pertama keluar.

Operasi dasar:

  • enqueue(): menambahkan elemen ke belakang.
  • dequeue(): menghapus elemen dari depan.

5.2 Variasi Queue

  • Circular Queue: menyambungkan elemen terakhir ke awal.
  • Priority Queue: elemen dengan prioritas tertinggi dikeluarkan lebih dulu.
  • Deque (Double Ended Queue): elemen dapat ditambahkan/dihapus dari kedua ujung.

5.3 Contoh dalam Python

python
SalinEdit
from collections import deque

q = deque()
q.append(1)      # enqueue
q.popleft()      # dequeue

5.4 Aplikasi

  • Sistem antrian pelanggan.
  • Penjadwalan CPU.
  • Buffer data (misalnya, streaming video).
  • Algoritma Breadth First Search (BFS).

6. Perbandingan Keempat Struktur Data

Struktur DataAkses AcakInsert/Delete di TengahUkuran DinamisKompleksitas
ArrayO(1)O(n)TidakSederhana
Linked ListO(n)O(1) jika punya pointerYaSedikit kompleks
StackO(n)Push/Pop O(1)YaSederhana
QueueO(n)Enqueue/Dequeue O(1)YaSederhana

7. Pemilihan Struktur Data Berdasarkan Kebutuhan

Pemilihan struktur data sangat tergantung pada:

  • Akses: Jika diperlukan akses cepat ke elemen acak, gunakan array.
  • Insert/Delete: Jika banyak operasi insert/delete di tengah, gunakan linked list.
  • Urutan masuk/keluar: Jika urutan LIFO atau FIFO penting, gunakan stack atau queue.
  • Keterbatasan memori: Linked list cenderung membutuhkan lebih banyak memori.

8. Studi Kasus Implementasi

8.1 Antrian Pelayanan Bank

Gunakan queue untuk menyimpan urutan nasabah yang akan dilayani.

8.2 Pencocokan Kurung dalam Ekspresi

Gunakan stack untuk mengecek keseimbangan tanda kurung pada ekspresi matematika:

python
SalinEdit
def cek_kurung(exp):
    stack = []
    for char in exp:
        if char == '(':
            stack.append(char)
        elif char == ')':
            if not stack:
                return False
            stack.pop()
    return not stack

8.3 Pengolahan Data Sensor

Gunakan array untuk menyimpan data sensor selama periode tertentu.


9. Kesalahan Umum dalam Penggunaan Struktur Data

  • Index out of range: Saat mengakses array melebihi indeks maksimum.
  • Null pointer: Dalam linked list, pointer mengarah ke null tanpa pengecekan.
  • Stack overflow: Karena rekursi berlebihan.
  • Queue underflow: Menghapus dari queue kosong.

Solusi:

  • Validasi input.
  • Gunakan exception handling.
  • Gunakan struktur data dari pustaka standar jika memungkinkan.

10. Kesimpulan

Struktur data dasar seperti array, linked list, stack, dan queue membentuk fondasi pemrograman yang kuat. Meskipun sederhana, mereka digunakan dalam hampir semua sistem komputasi, dari aplikasi web hingga sistem tertanam. Penguasaan terhadap struktur data ini memungkinkan pengembang untuk menulis program yang efisien, terstruktur, dan siap untuk berkembang ke struktur yang lebih kompleks seperti tree, hash table, dan graph.


Referensi

[1] M. A. Weiss, Data Structures and Algorithm Analysis in C++, 4th ed., Pearson, 2013.

[2] R. Sedgewick and K. Wayne, Algorithms, 4th ed., Addison-Wesley, 2011.

[3] Cormen, T. H., Leiserson, C. E., Rivest, R. L., and Stein, C., Introduction to Algorithms, 3rd ed., MIT Press, 2009.

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *