Kalau kamu pernah belajar struktur data, pasti dua hal pertama yang sering muncul adalah array dan linked list. Keduanya sama-sama dipakai untuk menyimpan data, tapi punya cara kerja yang cukup berbeda.
Saya pribadi pertama kali belajar array di C. Waktu itu terasa sangat sederhana: tinggal deklarasi ukuran, lalu bisa akses pakai indeks. Tapi begitu masuk ke kasus nyata, barulah terasa ada batasan yang bikin ribet. Dari situlah saya mulai kenal dengan linked list, dan ternyata ada banyak situasi di mana linked list lebih “ramah” dibanding array. Nah, di artikel ini saya mau cerita pengalaman pribadi saya saat harus memilih antara array atau linked list, sekaligus menjelaskan kenapa linked list kadang lebih unggul.
Awal Mula: Ketika Array Jadi Pilihan Pertama
Di awal perjalanan saya ngoding, array seperti sahabat karib. Mau bikin daftar nilai mahasiswa? Pakai array. Mau simpan data angka untuk sorting? Array lagi.
Contoh sederhana:
int nilai[5] = {80, 75, 90, 60, 85};
Semudah itu. Tinggal akses nilai[2]
untuk ambil angka ketiga, atau lakukan loop dengan for
.
Tapi masalah mulai muncul ketika jumlah data ternyata tidak pasti. Misalnya, saya ingin menyimpan data input pengguna yang bisa bertambah terus. Dengan array, ukuran harus ditentukan dari awal. Kalau terlalu kecil, data tidak muat. Kalau terlalu besar, banyak slot kosong yang mubazir.
Di situlah saya mulai merasa array bukan selalu solusi terbaik.
Perkenalan dengan Linked List
Saya pertama kali kenal linked list ketika mengerjakan tugas kuliah tentang struktur data dinamis. Awalnya agak ribet, karena harus bikin node dengan pointer ke elemen berikutnya.
Contoh sederhananya begini:
struct Node {
int data;
struct Node* next;
};
Kita bisa buat node baru, lalu hubungkan dengan node lain menggunakan pointer. Bedanya dengan array, linked list tidak butuh ukuran tetap dari awal. Data bisa terus ditambah, selama memori tersedia.
Saat itu saya merasa: “Oh, jadi inilah alasan kenapa linked list sering disebut lebih fleksibel dibanding array.”
Pengalaman Nyata: Saat Linked List Menjadi Penyelamat
1. Menyisipkan Data di Tengah
Pernah suatu kali saya sedang membuat program simulasi antrian. Ada kondisi di mana saya harus menyisipkan data baru di tengah-tengah antrian.
Kalau pakai array, itu artinya saya harus menggeser semua elemen setelah posisi sisipan. Bayangkan kalau ada ribuan data, proses ini jadi sangat mahal (kompleksitas O(n)).
Dengan linked list, saya cukup:
-
Buat node baru
-
Arahkan pointer node sebelumnya ke node baru
-
Node baru diarahkan ke node berikutnya
Hanya butuh beberapa langkah pointer, tanpa harus menggeser data yang lain. Rasanya jauh lebih efisien.
2. Menghapus Data dengan Mudah
Saya juga pernah menghadapi kasus di mana harus sering menghapus data dari daftar. Dengan array, menghapus berarti harus menggeser lagi elemen setelahnya.
Linked list bikin proses ini jadi simpel: cukup ubah pointer dari node sebelumnya agar loncat ke node berikutnya, lalu bebaskan memori node yang dihapus.
Misalnya, ketika menghapus node kedua:
temp->next = temp->next->next;
Selesai. Tidak perlu menggeser ribuan data.
3. Memori yang Lebih Fleksibel
Array mengharuskan saya menentukan ukuran di awal. Kalau salah perhitungan, bisa berantakan.
Tapi linked list tumbuh secara dinamis. Saat butuh node baru, tinggal alokasikan memori. Inilah yang sangat membantu ketika jumlah data tidak bisa diprediksi.
Saya pernah membuat program untuk membaca input teks dari file besar. Karena tidak tahu pasti berapa banyak baris yang akan dibaca, linked list jadi pilihan terbaik. Saya bisa menambahkan data sesuai kebutuhan, tanpa harus menebak ukuran array.
Kekurangan Linked List (Biar Adil)
Meskipun punya banyak kelebihan, saya juga menemukan beberapa kelemahan linked list.
-
Akses Elemen Tidak Langsung
Kalau di array kita bisa langsung aksesarr[1000]
, di linked list kita harus menelusuri node satu per satu dari awal. Jadi untuk mencari elemen ke-1000, butuh waktu O(n). -
Overhead Pointer
Setiap node butuh ruang ekstra untuk menyimpan pointer. Kalau datanya banyak, overhead ini bisa lumayan besar. -
Cache-Friendly
Array lebih bersahabat dengan cache CPU karena disimpan secara berurutan di memori. Linked list tidak, karena node bisa tersebar di berbagai lokasi.
Jadi, linked list memang bukan solusi untuk semua kasus.
Kapan Memilih Linked List?
Berdasarkan pengalaman saya, linked list cocok digunakan ketika:
-
Data sering bertambah atau berkurang (insert/delete).
-
Ukuran data tidak diketahui sejak awal.
-
Perlu fleksibilitas tinggi tanpa repot alokasi ulang.
Sedangkan array lebih cocok ketika:
-
Akses elemen acak sering dilakukan.
-
Jumlah data sudah diketahui dari awal.
-
Butuh performa tinggi dalam pemrosesan batch.
Dari pengalaman pribadi saya, array dan linked list itu ibarat dua alat dengan fungsi berbeda. Array lebih cocok untuk data yang statis dan sering diakses secara acak, sedangkan linked list lebih baik untuk data yang dinamis dan sering dimodifikasi.
Jadi, bukan soal mana yang selalu lebih baik, tapi soal kapan harus memilih yang tepat.
Kalau saya pribadi, setiap kali menghadapi kasus di mana data sering berubah atau jumlahnya tidak pasti, saya akan langsung memilih linked list. Namun, kalau saya butuh performa tinggi untuk akses acak, saya tetap setia dengan array.
Pada akhirnya, memahami kelebihan dan kelemahan masing-masing adalah kunci agar kita bisa menulis program yang lebih efisien dan tepat guna.
Apakah kamu juga punya pengalaman menarik saat harus memilih antara array dan linked list? Kalau iya, pasti akan setuju bahwa linked list sering kali jadi “penyelamat diam-diam” ketika array sudah mulai bikin pusing.
0 Comments:
Post a Comment