laporan modul 2

32
PRAKTIKUM ASD (JAVA) MODUL KE-2 SINGLE LINKED LIST, DOUBLE LINKED LIST dan CIRCULAR LINK LIST Nama : Fauzan Ishlakhuddin NIM : 201110370311060 Kelas : IT 3I LABORATORIUM PEMROGRAMAN PROGRAM STUDI TEKNIK INFORMATIKA FAKULTAS TEKNIK UNIVERSITAS MUHAMMADIYAH MALANG 2012

Upload: ozan-hacker

Post on 28-Apr-2015

200 views

Category:

Documents


19 download

DESCRIPTION

Laporan LAB

TRANSCRIPT

Page 1: Laporan Modul 2

PRAKTIKUM ASD (JAVA)

MODUL KE-2

SINGLE LINKED LIST, DOUBLE LINKED LIST dan CIRCULAR

LINK LIST

Nama : Fauzan Ishlakhuddin

NIM : 201110370311060

Kelas : IT 3I

LABORATORIUM PEMROGRAMAN

PROGRAM STUDI TEKNIK INFORMATIKA

FAKULTAS TEKNIK

UNIVERSITAS MUHAMMADIYAH MALANG

2012

Page 2: Laporan Modul 2

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 :

Page 3: Laporan Modul 2

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.

Page 4: Laporan Modul 2

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

Page 5: Laporan Modul 2
Page 6: Laporan Modul 2

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

Page 7: Laporan Modul 2

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

Page 8: Laporan Modul 2
Page 9: Laporan Modul 2

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 tengah-

tengah node, maka program akan berhasil dengan output

Page 10: Laporan Modul 2

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;

}

Page 11: Laporan Modul 2

}

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();

Page 12: Laporan Modul 2

//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

Page 13: Laporan Modul 2

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 location: " +

second);

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 all

list.clear();

if (list.isEmpty())

{

System.out.println("Linked list is empty");

}

else

{

System.out.println( "Linked list size: " + size);

}

}

}

Page 14: Laporan Modul 2

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 prosedur-

prosedur 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:

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

1 3 7 9 8 4

null

Page 15: Laporan Modul 2

VIII. HASIL PRAKTIKUM

Class Node Utama

Nomer 1

A. Source Code

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;

}

}

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) {

Node inp = new Node();

Page 16: Laporan Modul 2

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;

size--;

Page 17: Laporan Modul 2

} 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...!!");

}

}

Page 18: Laporan Modul 2

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

} 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());

}

}

Page 19: Laporan Modul 2

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++;

}

}

Page 20: Laporan Modul 2

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

}

}

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());

}

}

Page 21: Laporan Modul 2

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++;

}

}

Page 22: Laporan Modul 2

}

}

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;

}

if (temp == tail && temp.data.equals(key)) {

Page 23: Laporan Modul 2

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());

}

}

Page 24: Laporan Modul 2

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;

new_n.next = head;

Page 25: Laporan Modul 2

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;

}

Page 26: Laporan Modul 2

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();

Page 27: Laporan Modul 2

B. Gambar Output

C. Analisis Program

1. Membuat variable referral dari DLLC (Double Link List Circular)

2. 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. Melakukan 3 penghapusan data DLLC, removeFirst, removeLast dan removeKey

5. Mencari alamat dari sebuah data yang ada pada DLLC dan mencetak alamatnya

6. 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;

} else {

d.removeFirst();

d.removeLast();

d.removeKey(30);

d.findObject(40);

d.print("Double Cicular List");

}

}

Page 28: Laporan Modul 2

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);

temp = temp.next;

Page 29: Laporan Modul 2

B. Gambar Output

C. Analisis Program

1. Membuat variable referral dari DLLC2

2. 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. Mencetak ke layar data DLLC2 dari head hingga data sebelum head

6. Mencetak banyak node yang ada pada DLLC2

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());

}

}

Page 30: Laporan Modul 2

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) {

Node temp = head;

Page 31: Laporan Modul 2

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());

}

}

Page 32: Laporan Modul 2

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.