190 likes | 495 Views
ADT DINAMIS : SINGLY LINKED LIST DAN DOUBLE LINKED LIST. Sub Pokok Bahasan. Konsep Dasar List (Senarai) Singly Linked List (Senarai Berkait Tunggal) Doubly Linked List (Senarai Berkait Ganda). Konsep Dasar List (Senarai).
E N D
Sub Pokok Bahasan • Konsep Dasar List (Senarai) • Singly Linked List (Senarai Berkait Tunggal) • Doubly Linked List (Senarai Berkait Ganda)
Konsep Dasar List (Senarai) • Senarai (list) dapat didefinisikan sebagai urutan dinamis (dynamic ordering) dari sesuatu L = (l1, l2, …,ln) dimana li adalah elemen ke-i pada List
List (Senarai) • Dinamis elemen-elemen dalam List nilainya dan jumlahnya dapat berubah-ubah • Elemen pertama dinamakan kepala (head) List, sedangkan elemen terakhir disebut ekor (tail) List • Jumlah elemen pada List L ditulis sebagai |L| • List sebelumnya memiliki |L| = n
List (senarai) • List akan disimpan dalam bagian memori komputer yang dinamakan heap. • Implementasi pada masa lampau , yang menggunakan (pascal , C ataupun C++) sebelum muncul Java biasanya menggunakan field terakhir dalam setiap record sebagai tempat penyimpanan alamat memori (pointer) untuk record berikutnya yang terkait dalam List
101 102 103 104 105 106 107 108 109 110 Saving Box di Bank • Analogi gambar saving box sebagai memori komputer. • Jika kita ingin menyewanya, mka harus membayar sejumlah dana ke bank • Bank akan mengisikan barang-barang berharga ke saving box 101, jika tidak cukup ke box 102, dst
MHS 1101 Dita 1104 1104 Ami 1107 1107 Fani • 1101,1104, 1107 disebelah kiri adalah alamat pengingat(memori) , dimana data nama mahasiswa tersimpan. • Pada dasarnya kita tidak perlu mengetahui alamat ini secara eksplisit, karena interpreter Java kelak akan mengaturnya untuk kita
MHS adalah kepala (head) List yang menunjuk alamat dimana data nama mahasiswa disimpan • 1101, 1104, 1107 adalah suatu tempat dimana ia menunjukkan alamat dari data yang berkaitan, sehingga kita bisa mengatakan bahwa List nama mahasiswa terdiri atas Dita, Ami serta Fani • Null berarti List telah mencapai akhirnya • Daerah-daerah kosong dalam gambaran pengingat (memori) diatas bisa berisi data apa saja
HEAD L1 L2 L3 L4 Tail • Jika linked list hanya bergerak maju saja, double linked list dapat bergerak maju mundur. • Keduanya membutuhkan metoda/fungsi yang bersifat baku, seperti : • Menambahkan (insert()/add()) suatu simpul • Menghapus (remove()) suatu simpul (Node) • Kedua metoda (fungsi) memiliki implementasi yang berbeda saat simpul yang ditambah atau dihapus berada di bagian kepala, di tengah ataupun di bagian ekor dari salah satu List
SINGLY LINKED LIST • Struktur data berbasis Node • Node adalah elemen biasa yang memiliki satu atau lebih pointer (penunjuk) ke simpul-simpul lainnya, yang berisi alamat memori node-node lainnya • Java tidak mengenal pointer, jadi perlakukan objek sebagai pointer • Struktur Node memiliki elemen data atau elemen-elemen lain yang merujuk ke node lainnya • Node yang ditunjuk disebut sebagai child node, sedang node itu sendiri disebut parent node Parent node Child node
Kode Java untuk Node (1) package singlyLinkedList; public class pOneChildNode{ protected Object data; // next merupakan ‘pointer’ ke node berikutnya. protected pOneChildNode next; // Konstruktor 1. public pOneChildNode(){ next = null; data = null; }
Pembahasan koding (1) • Bagian terbesar kelas pOneChildNode adalah metoda/fungsi set() dan get(). • Data/atribut yang dimiliki adalah data dan next. • next memiliki tipe yang sama dengan kelasnya (protected pOneChildNode) , sehingga dapat secara efektif menunjuk pada objek yang lain yang berasal dari kelas yang sama • Metoda String toString() merupakan metoda standar yang dimiliki Java untuk mencetak sesuatu. • Tanpa metoda toString(), tidak akan diperoleh representasi nyata atribut data milik kelas Node
Kode Java untuk Node (2) import singlyLinkedList.pOneChildNode; public class pLinkedList{ protected pOneChildNode head; protected int number; public pLinkedList(){ head = null; number = 0; } public boolean isEmpty(){ return head == null;
Pembahasan koding (2) • head merupakan node pertama dalam Linked List, number adalah jumlah keseluruhan node yang ada dalam Linked List • number digunakan untuk metoda size(). • Konstruktor pLinkedList () digunakan untuk melakukan inisialisasi • Metoda insert() bermanfaat untuk menyisipkan objek • Metoda remove() , untuk menghapus objek tertentu dari LinkedList
Head Null Null TV VCD Null TV Compo VCD Null TV
null Memori Aku 0100 Belajar 0200 Linked list 0300 null ….. DOUBLY LINKED LIST • Kelemahan dari singly linked list adalah pointer(penunjuk) hanya dapat bergerak satu arah saja , dari head ke tail. • Pada singly linked list tidak dapat mengakses node sebelumnya dari node yang saat ini diakses