Victor Yngve di Massachusetts Institute of Technology (MIT) juga menggunakan linked list pada natural language processing dan machine transitions pada bahasa pemrograman COMMIT.
Definisi
Linked list : struktur data yang dibangun dari satu atau lebih node yang menempati alokasi memori secara dinamis. Node : tempat penyimpanan data yang terdiri dari dua bagian/field. Field 1 adalah Data, digunakan untuk menyimpan data/nilai. Field 2 adalah Pointer, untuk menyimpan alamat tertentu.
Linked List
Jika linked list hanya berisi satu node maka pointernya akan menunjuk ke NULL. Jika linked list memiliki lebih dari satu node maka pointer menyimpan alamat dari node berikutnya. Sehingga antara node satu dengan node yang lain akan terhubung. Kecuali node paling ujung akan menunjuk ke NULL. Pointer disebut juga sebagai link.
e
Linked list representation
Linked List
Linked list dibedakan menjadi 2 :
Single linked list Double linked list
null
10
Ekor Node e tidak menunjuk ke node manapun sehingga pointer dari node e adalah NULL. Dapat disimpulkan bahwa node ini adalah node yang paling belakang (node ekor).
Kepala Karena node tidak ditunjuk oleh node manapun maka node ini adalah node yang paling depan (node kepala).
Kepala
Ekor
Single Representation
class Node { Object data; Node pointer; }
Ilustrasi : pointer data
Penjelasan: Pembuatan class bernama Node yang berisi 2 field/variabel, yaitu data bertipe Object dan pointer yang bertipe class Node. Field data : digunakan untuk menyimpan data/nilai pada linked list. Field pointer : digunakan untuk menyimpan alamat node berikutnya.
Contoh program
public class LinkedList1 { public static void main(String[] args) { Node head = new Node(); } }
Ilustrasi : pointer data
head
Contoh program
public class LinkedList1 {
Ilustrasi :
public static void main(String[] args) { null Node head = new Node(); null System.out.println(data : " + head.data); System.out.println("pointer: " + head.pointer); } } head
Output :
Contoh program
public class LinkedList1 {
Ilustrasi :
}
Output :
public static void main(String[] args) { null Node head= new Node(); A head.data = "A"; System.out.println(data : " + head.data); System.out.println("pointer: " + head.pointer); } head
Pointer Head
Untuk mengingat node yg paling depan (node kepala) digunakan sebuah pointer yang akan menyimpan alamat dari node depan. Pointer ini biasanya diberi nama head.
head
head
Pointer Tail
Untuk mengingat node yg paling belakang (node ekor) digunakan sebuah pointer yang akan menyimpan alamat dari node belakang. Pointer ini biasanya diberi nama tail.
tail
tail
Contoh
Linked list yang memiliki 4 node :
A0
A1
A2
A3
head
tail
Class Node
Constructor 1
public class Node { Object data; Node pointer; Node() { } Node(Object data) { this.data = data; } Node(Object data, Node pointer) { this.data = data; this.pointer = pointer; } }
null null
Constructor 2 null
element
Constructor 3
next
element
(1) inisialisasi
Proses ini digunakan untuk mendeklarasi sekaligus memberikan nilai awal (inisialisasi) pada pointer head dan tail. Nilai awal kedua pointer tersebut adalah NULL. Yang menandakan bahwa linked list dalam kondisi kosong (belum ada node yang terbentuk).
Node head,tail;
(2)isEmpty
Digunakan untuk mengetahui linked dalam kondisi kosong. Kondisi kosong : jika size = 0 atau jika head=tail=null.
boolean isEmpty() { return size==0; }
(3) size
Digunakan untuk mengetahui banyak node pada linked list. Size akan bertambah 1 setiap ada node baru yang ditambahkan pada linked list. Size akan berkurang 1 setiap ada penghapusan node.
int size() { return size; }
(4) Penambahan
Dibedakan menjadi : 1. Penambahan dari depan 2. Penambahan dari belakang 3. Penambahan setelah node tertentu 4. Penambahan sebelum node tertentu
Ilustrasi : addFirst(x)
Node input
a head
head
Ilustrasi : addLast(x)
Node input
c tail
d tail
Contoh program
public class TestLinkedList { public static void main(String[] args) { LinkedList1 list = new LinkedList1(); System.out.println("head : " + list.head); System.out.println("tail : " + list.tail); list.addFirst(new Node()); System.out.println("head : " + list.head); System.out.println("tail : " + list.tail); list.addFirst(new Node()); System.out.println("head : " + list.head); System.out.println("tail : " + list.tail); list.addLast(new Node()); System.out.println("head : " + list.head); System.out.println("tail : " + list.tail); } }
output
head : null tail : null head : asd.Node@42e816 tail : asd.Node@42e816 head : asd.Node@9304b1 tail : asd.Node@42e816 head : asd.Node@9304b1 tail : asd.Node@190d11
(5) Penghapusan
Dibedakan menjadi : 1. Hapus node depan 2. Hapus node belakang 3. Hapus node tertentu
a temp a temp
Hasil akhir :
a
temp
Pengaksesan
Digunakan untuk mencetak data seluruh node mulai dari yang paling depan sampai ketemu NULL.
public void print() { Node p = head; while (p != null) { System.out.println (p.data); p = p.pointer; } }
void checkIndex(int index) { if (index < 0 || index >= size) throw new IndexOutOfBoundsException ("index = " + index + " size = " + size); }
Latihan
1. Buatlah program dari 4 node berikut dengan kondisi awal linked list kosong:
100 200 300 400
Tambahkan node baru dengan data 500 dari belakang. Tambahkan node baru dengan data 50 dari depan. Tambahkan node dengan data 250 setelah node 200. Hapus node depan. Selanjutnya hapus node belakang. Selanjutnya hapus node yg memiliki data 300. Akses semua data dari seluruh node tersebut dari node yg paling depan ke belakang.
Latihan
2. Buatlah method untuk mengakses semua data pada single linked list. 3. Buatlah method untuk replace data pada single linked list. Gunakan pengaksesan index pada node.
Sumber
Arna Fariza, Algoritma Struktur Data : Double Linked List, PENS-ITS, Surabaya
54