Anda di halaman 1dari 32

PRAKTIKUM ASD (JAVA) MODUL KE-2

SINGLE LINKED LIST, DOUBLE LINKED LIST dan CIRCULAR LINK LIST

Nama NIM Kelas

: Fauzan Ishlakhuddin : 201110370311060 : IT 3I

LABORATORIUM PEMROGRAMAN PROGRAM STUDI TEKNIK INFORMATIKA FAKULTAS TEKNIK UNIVERSITAS MUHAMMADIYAH MALANG 2012

I.

TUJUAN
Mahasiswa mampu : 1. Memahami garis besar dari konsep array dan linked list. 2. Mengetahui perbedaan antara array dan linked list. 3. Mengimplementasikan array dan linked list kedalam program.

II. ALAT YANG DIGUNAKAN


Peralatan yang digunakan : 1. Perangkat PC yang terinstall Java 2. Editor Java

III. DASAR TEORI LINKED LIST


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 dibedakan menjadi 2 : Single linked list Double linked list

SINGLE LINKED LIST


Single : artinya pointer-nya hanya satu buah dan satu arah, yaitu menunjuk ke node berikutnya. Node terakhir akan menunjuk ke NULL yang akan digunakan sebagai kondisi berhenti pada saat pembacaan isi linked list. ilustrasi single linked list yang memiliki 4 node :

SINGLE CIRCULAR LINKED LIST


Single Linked List yang pointer next-nya menunjuk ke dirinya sendiri Jika terdiri dari beberapa node maka pointer terakhirnya akan menunjuk ke pointer terdepannya.

DOUBLE LINKED LIST


Double : artinya field pointer-nya dua buah dan dua arah, yang menunjuk ke node sebelum dan sesudahnya. Berguna bila perlu melakukan pembacaan linkedlist dari dua arah. Double linked list memiliki 2 buah pointer yaitu pointer next dan prev. Pointer next : mengarah ke node belakang (tail). Pointer prev : mengarah ke node depan (head). Ketika masih ada satu node maka kedua pointer (next dan prev) akan menunjuk ke NULL) Double linked list dapat diakses dari dua arah : o Dari depan ke belakang (head ke tail) o Dari belakang ke depan (tail ke head)

DOUBLE CIRCULAR LINKED LIST


Double Linked List yang pointer next dan prev-nya menunjuk ke dirinya sendiri secara circular.

IV. PROSEDUR PELAKSANAAN


Prosedur pelaksanaan praktikum adalah sebagai berikut : 1. Mahasiswa mencoba PERCOBAAN yang ada pada modul praktikum 2. Hasil PERCOBAAN ditulis di kertas dan dikumpulkan pada akhir praktikum (tulis tangan). 3. Mahasiswa mengerjakan TUGAS PRAKTIKUM yang diberikan (pilih salah satu dengan syarat setiap anggota dalam 1 kelompok tidak boleh ada yang sama) 4. Mahasiswa membuat laporan dari TUGAS PRAKTIKUM yang telah dikerjakan (dilengkapi dengan Hasil, analisa dan kesimpulan). Hasil dari TUGAS PRAKTIKUM merupakan printscreen dari hasil ujicoba program. 5. Kirim laporan melalui http://infotech.umm.ac.id, paling lambat 1 minggu setelah praktikum 6. Mahasiswa mendemonstrasikan program tugas praktikum yang telah dikerjakan pada minggu berikutnya 7. Asisten/dosen menilai pekerjaan mahasiswa

V. PERCOBAAN A. Single Link List


1. Buatlah class Node seperti dibawah ini : (untuk nama package bebas)

2. Buatlah class SingleList, dengan package yang sama dengan class Node

Kemudian Buatlah Main pada class SingleList, yang didalamnya berisi perintah untuk pemanggilan fungsi addFirst dan addLast, sesuaikan agar didapat output seperti di bawah ini : (jawaban ditulis di kertas dan kumpulkan pada akhir praktikum) Hasil Output :

3.Buatlah fungsi removeFirst pada class SingleList seperti dibawah ini

Dengan data yang sama sebelumnya, yaitu 70 60 50 10, Buatlah Main pada class SingleList, yang didalamnya berisi perintah untuk pemanggilan fungsi removeFirst dan removeLast, sesuaikan agar didapat output seperti di bawah ini : (jawaban ditulis di kertas dan kumpulkan pada akhir praktikum)

