0% menganggap dokumen ini bermanfaat (0 suara)
34 tayangan

Algoritma Linked List

by purwanto

Diunggah oleh

purwanto simamora
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
34 tayangan

Algoritma Linked List

by purwanto

Diunggah oleh

purwanto simamora
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 22

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.

Singly linked list (linked list satu arah)


Singly linked list adalah linked list unidirectional. Jadi, kita hanya dapat
melintasinya dalam satu arah, yaitu dari simpul kepala ke simpul ekor.
Doubly linked list (linked list 2 arah)
Doubly linked list adalah linked list bidirectional. Jadi, kita bisa melintasinya
secara dua arah. Tidak seperti singly linked list, simpul doubly linked list berisi
satu pointer tambahan yang disebut previous pointer. Pointer ini menunjuk ke
simpul sebelumnya.
Circular linked list (linked list melingkar)
Circular linked list adalah linked list unidirectional. Kita hanya dapat
melintasinya dalam satu arah. Tetapi jenis linked list ini memiliki simpul terakhir
yang menunjuk ke simpul kepala. Jadi saat melintas, kita harus berhati-hati
dan berhenti saat mengunjungi kembali simpul kepala.
Circular doubly linked list
Circular doubly linked list adalah gabungan dari Doubly linked list dan Circular
linked list. Seperti Doubly linked list, linked list ini memiliki pointer tambahan
yang disebut previous pointer, dan mirip dengan Circular linked list, simpul
terakhirnya menunjuk pada simpul kepala. Jenis linked list ini adalah
bidirectional. Jadi, kita bisa melintasinya dua arah.
KARAKTERISTIK LINKED LIST

• Sebuah linked list memiliki beberapa karakteristik sebagai berikut:


• Linked list menggunakan memori tambahan untuk menyimpan link (tautan)
• Untuk inisialiasi awal linked list, kita tidak perlu tahu ukuran dari elemen.
• Linked list umumnya dapat digunakan untuk mengimplementasikan struktur
data lain seperti stack, queue, ataupun graf
• Simpul pertama dari linked list disebut sebagai Head.
• Pointer setelah simpul terakhir selalu bernilai NULL
• Dalam struktur data linked list, operasi penyisipan dan penghapusan dapat
dilakukan dengan mudah
• Tiap-tiap simpul dari linked list berisi pointer atau tautan yang menjadi
alamat dari simpul berikutnya
• Linked list bisa menyusut atau bertambah kapan saja dengan mudah.
OPERASI PADA LINKED LIST
Berikut adalah daftar operasi dasar pada linked list:
• Traversal - mengakses setiap elemen dari linked list
• Insertion - menambahkan elemen baru ke linked list
• penambahan di awal (insertion at the beginning)
Dalam operasi ini, kita membuat sebuah node baru, mengisi datanya, dan mengatur
pointer node baru untuk menunjuk ke node yang saat ini menjadi head. Selanjutnya, kita
mengubah pointer head untuk menunjuk ke node baru ini, sehingga node baru menjadi
head baru.
• penambahan di akhir (insertion at the end)
Dalam operasi ini, kita membuat sebuah node baru, mengisi datanya, dan mengatur
pointer node terakhir dalam linked list untuk menunjuk ke node baru. Jika linked list masih
kosong, maka node baru akan menjadi head.
• penambahan di tengah (intertion in the middle)
Dalam operasi ini, kita membuat sebuah node baru, mengisi datanya, dan mencari
posisi yang tepat di mana node baru harus ditambahkan. Selanjutnya, kita mengatur
pointer node baru untuk menunjuk ke node setelahnya, dan pointer node sebelumnya
untuk menunjuk ke node baru.
Penambahan elemen pada posisi tertentu
Untuk menambahkan elemen pada posisi tertentu dalam linked list, langkah-
langkah yang dapat dilakukan adalah sebagai berikut:
• Buat node baru yang berisi elemen yang ingin ditambahkan.
• Lakukan traversal dari head hingga mencapai posisi sebelum posisi yang dituju.
• Ubah pointer node sebelumnya untuk menunjuk ke node baru.
• Ubah pointer node baru untuk menunjuk ke node yang sebelumnya menjadi
node setelahnya.
Dengan melakukan langkah-langkah tersebut, elemen baru akan berhasil
ditambahkan pada posisi yang diinginkan dalam linked list.
Penghapusan elemen pada posisi tertentu
Untuk menghapus elemen pada posisi tertentu dalam linked list, langkah-langkah
yang dapat dilakukan adalah sebagai berikut:
• Lakukan traversal dari head hingga mencapai posisi sebelum posisi yang ingin
dihapus.
• Ubah pointer node sebelumnya untuk menunjuk ke node setelahnya dari posisi
yang ingin dihapus.
• Hapus node pada posisi tersebut.
Dengan melakukan langkah-langkah tersebut, elemen pada posisi tertentu akan
berhasil dihapus dari linked list.
• Deletion - menghapus elemen yang ada
• Penghapusan di awal (Deletion at the beginning)
Dalam operasi ini, kita mengubah pointer head untuk menunjuk ke node kedua dalam
linked list, sehingga node pertama akan terlepas dari linked list.
• Penghapusan di akhir (Deletion at the end)
Dalam operasi ini, kita mencari node terakhir dan mengubah pointer node sebelumnya
untuk menunjuk ke null, sehingga node terakhir akan terlepas dari linked list.
• Penghapusan di tengah (Deletion in the middle)
Dalam operasi ini, kita mencari posisi node yang ingin dihapus, mengubah pointer node
sebelumnya untuk menunjuk ke node setelahnya, sehingga node yang dihapus akan
terlepas dari linked list.
• Searching - menemukan simpul pada linked list
• Sorting - mengurutkan simpul dari struktur linked list
• Searching - menemukan simpul pada linked list
Untuk mencari elemen dalam linked list, kita harus mengunjungi setiap node mulai
dari head hingga tail. Pada setiap node, kita membandingkan datanya dengan
elemen yang ingin dicari. Jika ditemukan kecocokan, maka elemen tersebut
ditemukan dalam linked list. Jika sampai pada akhir linked list (tail) dan elemen
belum ditemukan, maka elemen tidak ada dalam linked list.
Operasi dasar pada linked list tersebut merupakan langkah penting dalam
memanipulasi dan mengelola data dalam struktur data linked list.

