450 likes | 682 Views
LINK LIST. Latifah Rifani. SEJARAH. Dikembangkan tahun 1955-1956 oleh Allen Newell, Cliff Shaw dan Herbert Simon di RAND Corporation sebagai struktur data utama untuk bahasa Information Processing Language (IPL). IPL dibuat untuk mengembangkan program artificial intelligence.
E N D
LINK LIST LatifahRifani
SEJARAH • Dikembangkan tahun 1955-1956 oleh Allen Newell, Cliff Shaw dan Herbert Simon di RAND Corporation sebagaistruktur data utamauntukbahasa Information Processing Language (IPL). IPL dibuatuntukmengembangkan program artificial intelligence
PENGENALAN • List merupakansebuahpemikiran/konsepstruktur data yang sangatdasarpadapemrograman agar lebihfleksibel. • Setiapelemenakanditambahkansaatdibutuhkan, tidakdialokasikandengantempattertentudariawal.
ILUSTRASI Secaralogika, kepalaatau first adalahpengaitataupenunjukawalelemenpertamadarisebuah list. kepala null Gambar list dengantigabuahelemen
PENGERTIAN • Merupakansekumpulanelemen list yang bertipesama. • Elemen list mempunyaiketerurutantertentu, nilaisatuelemenbolehmuncullebihdarisatu kali. • Setiapelemenmempunyai 2 bagian: • Informasielemen • Alamatsuksesornya
Linked List adalah salah satu bentuk struktur data, berisi kumpulan data (node) yang tersusun secara sekuensial, saling sambung-menyambung dan dinamis. • Linked List saling terhubung dengan bantuan variabel pointer. • Masing-masing data dalam Linked List disebut dengan node (simpul) yang menempati alokasi memori secara dinamis.
Setiap node terdiriatasduabagian. Bagianpertamaberisiinformasi data tersebut, • Bagiankeduamerupakan field, link, ataunextpointer. Link inilah yang menghubungkansatuelemen data keelemen data lainnya, sehinggaurutanelemen data tersebutmembentuksuatu linear list.
Field link iniberisialamatdarisimpulberikutnyadalam list. • Field link bernilai 0 bila link tersebuttidakmenudingke data (simpul) lainnya. • Penudinginidisebutpenuding nol.
ILUSTRASI NEXT ELEMEN NODE A B C LINK LIST
CONTOH • Misalnyakitainginmembuatsebuahelemen data nilaimahasiswa yang terdiridari NRP, nama, dannilai, makarepresentasinyaadalahsebagaiberikut: NRP nama nilai next 94410 iffa A Penunjukkeelemenberikutnya
Bilaelemensepertidiatasdibuatdalambahasaalgoritma, sepertiberikut: type nilaiMatKul : < NRP : string, nama : string, nilai : string, > • Elemenditambahdenganpengait/penunjuk: type elemen : < elmt : nilaiMatKul, next : elemen >
Deklarasilistnyasebagaiberikut: type list : < first : elemen >
Penunjukelemen di awalini (first) digunakanuntukmemegangelemenawalsebuah list agar dapatdiaksessatu per satusampaielementerakhir list. • Sebuahstruktur data yang dianggapsebagai list memilikiaturanpengaksesan. • Pengaksesandilakukandaripenunjukelemenpertama (first) kemudianberjalanmajukeelemenkedua, ketigadanseterusnyasampaielementerakhir.
KEUNTUNGAN LIST • Penggunaanmemori yang dinamik. • Kita dapatmengaturpenggunaanmemorisehinggabisalebihhemat. • Kesederhaanpada proses insert dan delete elemen.
Alamatelemenpertamadarisuatu list, dapatdiacuoleh First(L). • Nilai yang dibawanyadapatdiacudengan info(P)
10 15 20 10 15 20 head head prev next JENIS LINK LIST • Single Linked List dapatjugaditulisNULL • Double Linked List
10 10 15 20 data pointer NULL PENGERTIAN • Single : artinya field pointer-nya hanya satu buah saja dan satu arah serta pada akhir node, pointernya menunjuk NULL • Linked List : artinya node-node tersebut saling terhubung satu sama lain.
15 20 10 data pointer NULL • Setiap node pada linked list mempunyai field yang berisipointerke node berikutnya, danjugamemiliki field yang berisidata. • Node terakhirakanmenunjukkeNULL yang akandigunakansebagaikondisiberhentipadasaatpembacaanisi linked list.
10 15 20 10 15 20 head head tail JENIS SINGLE LINK LIST Single Link List dengan Head Single Link List dengan Head dan Tail
MEMBUAT ELEMEN LINKED LIST • Membuatsuatuelemen linked list berartimemesantempat di memoriuntukmenyimpansebuah list.
MENGHAPUS ELEMEN LIST • Menghapuselemen list berartimenghilangkanataumenghancurkanalokasimemorisebuah list yang telahada di memori. • Fungsi: agar data yang tidakdiperlukanbenar-benarterhapus di memorisehinggapenggunaanmemoridapatoptimal karena data-data yang tidakdiperlukandihilangkan.
PENAMBAHAN ELEMEN DI POSISI AWAL • Penambahanelemen di posisiawaladalahmenambahkan data barupadaposisiawal, sehingga data barutersebutakanmenjadiawal. • Ada 2 hal yang harusdiperhatikan, yaitu : • kondisi linked list sedangkosong, atau • kondisilinked list sudahmempunyaielemen.
Kondisi Linked List SedangKosong • Ketikalinked list masihkosong, maka variable awaldanakhirakandiisidengan variable baru.
10 head head 1. List masihkosong (head=NULL) NULL 2. Masukkan data baru, misal 10
Kondisi Linked List SudahMempunyaiElemen. • Proses penambahannyaadalahdenganmengisikanfield next milikelemenbarudenganposisiawal linked list, kemudianposisiawalberubahkeposisibaru.
10 15 15 10 15 10 head baru head head baru Masukkandata barudaridepan, misal 15
PenambahanElemen Di PosisiTerakhir • Penambahan di posisiakhiradalah proses penambahan data barudimana data barudisimpan di posisiterakhir. • Setelahproses penambahanselesai, makavariable akhirakanmenunjukke data barutersebut. • Ada 2 halyang harusdiperhatikanyaitu : • Kondisipenambahanakhirpada linked list yang masihkosongdan • Kondisipenambahanakhirpada linked list yang sudahmempunyaielemen.
10 15 10 15 10 15 bantu head head baru head baru Masukkandata barudaribelakang, misal 15
21 21 15 21 10 15 10 10 15 bantu head baru baru head head Masukkandata barudaribelakang, misal 21
MENAMPILKAN SINGLE LINKED LIST DENGAN HEAD • Penelusuraninidilakukandenganmenggunakansuatupointer bantu, karenapadaprinsipnya pointer head yang menjaditandaawal list tidakbolehberubah/bergantiposisi. • Penelusurandilakukanterussampai node terakhirditemukanmenunjukkenilai NULL. Jikatidak NULL, maka node bantu akanberpindahke node selanjutnyadanmembacaisidatanyadenganmenggunakan field next sehinggadapatsalingberkait. • Jika head masih NULL berarti data masihkosong!.
Contoh: Langkah-langkahpenelusuranadalah : • Isi variable p denganawal. • Selamap tidak NULL, makatampilkan info yang ada di elemen yang ditunjukvariable p, kemudian p dipindahkankeelemenberikutnya.
PENGHAPUSAN DATA AWAL • Penghapusan data di awaladalah proses menghapuselemenpertama (awal), sehinggavariable awalakanberpindahkeelemen data berikutnya. • Ada 3 kondisiyang perludiperhatikanyaitu: • kondisilinked list masihkosong • kondisilinked list hanyamemiliki 1 data, dan • kondisilinked list yang memiliki data lebihdari 1 elemen.
Kondisilinked list masihkosong • Padakondisiini proses penghapusantidakbisadilakukan. • Kondisilinked list hanyamemiliki 1 data • Langkah yang dilakukanadalahmenghapus data yang ada di posisiawalkemudianakhirdanawal di-NULL-kan.
Kondisi linked list memiliki data lebih dari 1 data: • Alamatdata awaldiisikankesuatuvariabelpembantu (phapus). • Setelahitupindahkanawalke data berikutnya. • Setelahituhapus/hancurkan data di posisiphapus.
21 21 10 15 15 head head Proses penghapusan data 10 daridepan
Penghapusannode tidakbolehdilakukanjikakeadaan node sedangditunjukoleh pointer. • Sebelum data terdepandihapus, head harusditunjukkanke node sesudahnyaterlebihdahulu agar list tidakputus, sehingga node setelah head lama akanmenjadi head baru (data terdepan yang baru).
PENGHAPUSAN DATA AKHIR • Penghapusan data akhiradalah proses menghilangkan/menghapus data yang adadi posisiterakhir. • Ada 3 kondisi yang harusdiperhatikanketikaakanmelakukanproses penghapusan data akhiryaitu: • Kondisilinked list masihkosong, • Kondisi linked list hanyaberisi 1 data, dan • Kondisilinked list berisi data lebihdari 1 buah.
10 15 15 10 34 10 15 34 21 21 21 head bantu hapus head head bantu bantu Proses menghapus data 34 dari belakang
MENGHAPUS DATA DARI BELAKANG • Membutuhkanpointer bantu danhapus. • Pointer hapusdigunakanuntukmenunjuk node yang akandihapus, dan pointer bantu digunakanuntukmenunjuk node sebelum node yang dihapus yang kemudianselanjutnyaakanmenjadi node terakhir. • Pointer bantu akan digunakan untuk menunjuk ke nilai NULL. • Pointer bantu akan selalu bergerak sampai sebelum node yang akan dihapus, baru kemudian pointer hapus diletakkan setelah pointer bantu. Setelahitu pointer hapusakandihapus, pointe bantu akanmenunjukke NULL.
10 15 20 head tail • Dibutuhkanduabuahvariabel pointer: headdantail • Head akanselalumenunjukpada node pertama, sedangkan tail akanselalumenunjukpada node terakhir.
Java tidakmemiliki pointer namunmemiliki reference. • Reference adalahpenunjukkeobjek (fungsinyasamaseperti pointer)
CONTOH: • Contohpenggunaan reference: Data a = new Data(); Data b = a; /* b menunjukke a*/ • Jika b di ubah, maka a jugaakanberubah
ELEMEN LIST • Pada java, elemen list didefinisikandengankelas. Jadielemen list adalahkelas. • Suatukelasbolehmereferdirinyasendiri. • Contoh: class ListElement { String info; ListElement next; }