B. Double Link List


1. Buatlah class Node berikut : (untuk nama package bebas)

2. Buatlah class DoubleList berikut: Nama package sama dengan class Node

Hasil Output : 300 200 100 400 3. Tambahkan fungsi insertAfter (Object o, Object key) pada klas DoubleList seperti di bawah ini , lalu panggil fungsi tersebut pada main.

Ketika kita panggil fungsi insertAfter dengan masukan key 200 yang berada di tengahtengah node, maka program akan berhasil dengan output

Ketika kita panggil fungsi insertAfter dengan masukan key 300 yang berada pada posisi awal node, maka program akan berhasil dengan output

Ketika kita panggil fungsi insertAfter dengan masukan key 400 yang berada pada posisi akhir node, maka program akan eror, mengapa ? lakukan analisa dan tulis analisa dikertas, dan kumpulkan di akhir praktikum.

C. Double Link List Circular


Jalankan program dibawah ini :
class Node { Object data; Node next; Node prev; } public class DoubleCircularList { Node head; public DoubleCircularList() { head = null; } public boolean IsEmpty() { return (head==null); } public Object GetFirst() { return head.data; } public boolean IsNotEmpty() { return (head!=null); } public void InsertLast(Object o) { Node new_n = new Node(); new_n.data = o; if (IsEmpty()) { // List Masih kosong head=new_n; new_n.next=head; new_n.prev=head; } else { // List tak kosong new_n.next=head; new_n.prev=head.prev; head.prev.next=new_n; head.prev=new_n; }

} public void InsertFirst(Object o) { InsertLast(o); head=head.prev; } public void print(String str) { System.out.println(str); Node n = head; if (IsNotEmpty()) { Do { System.out.println(n.data); n = n.next; } while (n != head); } else { System.out.println("List Kosong"); } } public static void main( String [ ] args ) { DoubleCircularList dcl=new DoubleCircularList(); dcl.InsertFirst(10); dcl.InsertFirst(20); dcl.print("Double Cicular List"); } }

Tulislah hasil keluaran program tersebut dan beri penjelasan ! D. Library Link List dalam Java
import java.util.*; public class LinkedListExample { public static void main(String[] args) { System.out.println("Linked List Example!"); LinkedList <Integer>list = new LinkedList<Integer>(); int num1 = 11, num2 = 22, num3 = 33, num4 = 44; int size; Iterator iterator; //Adding data in the list list.add(num1); list.add(num2); list.add(num3); list.add(num4); size = list.size(); System.out.print( "Linked list data: "); //Create a iterator iterator = list.iterator(); while (iterator.hasNext()) { System.out.print(iterator.next()+" "); } System.out.println();

//Check list empty or not if (list.isEmpty()) { System.out.println("Linked list is empty"); } else { System.out.println( "Linked list size: " + size); } System.out.println("Adding data at 1st location: 55"); //Adding first list.addFirst(55); System.out.print("Now the list contain: "); iterator = list.iterator(); while (iterator.hasNext()) { System.out.print(iterator.next()+" "); } System.out.println(); System.out.println("Now the size of list: " + list.size()); System.out.println("Adding data at last location: 66"); //Adding last or append list.addLast(66); System.out.print("Now the list contain: "); iterator = list.iterator(); while (iterator.hasNext()) { System.out.print(iterator.next()+" "); } System.out.println(); System.out.println("Now the size of list: " + list.size()); System.out.println("Adding data at 3rd location: 99"); //Adding data at 3rd position list.add(2,99); System.out.print("Now the list contain: "); iterator = list.iterator(); while (iterator.hasNext()) { System.out.print(iterator.next()+" "); } System.out.println(); System.out.println("Now the size of list: " + list.size()); //Retrieve first data System.out.println("First data: " + list.getFirst()); //Retrieve lst data System.out.println("Last data: " + list.getLast()); //Retrieve specific data System.out.println("Data at 4th position: " + list.get(3)); //Remove first int first = list.removeFirst(); System.out.println("Data removed from 1st location: " +first); System.out.print("Now the list contain: "); iterator = list.iterator(); //After removing data while (iterator.hasNext()) { System.out.print(iterator.next()+" "); } System.out.println(); System.out.println("Now the size of list: " + list.size()); //Remove last

int last = list.removeLast(); System.out.println("Data removed from last location: " +last); System.out.print("Now the list contain: "); iterator = list.iterator(); //After removing data while (iterator.hasNext()) { System.out.print(iterator.next()+" "); } System.out.println(); System.out.println("Now the size of list: " + list.size()); //Remove 2nd data int second = list.remove(1); System.out.println("Data removed from 2nd second); System.out.print("Now the list contain: "); iterator = list.iterator();

location:

"

//After removing data while (iterator.hasNext()) { System.out.print(iterator.next()+" "); } System.out.println(); System.out.println("Now the size of list: " + list.size()); //Remove all list.clear(); if (list.isEmpty()) { System.out.println("Linked list is empty"); } else { System.out.println( "Linked list size: " + size); } } }

VII. TUGAS PRAKTIKUM


1. Lengkapilah percobaan A (Single Link List) dengan menambah prosedur prosedur untuk : insertAfterKey insertBeforeKey removeKey 2. Perhatikan percobaan B (Double Link List) Perbaiki fungsi insertAfter tanpa mengubah parameter sampai fungsi tersebut bisa digunakan untuk 3 kondisi yaitu ketika key di awal, di tengah, dan di akhir Node. 3. Lengkapilah program latihan 2 (Double Linked List) dengan menambahkan prosedurprosedur untuk: insertBeforeKey (Object o , Object key) parameter harus sesuai dan fungsi tersebut harus bisa menyelesaikan tiga kondisi, yaitu saat key di awal node, ditengah node, maupun di akhir node. removeFirst removeLast removeNode fungsi ini harus bisa menghapus data dengan key, baik saat key di awal node, di tengah node, maupun di akhir node 4. Lengkapilah program latihan 3 (Double Linked List Circular) dengan menambahkan: Prosedur untuk menghapus elemen pertama dari DLLC (deleteFirst) Prosedur untuk menghapus elemen tertentu dari DLLC (deleteNode) Prosedur untuk menghapus elemen terakhir dari DLLC (deleteLast) Prosedur FindNode(Object o) yang berguna untuk mendapatkan node yang memiliki elemen o insertAfter insertBefore 5. Misalkan inisilaisasi node pada DLLC dinyatakan sebagai berikut:
class Node { int data; Node next; Node prev; }

Dan data yang ada pada list:


1 3 7 9 4 8

Ketentuan: Ketika data diinputkan, akan secara otomatis tersusun berurutan dan data ganjil berada di baris depan seperti ilustrasi di atas. Tugas: Gambarkan ilustrasi penambahan node baru dengan data=2 ! Buatlah program untuk prosedur input data dengan ketentuan seperti di atas ! 6. Modifikasilah percobaan A (Single Linked List) dengan class node seperti berikut:
class Node { int nim; String nama, jurusan; Node next; public Node (int txt1, String txt2, String txt3) { nim=txt1; nama=txt2; jurusan=txt3; next=null; } }

Ilustrasi node:

NIK

NAMA

GOL

null

VIII. HASIL PRAKTIKUM


Class Node Utama package TugasLAB2; public class Node { Object data; Node next; Node prev; int NIM, dat; String nama, jurusan; Node(){ } Node (Object Data){ this.data = Data; } Node (int nim, String nam, String jur){ this.NIM = nim; this.nama = nam; this.jurusan = jur; } } Nomer 1 A. Source Code package TugasLAB2; public class SingleLinkList { Node tail, head; int size; public void inisialisasi() { head = tail = null; } public boolean isEmpty() { return size == 0; } public int size() { return size; } public void addFirst(Object i) { Node inp = new Node(); inp.data = i; if (isEmpty()) { head = tail = inp; } else { inp.next = head; head = inp; } size++; } public void addLast(Object i) {

public void addLast(Object i) { Node inp = new Node(); inp.data = i; if (isEmpty()) { head = tail = inp; } else { tail.next = inp; tail = inp; } size++; } public void insertAfterKey(Object key, Object a) { Node temp = head; Node inp = new Node(); inp.data = a; if (isEmpty()) { head = tail = inp; } else { while (!temp.data.equals(key)) { temp = temp.next; } if (temp == tail && temp.data.equals(key)) { addLast(a); } else { inp.next = temp.next; temp.next = inp; size++; } } } public void insertBeforeKey(Object key, Object a) { Node temp = head; Node inp = new Node(); inp.data = a; if (isEmpty()) { head = tail = inp; } else { if (temp == head && temp.data.equals(key)) { addFirst(a); } else { while (!temp.next.data.equals(key)) { temp = temp.next; } inp.next = temp.next; temp.next = inp; size++; } } } public void removeFirst() { Node temp = head; if (!isEmpty()) { if (head == tail) { head = tail = null; temp = null; size--; } else { head = temp.next; temp = null;

} else { head = temp.next; temp = null; size--; } } else { System.out.println("Abis dah...!!"); } } public void removeLast() { Node temp = head; if (!isEmpty()) { if (head == tail) { head = tail = null; temp = null; size--; } else { while (temp.next != tail) { temp = temp.next; } temp.next = null; tail = temp; temp = null; size--; } } else { System.out.println("Abis dah...!!"); } } public void removeKey(Object key) { Node temp = head; if (!isEmpty()) { if (temp == head && temp.data.equals(key)) { removeFirst(); } else { while (!temp.next.data.equals(key)) { temp = temp.next; } if (temp.next == tail && temp.next.data.equals(key)) { removeLast(); } else { temp.next = temp.next.next; temp = null; size--; } } } else { System.out.println("Abis dah...!!"); } } public void print(String t) { System.out.println(t); Node temp = head; if (!isEmpty()) { while (temp != null) { System.out.println(temp.data); temp = temp.next; } } else { System.out.println("Datane ga' ono...!!"); }

} else { System.out.println("Datane ga' ono...!!"); } } public static void main(String[] args) { SingleLinkList a = new SingleLinkList(); a.addFirst(200); a.addFirst(100); a.addLast(300); a.addLast(400); a.insertAfterKey(200, 250); a.insertAfterKey(400, 450); a.insertBeforeKey(400, 350); a.insertBeforeKey(100, 50); a.print("Sebelum di hapus"); System.out.println("Panjang single list "+a.size()); a.removeFirst(); a.removeLast(); a.removeKey(300); a.print("Setelah di hapus"); System.out.println("Panjang single list "+a.size()); } } B. Gambar Output

C. Analisis Program 1. Membuat variable referral dari class SingleLinkList 2. Melakukan beberapa proses penambahan data, dengan tambah awal, akhir dan tengah 3. Program menampilkan data dari SingleLinkList di mulai dari head sampai tail 4. Menampilkan panjang SingleLinkList 5. Melakukan beberapa proses penghapusan 6. Menampilkan data dari SingleLinkList setelah penghapusan 7. Menampilkan panjang SingleLinkList

Nomer 2 A. Source Code package TugasLAB2; public class DoubleLinkList { Node head, tail; int size; public boolean isEmpty() { return size == 0; } public int size() { return size; } public void addFirst(Object i) { Node inp = new Node(); inp.data = i; if (isEmpty()) { head = tail = inp; } else { inp.next = head; head.prev = inp; head = inp; } size++; } public void addLast(Object i) { Node inp = new Node(); inp.data = i; if (isEmpty()) { head = tail = inp; } else { inp.prev = tail; tail.next = inp; tail = inp; } size++; } public void insertAfterKey(Object key, Object a) { Node temp = head; Node inp = new Node(); inp.data = a; while (!temp.data.equals(key)) { temp = temp.next; } if (temp == tail && temp.data.equals(key)) { this.addLast(a); } else { inp.next = temp; inp.next = temp.next; temp.next.prev = inp; temp.next = inp; size++; } }

} } public void print(String t) { System.out.println(t); Node temp = head; if (!isEmpty()) { while (temp != null) { System.out.println(temp.data); temp = temp.next; } } else { System.out.println("Datane ga` ono...!!"); } } public static void main(String[] args) { DoubleLinkList a = new DoubleLinkList(); a.addFirst(200); a.addFirst(100); a.addLast(300); a.addLast(400); a.insertAfterKey(100, 150); a.insertAfterKey(400, 450); a.insertAfterKey(200, 250); a.insertAfterKey(300, 350); a.print("Ini datanya..."); System.out.println("Panjang Double Linked List " + a.size()); } } B. Gambar Output

C. Analisis Program 1. Membuat variable referral dari DoubleLinkList 2. Menambahkan beberapa data pada DoubleLinkList menggunakan addFirst, addLast dan insertAfterKey 3. Mencetak data dari DoubleLinkList di mulai dari head hingga tail 4. Mencetak panjang dari DoubleLinkList

Nomer 3 A. Source Code package TugasLAB2; public class DoubleLinkList { Node head, tail; int size; public boolean isEmpty() { return size == 0; } public int size() { return size; } public void addFirst(Object i) { Node inp = new Node(); inp.data = i; if (isEmpty()) { head = tail = inp; } else { inp.next = head; head.prev = inp; head = inp; } size++; } public void addLast(Object i) { Node inp = new Node(); inp.data = i; if (isEmpty()) { head = tail = inp; } else { inp.prev = tail; tail.next = inp; tail = inp; } size++; } public void insertAfterKey(Object key, Object a) { Node temp = head; Node inp = new Node(); inp.data = a; while (!temp.data.equals(key)) { temp = temp.next; } if (temp == tail && temp.data.equals(key)) { this.addLast(a); } else { inp.next = temp; inp.next = temp.next; temp.next.prev = inp; temp.next = inp; size++; } }

} } public void insertBeforeKey(Object key, Object a) { Node temp = head; Node inp = new Node(); inp.data = a; while (!temp.data.equals(key)) { temp = temp.next; } if (temp == head && temp.data == key) { this.addFirst(a); } else { inp.next = temp; inp.prev = temp.next; temp.prev.next = inp; temp.prev = inp; size++; } } public void removeFirst() { if (isEmpty()) { System.out.println("Abis dah...!!"); } else { if (head == tail) { head = tail = null; size--; } else { head = head.next; head.prev = null; size--; } } } public void removeLast() { if (isEmpty()) { System.out.println("Abis dah...!!"); } else { if (head == tail) { head = tail = null; size--; } else { tail = tail.prev; tail.next = null; size--; } } } public void removeKey(Object key) { Node temp = head; if (isEmpty()) { System.out.println("Abis rek datane...!!"); } else { if (temp == head && temp.data.equals(key)) { removeFirst(); } else { while (!temp.data.equals(key)) { temp = temp.next; }

temp = temp.next; } if (temp == tail && temp.data.equals(key)) { removeLast(); } else { temp.prev.next = temp.next; temp.next.prev = temp.prev; temp = null; size--; } } } } public void print(String t) { System.out.println(t); Node temp = head; if (!isEmpty()) { while (temp != null) { System.out.println(temp.data); temp = temp.next; } } else { System.out.println("Datane ga` ono...!!"); } } public static void main(String[] args) { DoubleLinkList a = new DoubleLinkList(); a.addFirst(200); a.addFirst(100); a.addLast(300); a.addLast(400); a.insertAfterKey(100, 150); a.insertAfterKey(400, 450); a.insertBeforeKey(100, 250); a.insertBeforeKey(400, 350); a.print("Ini datanya"); System.out.println("Panjang Double Linked List " + a.size()); a.removeFirst(); a.removeLast(); a.removeKey(300); a.print("Ini datanya"); System.out.println("Panjang Double Linked List " + a.size()); } }

