Upload
ozan-hacker
View
201
Download
19
Embed Size (px)
DESCRIPTION
Laporan LAB
Citation preview
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
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 tengah-
tengah 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 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);
}
}
}
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
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();
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--;
} 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...!!");
}
}
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());
}
}
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++;
}
}
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());
}
}
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;
}
if (temp == tail && temp.data.equals(key)) {
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;
new_n.next = head;
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();
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");
}
}
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;
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());
}
}
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;
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.