Algoritma Linked List
Algoritma Linked List
PURWANTO SIMAMORA
PENGERTIAN
Linked list adalah strukur data linier berbentuk rantai simpul di mana setiap simpul
menyimpan 2 item, yaitu nilai data dan pointer ke simpul elemen berikutnya. Berbeda
dengan array, elemen linked list tidak ditempatkan dalam alamat memori yang
berdekatan melainkan elemen ditautkan menggunakan pointer.
Setiap simpul dalam linked list menyimpan data dan memiliki sebuah pointer yang
menunjuk ke simpul berikutnya dalam urutan linear.
• Perbedaan utama antara linked list dengan struktur data lainnya, seperti array,
adalah kemampuannya untuk mengalokasikan ruang secara dinamis saat program
berjalan. Hal ini memungkinkan penggunaan memori yang efisien, karena linked list
dapat tumbuh atau menyusut sesuai kebutuhan.
• Dalam linked list, simpul pertama disebut sebagai “head” atau “kepala,” sedangkan
simpul terakhir dalam urutan disebut sebagai “tail” atau “ekor.” Ketika tail memiliki
nilai pointer yang menunjuk ke null, itu menandakan akhir dari linked list.
Simpul pertama dari linked list disebut sebagai head atau simpul kepala. Apabila
linked list berisi elemen kosong, maka nilai pointer dari head menunjuk ke NULL. Begitu
juga untuk pointer berikutnya dari simpul terakhir atau simpul ekor akan menunjuk ke
NULL.
Ukuran elemen dari linked list dapat bertambah secara dinamis dan mudah untuk
menyisipkan dan menghapus elemen karena tidak seperti array, kita hanya perlu
mengubah pointer elemen sebelumnya dan elemen berikutnya untuk menyisipkan
atau menghapus elemen.
Linked list biasanya digunakan untuk membuat file system, adjacency list, dan hash
table.
JENIS LINKED LIST
Secara umum, linked list dapat dibagi ke dalam 4 jenis, yakni: Singly linked
list, Doubly linked list, Circular linked list, dan Circular doubly linked list.
• Struktur data dinamis: Linked list adalah himpunan dinamis sehingga dapat bertambah
dan menyusut saat runtime dengan mengalokasikan dan membatalkan alokasi memori.
Jadi kita tidak perlu memberikan ukuran awal dari linked list.
• Tidak boros memori: Dalam linked list, pemanfaatan memori yang efisien dapat dicapai
karena ukuran linked list bertambah atau berkurang pada runtime sehingga tidak ada
pemborosan memori dan tidak perlu mengalokasikan memori sebelumnya.
• Implementasi: Struktur data linier seperti stack dan queue seringkali mudah
diimplementasikan menggunakan linked list.
• Operasi penyisipan dan penghapusan: Operasi penyisipan dan penghapusan cukup
mudah dalam linked list. Kita tidak perlu menggeser elemen setelah operasi penyisipan
atau penghapusan elemen, hanya alamat yang ada di pointer berikutnya saja yang
perlu diperbarui. Namun, akses acak ke elemen dalam linked list lebih lambat
dibandingkan dengan array, karena untuk mencapai elemen tertentu, perlu dilakukan
perjalanan melalui smipul-simpul sebelumnya
KEKURANGAN LINKED LIST
• Penggunaan memori: Linked list memerlukan lebih banyak memori dibandingkan dengan array.
Karena dalam linked list, pointer juga perlu menyimpan alamat elemen berikutnya dan
membutuhkan memori tambahan untuk dirinya sendiri.
• Traversal: Dalam traversal, linked list lebih banyak memakan waktu dibandingkan dengan array.
Akses langsung ke elemen tidak bisa dilakukan pada linked list seperti array yang dapat akses
elemen berdasarkan indeks. Untuk mengakses sebuah simpul pada posisi n dari linked list, kita
harus melintasi semua simpul sebelumnya.
• Reverse Traversing: Dalam single linked list, reverse traversing tidak dimungkinkan, tetapi dalam
kasus double-linked list, ini dapat dimungkinkan karena berisi pointer ke node yang terhubung
sebelumnya dengan setiap node. Untuk melakukannya, diperlukan memori tambahan untuk
pointer sebelumnya sehingga ada pemborosan memori.
• Akses Acak: Akses acak tidak bisa dilakukan dalam linked list karena alokasi memorinya yang
dinamis.
IMPLEMENTASI LINKED LIST