B. Gambar Output

C. Analisis Program 1. Membuat variable referral dari DoubleLinkList 2. Menambahkan beberapa data pada DoubleLinkList menggunakan addFirst, addLast, insertAfterKey dan insertBeforeKey 3. Mencetak data dari DoubleLinkList di mulai dari head hingga tail 4. Mencetak panjang dari DoubleLinkList 5. Melakukan 3 penghapusan, removeFirst, removeLast dan removeKey 6. Mencetak kembali data DoubleLinkList ke layar

Nomer 4 A. Source Code package TugasLAB2; public class DLLC { Node head; public DLLC() { head = null; } public boolean IsEmpty() { return (head == null); } public Object GetFirst() { return head.data; } public boolean IsNotEmpty() { return (head != null); } public void InsertLast(Object o) { Node new_n = new Node(); new_n.data = o; if (IsEmpty()) { // List Masih kosong head = new_n;

if (IsEmpty()) { head = new_n; new_n.next = head; new_n.prev = head; } else { new_n.next = head; new_n.prev = head.prev; head.prev.next = new_n; head.prev = new_n; } } public void InsertFirst(Object o) { InsertLast(o); head = head.prev; } public void print(String str) { System.out.println(str); Node n = head; if (IsNotEmpty()) { do { System.out.println(n.data); n = n.next; } while (n != head); } else { System.out.println("List Kosong"); } } public void insertAfter(Object key, Object i) { Node temp = head; Node inp = new Node(); inp.data = i; while (!temp.data.equals(key)) { temp = temp.next; } if (temp.next == head && temp.next.data.equals(key)) { InsertLast(i); } else { inp.next = temp.next; inp.prev = temp; temp.next.prev = inp; temp.next = inp; } } public void insertBefore(Object key, Object i) { Node temp = head; Node inp = new Node(); inp.data = i; while (!temp.data.equals(key)) { temp = temp.next; } if (temp == head && temp.data.equals(key)) { InsertFirst(i); } else { inp.next = temp; inp.prev = temp.prev; inp.prev.next = inp; temp.prev = inp; }

temp.prev = inp; } } public void findObject(Object key) { Node temp = head; while (!temp.data.equals(key)) { temp = temp.next; } System.out.println("Data " + key + " di " + temp); } public void removeFirst() { if (IsEmpty()) { System.out.println("Abis dah...!!"); } else { head = head.next; head.prev = head.prev.prev; head.prev.next = head; } } public void removeLast() { Node temp = head; if (IsEmpty()) { System.out.println("Abis dah...!!"); } else { while (temp.next != head) { temp = temp.next; } temp.prev.next = head; head.prev = temp.prev; } } public void removeKey(Object key) { Node temp = head; if (IsEmpty()) { System.out.println("Abis dah...!!"); } else { while (!temp.data.equals(key)) { temp = temp.next; } temp.prev.next = temp.next; temp.next.prev = temp.prev; } } public static void main(String[] args) { DLLC d = new DLLC(); d.InsertFirst(20); d.InsertFirst(10); d.InsertLast(30); d.InsertLast(40); d.insertAfter(40, 50); d.insertAfter(10, 15); d.insertBefore(10, 5); d.insertBefore(50, 45); d.print("Double Cicular List"); d.removeFirst(); d.removeLast();

d.removeFirst(); d.removeLast(); d.removeKey(30); d.findObject(40); d.print("Double Cicular List"); } } B. Gambar Output

