Perbedaan Array List dan Linked List di Bahasa Pemrograman
Dalam penggunaan Array maupun List sama saja yaitu menyimpan kumpulan data. Di tulisan ini saya mencoba menjelaskan beberapa kelebihan dan kekurangan yang terdapat pada Array dan List tipe struktur data di bahasa pemrograman atau algoritma.
Apa itu struktur data?
sebelum mengenal linked list dan array kita kenalan dengan Struktur data, Struktur data adalah proses mengatur dan menyimpan data. Ini diklasifikasikan menjadi dua jenis:
-
Struktur Data Linear – Dalam jenis struktur data ini, data elemen disusun dalam urutan linier berurutan, tetapi tidak wajib untuk menyimpan elemen secara berurutan. Contoh: Array, Linked List, Stacks & Queue.
-
Struktur Data Non-Linear – Dalam jenis struktur data ini, data elemen disusun dalam urutan non-linier. Contoh: Pohon dan grafik
Apa itu linked list ?
Linked list adalah struktur data yang digunakan untuk menyimpan kumpulan data. berikut ini daftar Linked list memiliki properti berikut:
- Elemen berurutan yang dihubungkan oleh sebuah pointer.
- Elemen terakhir selalu dalam keadaan NULL.
- Dapat bertambah atau berkurang ukurannya selama program dieksekusi.
- Dapat diciptakan selama diperlukan sampai kondisi memori sistem habis.
- Tidak membuang-buang ruang memori akan tetapi membutuhkan memori tambahan untuk pointer dan selalu mengalokasikan memori saat ukurannya bertambah.
Mengapa harus menggunakan Linked List ?
Linked List adalah Struktur Data Linear yang merupakan kumpulan dari elemen data atau node. Setiap node berisi data dan alamat atau pointer yang menunjuk ke simpul berikutnya. Node pertama disebut Head dan node terakhir disebut Tail atau ekor. Node terakhir selalu menunjuk ke nilai yang NULL.
Daftar tertaut atau Linked List memiliki kelebihan dan kekurangan. Keuntungan dari Linked List adalah mereka dapat diperluas dalam waktu yang konstan.
Linked List dapat mencegahnya dengan mengalokasikan banyak ruang pada awal dibuat, tetapi kemudian Linked List akan mengalokasikan lebih dari yang kebutuhan dan menyebabkan pemborosan memori. Dengan Linked List, kita bisa mulai kondisi awal Linked List hanya untuk satu elemen yang dialokasikan dan ditambahkan elemen baru secara mudah tanpa perlu melakukan penyalinan dan alokasi data.
Array List
Array atau larik adalah kumpulan item atau elemen yang semuanya memiliki tipe data yang sama. Elemen dari array hanya dapat diakses dari nilai indeksnya. Contoh: Mari kita membuat data nama-nama bahasa pemrograman dalam bentuk array.
bahasaProgrammer = ["php", "Javascript", "python", "ruby"]
Masalah ketika menggunakan Linked List dibanding Array
Ada beberapa masalah ketika menggunakan Linked List. Yang paling utama dari Linked List adalah ketika mengakses setiap elemen individu Sedangkan di Array pengaksesan datanya bisa secara akses acak, yang berarti dibutuhkan kompleksitas O(1) untuk mengakses semua elemen dalam Array. Kemudian Linked List memiliki karakter kompleksitas O(n) untuk akses ke elemen dalam kondisi terburuk. Terkadang Linked List sulit untuk dimanipulasi, Jika item terakhir ingin dihapus, maka harus mengubah pointer untuk menyimpan referensi NULL. Ini mengharuskan Linked List untuk menemukan tautan yang terakhir kecuali jika kondisi satu elemen saja, dan pointer diubah dalam kondisi NULL sebagai referensi. maka kesimpulannya Linked List membuang memori jika Linked List selalu bertambah datanya.
dibandingkan dengan Keuntungan dari Array dalam waktu akses untuk lokalitas spasial dalam memori Array didefinisikan sebagai blok memori yang berdekatan, sehingga setiap elemen array akan secara fisik berada di dekat tetangganya. maka sangat diuntungkan jika diterapkan untuk metode caching CPU.
Meskipun alokasi penyimpanan dinamis merupakan keuntungan terbesar, dengan penyimpanan dan mengambil data dapat membuat perbedaan besar.
Kekurangan Dari Array
- Pengalokasian semua memori yang diperlukan di awalan dan menyebabkan membuang ruang memori untuk indeks dalam array yang kondisinya kosong.
- Array Ukuran tetap: Ukuran Array bersifat statis ditentukan ukuran Array sebelum digunakan.
- Alokasi satu blok: Untuk mengalokasikan array itu sendiri di awal, terkadang mungkin tidak mungkin mendapatkan memori untuk array lengkap jika ukuran array berukuran besar.
- Penyisipan kondisi posisi kompleks: Untuk menyisipkan elemen pada posisi tertentu, perlu menggeser elemen yang ada. maka akan membuat posisi pembagi untuk memasukkan elemen baru pada posisi yang diinginkan. Jika posisi di mana kita ingin menambahkan elemen di awal, maka operasi pergeseran lebih sulit.
kelebihan dari Array
-
Di Array, mengakses elemen lebih cepat. Ini membantu kita untuk mengakses elemen apa pun hanya dari nilai indeksnya. Oleh karena itu kompleksitas waktu adalah O(1)
-
Dalam Array, penggunaan memori dialokasikan selama waktu proses kompilasi (Alokasi memori yang statis).
-
Array adalah kumpulan elemen data yang memiliki ukuran tetap. Sifatnya statis di beberapa bahasa pemrograman tertentu yang melakukan kompilasi
kelebihan Link List
-
Di Linked List, kita perlu melakukan iterasi untuk mengakses elemen apa pun. Oleh karena itu kompleksitas waktu adalah O(n)
-
Dalam proses daftar alamat di memori tertaut dialokasikan hanya selama runtime (Alokasi memori dinamis). Konsumsi memori juga akan lebih banyak dalam melakukan daftar alamat tertaut dibandingkan dengan array dan ini karena setiap node berisi data dan pointer yang membutuhkan memori yang menyebabkan prose yang ekstra.
-
Linked List bersifat dinamis.