• Sorting - mengurutkan simpul dari struktur linked list


KEGUNAAN LINKED LIST

• Adapun kegunaan linked list adalah sebagai berikut:


• Linked list dapat digunakan untuk mengimplementasikan
struktur data lain seperti stack, queue, graf, dll.
• Digunakan untuk melakukan operasi aritmatika pada bilangan
long integer
• Digunakan untuk representasi matriks rongga.
• Digunakan dalam alokasi file yang ditautkan.
• Membantu dalam manajemen memori.
PENERAPAN LINKED LIST

Penerapan linked list banyak ditemui dalam beberapa kasus


berikut:
• Linked list digunakan dalam penjadwalan Round-Robin untuk
melacak giliran dalam permainan multi-pemain.
• Digunakan dalam aplikasi penampil gambar. Gambar
sebelumnya dan berikutnya ditautkan, sehingga dapat diakses
oleh tombol prev dan next.
• Dalam playlist musik, lagu yang sedang diputar ditautkan ke
lagu sebelumnya dan berikutnya.
KELEBIHAN 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

Implementasi stack dan queue menggunakan linked list


• Linked list sering digunakan dalam implementasi struktur data stack dan queue. Pada stack,
linked list digunakan dengan aturan Last-In-First-Out (LIFO), di mana setiap elemen baru
ditambahkan di awal linked list dan elemen teratas (top) adalah elemen pertama dalam linked
list. Pada queue, linked list digunakan dengan aturan First-In-First-Out (FIFO), di mana setiap
elemen baru ditambahkan di akhir linked list dan elemen pertama (front) adalah elemen
pertama dalam linked list.

Penggunaan linked list dalam aplikasi pengelolaan data


• Linked list digunakan dalam berbagai aplikasi pengelolaan data, seperti sistem inventaris.
Misalnya, dalam sistem inventaris, linked list dapat digunakan untuk menyimpan daftar barang
atau item dengan fleksibilitas dalam penambahan atau penghapusan item. Setiap item dalam
linked list dapat memiliki data terkait seperti nama, jumlah, atau atribut lainnya.
IMPLEMENTASI LINKED LIST

Keuntungan menggunakan linked list dalam kasus-kasus tertentu


• Linked list memiliki beberapa keuntungan dalam kasus-kasus tertentu. Pertama, linked list
memungkinkan alokasi memori yang dinamis, sehingga ukuran linked list dapat berubah sesuai
kebutuhan. Kedua, operasi penambahan dan penghapusan elemen di tengah-tengah linked list
relatif efisien, karena hanya perlu melakukan penyesuaian pointer. Terakhir, linked list cocok
digunakan ketika kita perlu menyimpan dan mengakses data dengan urutan linier dan tidak
memerlukan akses acak seperti pada array.
CONTOH PENGGUNAAN LINKED LIST DALAM
PEMROGRAMAN NYATA
• Linked list sering digunakan dalam berbagai aplikasi nyata. Misalnya, dalam
aplikasi berbasis grafik, linked list dapat digunakan untuk menyimpan daftar
simpul (node) yang mewakili objek-objek grafik seperti titik, garis, atau bentuk
lainnya. Setiap simpul dalam linked list dapat menyimpan informasi seperti posisi,
warna, atau atribut lainnya. Di bidang jaringan, linked list dapat digunakan
untuk menyimpan daftar simpul (node) dalam struktur data seperti linked list
yang menggambarkan topologi jaringan atau daftar penghubung
(connections) antara simpul-simpul jaringan.
• Dalam penerapan nyata, linked list memberikan fleksibilitas dan efisiensi dalam
mengelola data berurutan serta digunakan dalam berbagai struktur data dan
aplikasi yang membutuhkan operasi penambahan, penghapusan, dan traversal
yang efisien.

Anda mungkin juga menyukai