C. Analisis Program 1. 2. Membuat variable referral dari DLLC (Double Link List Circular) Melakukan beberapa penambahan pada DLLC mulai dari insertFirst, insertLast, insertBefore dan insertAfter 3. Mencetak ke layar data DLLC mulai dari head hingga data sebelum head, karena DLLC tidak mempunyai tail (cincin / lingkaran) 4. 5. 6. Melakukan 3 penghapusan data DLLC, removeFirst, removeLast dan removeKey Mencari alamat dari sebuah data yang ada pada DLLC dan mencetak alamatnya Mencetak kembali data DLLC setelah proses penghapusan

Nomer 5 A. Source Code package TugasLAB2; public class DLLC2 { Node head; int size; public boolean IsEmpty() { return (head == null); } public void insertData(int d) { Node baru = new Node(); baru.dat = d; if (IsEmpty()) { head = baru; baru.next = head; baru.prev = head;

baru.next = head; baru.prev = head; } else { Node temp = head; if (d % 2 == 1) { while (d > temp.dat && temp.dat % 2 == 1 && temp.next != head && temp.next.dat % 2 != 0) { temp = temp.next; } if (temp == head && d < temp.dat) { baru.next = head; baru.prev = head.prev; head.prev.next = baru; head.prev = baru; head = head.prev; temp = null; } else if ((temp.next.dat % 2 == 0 || temp.next == head) && d > temp.dat) { baru.prev = temp; baru.next = temp.next; temp.next.prev = baru; temp.next = baru; temp = null; } else { baru.next = temp; baru.prev = temp.prev; temp.prev.next = baru; temp.prev = baru; temp = null; } } else { while ((temp.dat % 2 == 1 && temp.next != head) || (d > temp.dat && temp.dat % 2 == 0 && temp.next != head)) { temp = temp.next; } if (temp == head && d < temp.dat) { baru.next = head; baru.prev = head.prev; head.prev.next = baru; head.prev = baru; head = head.prev; temp = null; } else if ((temp.next == head && d > temp.dat) || temp.dat % 2 == 1) { baru.prev = temp; baru.next = temp.next; temp.next.prev = baru; temp.next = baru; temp = null; } else { baru.next = temp; baru.prev = temp.prev; temp.prev.next = baru; temp.prev = baru; temp = null; } } } size++; } public void print(String t) { System.out.println(t); Node temp = head; for (int a = 0; a < size; a++) { System.out.println(temp.dat);

for (int a = 0; a < size; a++) { System.out.println(temp.dat); temp = temp.next; } } public static void main(String[] args) { DLLC2 a = new DLLC2(); a.insertData(2); a.insertData(6); a.insertData(1); a.insertData(3); a.insertData(4); a.insertData(9); a.insertData(7); a.insertData(5); a.insertData(8); a.insertData(10); a.insertData(11); a.insertData(0); a.print("Ini datanya..."); System.out.println("Banyak data pada DLLC2 "+a.size()); } } B. Gambar Output

C. Analisis Program 1. 2. Membuat variable referral dari DLLC2 Melakukan penambahan data melalui fungsi insertData yang dapat melakukan penambahan didepan, belakang dan tengah 3. Pada fungsi insertData, data yang di masukkan di modulus 2 untuk menentukan ganjil dan genapnya (sisa 1 = ganjil, sisa 0 = genap) 4. Kemudian di lakukan perulangan untuk penempatan temp, dari temp tersebut maka akan menuntukan tempat input yang baru 5. 6. Mencetak ke layar data DLLC2 dari head hingga data sebelum head Mencetak banyak node yang ada pada DLLC2

Nomer 6 A. Source Code package TugasLAB2; public class mahasiswa { static int size; static Node tail; static Node head; static boolean isEmpty() { return size == 0; } static int size() { return size; } static void addFirst(int i, String t, String z) { Node inp = new Node(i, t, z); if (isEmpty()) { head = tail = inp; } else { inp.next = head; head = inp; } size++; } static void addLast(int i, String t, String z) { Node inp = new Node(i, t, z); if (isEmpty()) { head = tail = inp; } else { tail.next = inp; tail = inp; } size++; } static void insertAfterKey(int key, int i, String t, String z) { Node temp = head; Node inp = new Node(i, t, z); if (isEmpty()) { head = tail = inp; } else { while (temp.NIM != key) { temp = temp.next; } if (temp == tail && temp.NIM == key) { addLast(i, t, z); } else { inp.next = temp.next; temp.next = inp; size++; } } } static void insertBeforeKey(int key, int i, String t, String z) {

static void insertBeforeKey(int key, int i, String t, String z) { Node temp = head; Node inp = new Node(i, t, z); if (isEmpty()) { head = tail = inp; } else { if (temp == head && temp.NIM == key) { addFirst(i, t, z); } else { while (temp.next.NIM != key) { temp = temp.next; } inp.next = temp.next; temp.next = inp; size++; } } } static void print() { Node temp = head; if (!isEmpty()) { while (temp != null) { System.out.println("NIM\t: " + temp.NIM); System.out.println("Nama\t: " + temp.nama); System.out.println("Jurusan\t: " + temp.jurusan); System.out.println(); temp = temp.next; } } else { System.out.println("Datane ga' ada...!!"); } } public static void main(String[] args) { addFirst(60, "Ozan", "IT"); addFirst(59, "Ade", "IT"); addLast(123, "Bagus", "IT"); insertAfterKey(60, 70, "Fulan", "IT"); insertAfterKey(123, 130, "Fulan2", "IT"); insertBeforeKey(59, 50, "Alus", "IT"); insertBeforeKey(130, 124, "Fulan3", "IT"); print(); System.out.println("Banyak data "+size()); } }

B. Gambar Output

C. Analisis Program 1. Semua fungsi yang ada pada class mahasiswa menggunakan static sehingga tidak memerlukan variable referral 2. Melakukan penambahan data baru dengan constructor pada class Node yang memiliki 3 parameter Node (int NIM, String nama, String jurusan) 3. Mencetak ke layar data dari class mahasiswa 4. Mencetak banyaknya data pada class mahasiswa

IX.

KESIMPULAN
Untuk SingleLinkList lebih simple karena kita hanya menentukan untuk 1 pointer saja (next), sedangkan pada DoubleLinkList kita harus mengatur 2 pointer (next dan prev) akan tetapi dengan adanya pointer prev maka memudahkan kita mengetahui node sebelum node tertentu tanpa harus meletakkan temp pada node sebelumnya, ini berlaku pada fungsi insertBeforeKey.