Linear List
Materi Array Linked List Stack Queue
Array Penjelasan ada di modul 2
Definisi Linked list : struktur data yang dibangun dari satu atau lebih node. Node terdiri dari dua bagian : data field dan pointer. Data field: bagian dari list node untuk menyimpan data. Pointer : bagian dari list node untuk menunjuk node berikutnya.
Linked List c a e d b firstNode Pointer dari node e adalah null
LinkedList vs Array Misal L=(a,b,c,d,e) a b c d e c a e d b Array representation c a e d b Linked list representation
Node Link atau pointer data field
Pointer Bantu Head/First : Pointer yang menunjuk ke node paling depan. Tail/Last : Pointer yang menunjuk ke node paling belakang.
Single Linked List
Contoh Single Linked List a b c d e null Node0 Node1 Node2 Node3 Node4
Definisi Linked list yang memiliki satu pointer. Pointer bantu : firstnode
FirstNode a b c d e null firstNode
Head & Tail a b c d e null Head last
Single Representation class ChainNode { Object element; ChainNode next; // constructors come here } next element
Constructors Of ChainNode null ChainNode() {} null element ChainNode(Object element) {this.element = element;} ChainNode(Object element, ChainNode next) {this.element = element; this.next = next;} next element
Operasi Pengaksesan (get) Penghapusan (remove) Penambahan/penyisipan (add)
Pengaksesan Node
get(0) firstnode => menunjuk pointer pada node0 firstnode.data => mengakses data pada node0 (a) a b c d e null firstNode
get(1) firstnode.next => menunjuk pointer pada node1 firstnode.next.data => mengakses data pada node1 (b) a b c d e null firstNode
get(2) firstnode.next.next => menunjuk pointer pada node2 firstnode.next.next.data => mengakses data pada node2 (c) a b c d e null firstNode
get(?) firstnode.next.next.next.next => ???????
Penghapusan Node
Penghapusan Node Langkah-langkah : Letakkan beforenode pada posisi sama dengan firstnode. Cek index yang dimasukkan lakukan pergeseran pada beforeNode untuk mencari node dengan index yang dimaksud. Jika ketemu : hapus node yang dimaksud kemudian arahkan pointer dari node pada index-1 ke node pada index+1. Jika node yang dihapus berada diawal maka jangan lupa untuk mengarahkan firstnode ke node pada index+1. Jika node yang dihapus berada pada index terakhir maka pointer dari node pada index-1 langsung diarahkan ke null
Penghapusan Node 0 Remove(0) firstnode=firstnode.next a b c d e null firstNode b c d e null firstNode
Penghapusan Node 2 Misal : Remove(2) a b c d e firstNode null Node yang akan dihapus
Penghapusan Node 2 Membutuhkan pointer bantu : BeforeNode, untuk menunjuk node sebelah kiri node yang akan dihapus. beforeNode=firstnode.next firstNode b beforeNode c null a b c d e
Penghapusan Node 2 beforeNode.next = beforeNode.next.next a b c d e null firstNode beforeNode
Penambahan Node
Penambahan Node Pointer bantu : newNode (menunjuk node yang akan ditambahkan) beforeNode (menunjuk node pada index-1)
Penambahan dari Depan Add(0,’f’) a b c d e firstNode f newNode ChainNode newNode = new ChainNode(new Character(‘f’), firstNode); a b c d e null firstNode f newNode
Penambahan dari Depan firstNode = newNode a b c d e firstNode f null firstNode f newNode
Penambahan di Tengah (Insert) Add(3,’f’) ChainNode newNode = new ChainNode(new Character(‘f’),beforeNode.next); beforeNode.next = newNode; a b c d e null firstNode f newNode beforeNode c
Double Linked List
Definisi Linked list dengan dua pointer(next & prev) Pointer next : menghadap ke node yang lebih besar indexnya. Pointer prev : menghadap ke node yang lebih kecil indexnya.
Head & Tail Head : menunjuk pada node pertama. Tail : menunjuk pada node terakhir. Pada node pertama, pointer prev mengarah ke null. Pada node terakhir, pointer next mengarah ke null.
Gambaran last Data/item prev next
Double Representation class Node { Object dData; // data item Node next; // pointer next Node prev; // pointer prev ….. }
Operasi Penambahan/penyisipan Penghapusan
Penambahan Node
Penambahan Node Penambahan di awal Penambahan di akhir Penambahan sebelum node tertentu Penambahan setelah node tertentu
Asumsi awal
Penambahan di Awal Pointer bantu : baru Langkah : Baru.next = head head.prev = Baru head = baru
Penambahan di Awal(1) last
Penambahan di Awal(2) last
Penambahan di Awal(3) last
Penambahan di Akhir Asumsi linked list awal : last
Penambahan di Akhir 1. Baru.prev = last last
Penambahan di Akhir 2. last.next = Baru last
Penambahan di Akhir 3. last = Baru last
Penambahan Setelah Node x Pointer bantu : after
Penambahan Setelah Node x Asumsi linked list awal : last
Penambahan Setelah Node x Node after; after diarahkan ke posisi node 10, bisa dimulai dari head maupun last last
Penambahan Setelah Node x 2. Baru.prev = after last
Penambahan Setelah Node x 3. Baru.next = after.next last
Penambahan Setelah Node x 4. after.next.prev = Baru last
Penambahan Setelah Node x 5. after.next = Baru last
Penambahan Setelah Node x Hasil akhir : last
Penambahan Sebelum Node x Asumsi linked list awal : last
Penambahan Sebelum Node x Node before; before diarahkan ke posisi node 5, bisa dimulai dari head maupun last last
Penambahan Sebelum Node x 2. Baru.prev = before.prev last
Penambahan Sebelum Node x 3. Baru.next = before last
Penambahan Sebelum Node x 4. before.prev.next = Baru last
Penambahan Sebelum Node x 5. before.prev = Baru last
Penambahan Sebelum Node x Hasil akhir : last
Penghapusan Node
Operasi Hapus Node (Delete) Hapus awal (Delete First) Hapus akhir (Delete Last) Hapus Node x
Asumsi Awal Asumsi linked list awal : last
Delete First 1. Node hapus; hapus = head; last
Delete First 2. head.next.prev = null last
Delete First 3. head = hapus.next last
Delete First last
Delete First Hasil akhir : last
Delete Last Asumsi linked list awal : last
Delete Last 1. Node hapus; hapus = last; last
Delete Last 2. last.prev.next = null last
Delete Last 3. last = hapus.prev last
Delete Last last
Delete Last Hasil akhir : last
Delete Node x Asumsi linked list awal : Misalkan x = 3 last last
Delete Node x Node hapus; hapus diarahkan pada posisi node 3, bisa mulai dari head maupun last last
Delete Node x 2. hapus.prev.next = hapus.next; last
Delete Node x 3. hapus.next.prev = hapus.prev; last
Delete Node x last
Circular List
Definisi Circular List : list yang berbentuk cirrcular/melingkar, node depan terhubung dengan node paling belakang.
Gambaran a b c d e firstNode
Pustaka Sartaj Sahni, Presentation L5 & L10