42
Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ] Pengampu : Ilyas Nuryasin S.Kom Nur Hayatin, SST Nama: 201410370311127 Akhmad Zulfikar Al Ghivani Laporan Praktikum Algoritma & Struktur Data Modul 2 SINGLE LINKED LIST & DOUBLE LINKED LLIST Daftar Isi : 1. Deskripsi Praktikum 2. Perangkat Lunak 3. Teori Penunjang 4. Prosedur Pelaksanaan 5. Implementasi dan Hasil Praktikum 6. Kesimpulan

201410370311127_Modul2

Embed Size (px)

DESCRIPTION

ASD Semester 3 JavaDosen Pengampu : Ilyas NuryasinNur Hayatin

Citation preview

Page 1: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

Pengampu :

Ilyas Nuryasin S.Kom

Nur Hayatin, SST

Nama:

201410370311127 Akhmad Zulfikar Al

Ghivani

Laporan Praktikum Algoritma &

Struktur Data

Modul 2

SINGLE LINKED LIST & DOUBLE

LINKED LLIST

Daftar Isi :

1. Deskripsi Praktikum

2. Perangkat Lunak

3. Teori Penunjang

4. Prosedur Pelaksanaan

5. Implementasi dan Hasil Praktikum

6. Kesimpulan

Page 2: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

Daftar Isi

Deskripsi Praktikum ............................................................................................................... 3

Perangkat Lunak .................................................................................................................... 3

Teori Penunjang ...................................................................................................................... 3

Prosedur Pelaksanaan ............................................................................................................ 5

Implementasi dan Hasil Praktikum ...................................................................................... 7

Kesimpulan ............................................................................................................................ 42

Page 3: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

1. Deskripsi Praktikum

Mengerti bagaimana model penyimpana data menggunakan struktur data single

dan double linked list

Memahami model pengaksesan elemen dalam struktur data linked list

Mengerti dan menggunakan metode-metode standar di kelas LinkedList

2. Perangkat Lunak

Peralatan yang digunkan :

Perangkat PC yang terinstal Java

Editor Java (NetBeans IDE 8.0.2)

3. Teori Penunjang

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 1 adalah Data , digunakan untuk menyimpan data / nilai

Field 2 adalah pointer, untuk menyimpan alamat tertentu.

Linked list dibedakan menjadi 2 :

Page 4: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

SINGLE LINKED LIST

Single : artinya pointernya 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 pointernya dua buah dan dua arah, yang menunjuk ke node

sebelum dan sesudah

Berguna bila perlu melakukan pembacaan linkedlist dari dua arah

Double Linkedlist memiliki 2 buah pointer yaitu pointer next dan prev.

Pointer next : mengarah ke node belakang (tail)

Poiner prev : mengarah ke node depan (head),

Ketika masih ada satu node maka kedua pointer akan menunjuk ke NULL

Double linked list dapat diakses dari dua arah :

- Dari depan ke belakang (head ke tail )

- Dari belakang ke depan (tail ke head)

Page 5: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

DOUBLE CIRCULAR LINKED LIST

Double linked list yang pointer next nya dan prec nya menunjuk ke dirinya sendiri

secara circular

4. Prosedur Pelaksanaan

Prosedur pelaksaan praktikm adalah sebagai berikut :

1. Mahasiswa mengerjakan tugas yang diberikan

2. Mahasiswa mendemonstrasikan program yang telah dikerjakan pada dosen/

asisten

3. Mahasiswa membuat laporan dari tugas yang telah dikerjakan

SOAL :

1. Lengkapilah percobaan A (single linked list ) dengan menambah prosedur-

prosedur untuk

insertAfterKey

insertBeforeKey

removeKey

Page 6: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

2. 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 aal

node, di tengah node, maupun di akhir node

removeFirst

removeLast

removeNodefungsi ini harus bisa menghapus data dengan key , baik

saat key di awal node, ditengah node , maupun di akhir node.

3. Buatlah program dan untuk mengakses semua data pada double linkedlist yang

memiliki dua pilihan tampilan :

Contoh tampilan :

Program Pengaksesan isi Node

Isi linked list : 1 2 3 4 5

1. Akses dari depan

2. Akses dari belakang

4. Modifikasi method penyisipan yang ada . Buatlah program dan untuk

melakukan replace data pada node tertentu dengan menggunakan double

linked list

Contoh :

Replace (1,”A”);

5. (*Maaf yang ini Saya BELUM BISA mengerjakan, tapi saya akan

mencantumkan Source code nya) Buatlah program dan flowchart untuk

membalikkan sebuah kalimat dengan menggunakan double linked list.

Gunakan method yang ada pada class String untuk mendapatkan tiap karakter

dari kalimat tersebut agara dapat disimpan pada node satu per-satu.

6. Buatlah program untuk membuat single circular linked list. Single linked list

adalah single linked list dimana pointer dari node yang paling belakang tidak

menunjuk ke null tetapi menunjuk ke node yang paling depan.

Page 7: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

5. Implementasi dan Hasil Praktikum

1. Syntax (SINGLE LINKED LIST) :: Ada 3 class (node, SingleList,

SingleLinkedlist)

/*

* To change this license header, choose License Headers in

Project Properties.

* To change this template file, choose Tools | Templates

* and open the template in the editor.

*/

package modul2latihan1;

/**

*

* @author ASUS

*/

public class Node {

/**

* @param args the command line arguments

*/

Object data;

Node next;

Node prev;

Page 8: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

public Node (Object data){

this.data = data;

}

public Node(){

}

}

/*

* To change this license header, choose License Headers in

Project Properties.

* To change this template file, choose Tools | Templates

* and open the template in the editor.

*/

package modul2latihan1;

/**

*

* @author ASUS

*/

public class SingleList {

Node head, tail;

int size;

public void inisialisasi(){

head = tail = null;

}

public boolean isEmpty(){

return size == 0;

}

Page 9: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

public int size (){

return size;

}

public void addFirst(Object o){

Node input = new Node ();

input.data = o;

if (isEmpty()){

head = input;

tail = input;

}

else {

input.next = head;

head = input;

}

size++;

}

public void addLast(Object o){

Node input = new Node();

input.data = o;

if(isEmpty()){

head = input;

tail = input;

}

else {

tail.next = input;

tail = tail.next;

//tail.next = head; --> ini dipake jika ingin

mode circular

}

size++;

}

public void insertAfterKey(Object key, Object o){

Node temp = head;

Node input = new Node();

Page 10: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

input.data = o;

if(isEmpty()){

head.next = input;

tail = tail.next;

}

else {

while (!temp.data.equals(key)){

temp = temp.next;

}

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

addLast(o);

}

else {

input.next = temp.next;

temp.next = input;

size++;

}

}

}

public void insertBeforeKey(Object key , Object o){

Node temp = head;

Node input = new Node();

input.data = o;

if (isEmpty()){

head.next = input;

tail = tail.next;

}

else {

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

addFirst(o);

}

else {

while (!temp.next.data.equals(key)){

temp = temp.next;

}

input.next = temp.next;

temp.next = input;

size++;

}

Page 11: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

}

}

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 {

System.out.println("OVER");

}

}

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

}

}

Page 12: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

else {

System.out.println("OVER!");

}

}

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("OVER!");

}

}

public void print(){

Node temp = head;

if(!isEmpty()){

while(temp!= null){

System.out.println(temp.data);

temp = temp.next;

}

}

Page 13: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

else

System.out.println("Tidak ada Data");

}

}

/*

* To change this license header, choose License Headers in

Project Properties.

* To change this template file, choose Tools | Templates

* and open the template in the editor.

*/

package modul2latihan1;

/**

*

* @author ASUS

*/

public class SIngleLinkList {

public static void main(String[]args){

SingleList data = new SingleList();

data.addFirst(10);

data.addFirst(50);

data.addFirst(60);

data.addLast(70);

System.out.println("Data sebelum di utak atik");

data.print();

data.insertAfterKey(60 , 65);

//data.insertAfterKey(70 ,71 );

//data.insertBeforeKey(10 , 5);

data.insertBeforeKey(70 , 69);

//data.removeFirst();

//data.removeLast();

//data.removeKey(60);

Page 14: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

System.out.println("Data setelah dihapus data

pertamanya dan terakhirnya, dan nilai data 60");

data.print();

}

}

ANALISA :

- Di dalam class node hanya menginisialisasi

- Di dalam class SingleList, semua method berada di sini

- Method addFirst dan addLast akan melakukan proses penambahan data

- Method insertAfterKey dan insertBeforeKey, method ini akan di proses

seteleh if(isEmpty()) tidak terpenuhi

- Menambahkan method removeFirst, removeLast, dan removeKey akan

melakukan penghapusan data awal, akhir, data yang ditunjuk

2. Syntac (DOUBLE LINKED LIST) :: Ada 2 class (Node, DoubleList)

/*

* To change this license header, choose License Headers in

Project Properties.

* To change this template file, choose Tools | Templates

* and open the template in the editor.

*/

Page 15: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

package modul2nomer2;

/**

*

* @author ASUS

*/

public class Node {

Object data;

Node prev;

Node next;

public void displayLink() // display ourself

{

System.out.print("{" + data + "} ");

}

}

/*

* To change this license header, choose License Headers in

Project Properties.

* To change this template file, choose Tools | Templates

* and open the template in the editor.

*/

package modul2nomer2;

/**

*

* @author ASUS

*/

public class DoubleList {

Page 16: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

Node head, tail;

int size;

boolean isEmpty() {

return size == 0;

}

public void insertFirst(Object o) {

Node baru = new Node();

baru.data = o;

if (head == null) {

head = tail = baru;

} else {

baru.next = head;

head.prev = baru;

head = baru;

}

size++;

}

public void insertLast(Object o) {

Node baru = new Node();

baru.data = o;

if (head == null) {

head = tail = null;

} else {

baru.prev = tail;

tail.next = baru;

tail = baru;

}

size++;

}

public void insertAfter(Object o, Object key) {

Node baru = new Node();

baru.data = o;

Node temp = head;

Page 17: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

while (!temp.data.equals(key)) {

temp = temp.next;

}

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

this.insertFirst(o);

} else {

baru.next = temp;

baru.next = temp.next;

temp.next.prev = baru;

temp.next = baru;

size++;

}

}

public void insertBefore(Object o, Object key) {

Node baru = new Node();

baru.data = o;

Node temp = head;

while (!temp.data.equals(key)) {

temp = temp.next;

}

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

this.insertFirst(o);

} else {

baru.next = temp;

baru.prev = temp.next;

temp.prev.next = baru;

temp.prev = baru;

size++;

}

}

public void removeFirst() {

if (isEmpty()) {

System.out.println("OVER!");

} else {

if (head == tail) {

head = tail = null;

Page 18: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

size--;

} else {

head = head.next;

head.prev = null;

size--;

}

}

}

public void removeLast() {

if (isEmpty()) {

System.out.println("OVER!");

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

} else {

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

removeFirst();

} else {

while (!temp.data.equals(key)) {

temp = temp.next;

}

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

removeLast();

} else {

temp.prev.next = temp.next;

Page 19: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

temp.next.prev = temp.prev;

temp = null;

size--;

}

}

}

}

/*

public void displayForward() {

Node current = head;

while (current != null) {

current.displayLink();

current = current.next;

}

System.out.println("");

}

public void displayBackward() {

Node current = tail;

while (current != null) {

current.displayLink();

current = current.prev;

}

System.out.println("");

}

*/

public void print() {

Node temp = head;

if (!isEmpty()) {

while (temp != null) {

System.out.println(temp.data);

temp = temp.next;

}

} else {

System.out.println("Tidak ada data");

}

}

Page 20: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

public static void main(String[] args) {

DoubleList d = new DoubleList();

d.insertFirst(100);

d.insertLast(200);

d.insertLast(300);

d.insertLast(400);

System.out.println("INI DATANYA ");

d.print();

System.out.println("");

System.out.println("INI SUDAH DI OBRAK ABRIK ");

//d.insertAfter(50, 400);

d.insertAfter(40, 300);

//d.insertAfter(30, 400);

d.insertBefore(51, 300);

d.removeFirst();

// d.removeLast();

d.removeKey(200);

d.print();

//d.displayForward();

//d.displayBackward();

}

}

Page 21: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

ANALISA :

- Di dalam class node hanya menginisialisasi

- Di dalam class DoubleList, semua method berada di sini

- Method insertFirst dan insertLast akan melakukan proses penambahan data

- Method insertAfter dan insertBefore, method ini akan di proses seteleh while

(!temp.data.equals(key)) berhenti berjalan dan menemukan key nya

- Menambahkan method removeFirst, removeLast, dan removeKey akan

melakukan penghapusan data awal, akhir, data yang ditunjuk

3. PROGRAM PENGAKSES ISI NODE :: Ada 2 class (Node, DoubleList)

/*

* To change this license header, choose License Headers in

Project Properties.

* To change this template file, choose Tools | Templates

* and open the template in the editor.

*/

package modul2nomer3;

/**

*

* @author ASUS

*/

public class Node {

Object data;

Node prev;

Page 22: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

Node next;

public void displayLink() // display ourself

{

System.out.print("{" + data + "} ");

}}

/*

* To change this license header, choose License Headers in

Project Properties.

* To change this template file, choose Tools | Templates

* and open the template in the editor.

*/

package modul2nomer3;

import java.util.Scanner;

/**

*

* @author ASUS

*/

public class DoubleList {

Node head, tail;

int size;

boolean isEmpty() {

return size == 0;

}

public void insertFirst(Object o) {

Node baru = new Node();

baru.data = o;

if (head == null) {

head = tail = baru;

} else {

baru.next = head;

head.prev = baru;

Page 23: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

head = baru;

}

size++;

}

public void insertLast(Object o) {

Node baru = new Node();

baru.data = o;

if (head == null) {

head = tail = null;

} else {

baru.prev = tail;

tail.next = baru;

tail = baru;

}

size++;

}

/*

public void insertAfter (Object o, Object key){

Node baru = new Node();

baru.data = o;

Node temp = head;

while (!temp.data.equals(key)){

temp = temp.next;

}

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

this.insertFirst(o);

}

else {

baru.next = temp;

baru.next = temp.next;

temp.next.prev = baru;

temp.next = baru;

size++;

}

}

Page 24: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

public void insertBefore(Object o, Object key){

Node baru = new Node();

baru.data = o;

Node temp = head;

while (!temp.data.equals(key)){

temp = temp.next;

}

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

this.insertFirst(o);

}

else {

baru.next = temp;

baru.prev = temp.next;

temp.prev.next = baru;

temp.prev = baru;

size++;

}

}

public void removeFirst(){

if (isEmpty()){

System.out.println("OVER!");

}

else {

if (head == tail){

head = tail = null;

size--;

}

else {

head = head.next;

head.prev=null;

size--;

}

}

}

public void removeLast(){

if(isEmpty()){

System.out.println("OVER!");

Page 25: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

}

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

}

else {

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

removeFirst();

}

else {

while (!temp.data.equals(key)){

temp = temp.next;

}

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

removeLast();

}

else {

temp.prev.next = temp.next;

temp.next.prev = temp.prev;

temp = null;

size--;

}

}

}

}

Page 26: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

*/

public void displayForward() {

Node A = head;

while (A != null) {

A.displayLink();

A = A.next;

}

System.out.println("");

}

public void displayBackward() {

Node A = tail;

while (A != null) {

A.displayLink();

A = A.prev;

}

System.out.println("");

}

public void print() {

Node temp = head;

if (!isEmpty()) {

while (temp != null) {

System.out.println(temp.data);

temp = temp.next;

}

} else {

System.out.println("Tidak ada data");

}

}

public static void main(String[] args) {

DoubleList d = new DoubleList();

Scanner scanner = new Scanner(System.in);

int pilih = 0;

String answer;

Page 27: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

d.insertFirst(1);

d.insertLast(2);

d.insertLast(3);

d.insertLast(4);

d.insertLast(5);

//d.insertAfter(50, 400);

//d.insertAfter(40, 300);

//d.insertAfter(30, 400);

//d.insertBefore(51, 300);

//d.removeFirst();

//d.removeLast();

//d.removeKey(100);

System.out.println(">>Ini Data nya : ");

d.print();

do {

System.out.print(">>pilih 1 untuk lihat dari

depan || pilih 2 untuk lihat dari belakang : ");

pilih = scanner.nextInt();

if (pilih == 1) {

System.out.println(">>Data dari depan : ");

d.displayForward();

} else {

System.out.println(">>Data dari belakang :

");

d.displayBackward();

}

System.out.print(">>Ingin Lihat Lagi YA / TIDAK

? _ ");

answer = scanner.next();

} while (answer.equals("YA"));

/* System.out.println("Urutan data dari depan : ");

System.out.println("Urutan data dari belakang : ");

d.displayBackward(); */

}

}

Page 28: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

ANALISA :

- Di dalam class node hanya menginisialisasi

- Di dalam class DoubleList, semua method berada di sini

- Method insertFirst dan insertLast akan melakukan proses penambahan data

- Method displayForward, di sini menunjuk titik A sebagai kepala dari data,

kemudian dengan syntax WHILE , saat A tidak bernilai NULL, maka data

akan terbaca sampai ke tail

- Method displayBackward, di sini menunjuk titik A sebagai ekor dari data, saat

WHILE berjalan, saat titik A tidak bernilai NULL, maka data akan dibaca

mulai dari tail sampai head

4. PROGRAM REPLACE :: Ada 2 class (Node, DoubleLinkedList)

/*

* To change this license header, choose License Headers in

Project Properties.

* To change this template file, choose Tools | Templates

* and open the template in the editor.

*/

package modul2nomer4;

/**

*

@author ASUS

Page 29: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

*/

public class Node {

Object data;

Node prev;

Node next;

public Node (Object data){

this.data = data;

}

public Node(){

}

}

/*

* To change this license header, choose License Headers in

Project Properties.

* To change this template file, choose Tools | Templates

* and open the template in the editor.

*/

package modul2nomer4;

import java.util.Scanner;

/**

*

* @author ASUS

*/

public class DoubleLinkListed {

Node head, tail;

int size;

boolean isEmpty() {

return size == 0;

Page 30: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

}

public void insertFirst(Object o) {

Node baru = new Node();

baru.data = o;

if (head == null) {

head = tail = baru;

} else {

baru.next = head;

head.prev = baru;

head = baru;

}

size++;

}

public void insertLast(Object o) {

Node baru = new Node();

baru.data = o;

if (head == null) {

head = tail = null;

} else {

baru.prev = tail;

tail.next = baru;

tail = baru;

}

size++;

}

public void replace(Object o, Object key) {

Node baru = new Node();

baru.data = o;

Node temp = head;

while (!temp.data.equals(key)) {

temp = temp.next;

}

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

this.insertFirst(o);

} else {

Page 31: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

baru.prev = temp;

baru.next = temp.next;

temp.prev.next = baru;

temp.prev = baru;

}

}

public void print() {

Node temp = head;

if (!isEmpty()) {

while (temp != null) {

System.out.println(temp.data);

temp = temp.next;

}

} else {

System.out.println("Tidak ada Data");

}

}

public static void main(String[] args) {

DoubleLinkListed D = new DoubleLinkListed();

Scanner baru = new Scanner(System.in);

D.insertFirst("A");

D.insertLast("B");

D.insertLast("C");

D.insertLast("D");

D.print();

System.out.print("Nilai yang akan dimasukkan = : ");

String key1 = baru.nextLine();

System.out.print("Nilai yang akan diganti : ");

String key2 = baru.nextLine();

D.replace(key1 ,key2 );

D.print();

}

}

Page 32: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

ANALISA :

- Di dalam class node hanya menginisialisasi

- Di dalam class DoubleLinkedList, semua method berada di sini

- Method insertFirst dan insertLast akan melakukan proses penambahan data

- Method replace di sini akan mengganti KEY DATANYA , dengan

menggunakan logika seperti ini :

baru.prev = temp;

baru.next = temp.next;

temp.prev.next = baru;

temp.prev = baru;

5. PROGRAM PEMBALIK KALIMAT :: (*BELUM SELESAI --)

/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package modul2nomer5; /** * * @author ASUS */ public class Node { Object data; Node prev;

Page 33: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

Node next; public void displayLink() // display ourself { System.out.print("{" + data + "} "); } }

/*

* To change this license header, choose License Headers in

Project Properties.

* To change this template file, choose Tools | Templates

* and open the template in the editor.

*/

package modul2nomer5;

import java.util.ArrayList;

import java.util.Scanner;

/**

*

* @author ASUS

*/

public class DoubleLinkedList {

Node head, tail;

int size;

boolean isEmpty() {

return size == 0;

}

public void insertFirst(Object o) {

Node baru = new Node();

baru.data = o;

if (head == null) {

head = tail = baru;

} else {

baru.next = head;

head.prev = baru;

head = baru;

}

size++;

}

public void insertLast(Object o) {

Node baru = new Node();

baru.data = o;

if (head == null) {

head = tail = null;

} else {

baru.prev = tail;

tail.next = baru;

tail = baru;

}

size++;

}

Page 34: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

public void displayForward() {

Node A = head;

while (A != null) {

A.displayLink();

A = A.next;

}

System.out.println("");

}

public void displayBackward() {

Node A = tail;

while (A != null) {

A.displayLink();

A = A.prev;

}

System.out.println("");

}

public void print() {

Node temp = head;

if (!isEmpty()) {

while (temp != null) {

System.out.println(temp.data);

temp = temp.next;

}

} else {

System.out.println("Tidak ada data");

}

}

public static void main (String[]args){

DoubleLinkedList d = new DoubleLinkedList();

ArrayList kata = new ArrayList();

Scanner masuk = new Scanner (System.in);

Scanner input = new Scanner (System.in);

int pilih;

do{

System.out.print ("Masukkan kata : ");

kata.add(masuk.nextLine());

System.out.println("Ingin input huruf lagi ? [1-YA/

0-TIDAK]");

pilih = input.nextInt();

}while (pilih == 1);

for (int i = 0 ; i < kata.size(); i++){

System.out.println (kata.get(i));

d.insertFirst(kata);

d.print();

System.out.println(">>Data dari depan : ");

d.displayForward();

System.out.println(">>Data dari belakang : ");

d.displayBackward();

}

Page 35: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

}

}

6. PROGRAM SINGLE CIRCULAR LINKED LIST :: Ada 2 class (Node,

SingleLinkedListCircular)

/*

* To change this license header, choose License Headers in

Project Properties.

* To change this template file, choose Tools | Templates

* and open the template in the editor.

*/

package modul2nomer6;

/**

*

* @author ASUS

*/

public class Node {

/**

* @param args the command line arguments

*/

Object data;

Node next;

Node prev;

public Node (Object data){

this.data = data;

}

public Node(){

}

Page 36: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

}

/*

* To change this license header, choose License Headers in

Project Properties.

* To change this template file, choose Tools | Templates

* and open the template in the editor.

*/

package modul2nomer6;

/**

*

* @author ASUS

*/

public class SingleLinkedListCircular {

Node head, tail;

int size;

public void inisialisasi() {

head = tail = null;

}

public boolean isEmpty() {

return size == 0;

}

public int size() {

return size;

}

public void addFirst(Object o) {

Node input = new Node();

input.data = o;

if (isEmpty()) {

head = input;

tail = input;

Page 37: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

} else {

input.next = head;

head = input;

}

size++;

}

public void addLast(Object o) {

Node input = new Node();

input.data = o;

if (isEmpty()) {

head = input;

tail = input;

} else {

for (int i = 0 ; i < 3 ; i++){

tail.next = input;

tail = tail.next;

tail.next = head;

if (tail.next == head){

break ;

}

}

}

size++;

}

/*

public void insertAfterKey(Object key, Object o) {

Node temp = head;

Node input = new Node();

input.data = o;

if (isEmpty()) {

head.next = input;

tail = tail.next;

} else {

while (!temp.data.equals(key)) {

temp = temp.next;

Page 38: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

}

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

addLast(o);

} else {

input.next = temp.next;

temp.next = input;

size++;

}

}

}

public void insertBeforeKey(Object key, Object o) {

Node temp = head;

Node input = new Node();

input.data = o;

if (isEmpty()) {

head.next = input;

tail = tail.next;

} else {

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

addFirst(o);

} else {

while (!temp.next.data.equals(key)) {

temp = temp.next;

}

input.next = temp.next;

temp.next = input;

size++;

}

}

}

public void removeFirst() {

Node temp = head;

if (!isEmpty()) {

if (head == tail) {

head = tail = null;

temp = null;

size--;

} else {

Page 39: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

head = temp.next;

temp = null;

size--;

}

} else {

System.out.println("OVER");

}

}

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("OVER!");

}

}

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

Page 40: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

removeLast();

} else {

temp.next = temp.next.next;

temp = null;

size--;

}

}

} else {

System.out.println("OVER!");

}

}

*/

public void print() {

Node temp = head;

if (!isEmpty()) {

while (temp != null) {

System.out.println(temp.data);

temp = temp.next;

}

} else {

System.out.println("Tidak ada Data");

}

}

public static void main(String[] args) {

SingleLinkedListCircular data = new

SingleLinkedListCircular();

data.addFirst(10);

data.addFirst(50);

data.addFirst(60);

data.addLast(70);

/*

data.insertAfterKey(60 , 65);

data.insertAfterKey(70 , 71);

data.insertBeforeKey(10 , 5);

data.insertBeforeKey(70 , 66);

Page 41: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

System.out.println("Data sebelum di utak atik");

*/

data.print();

/*

data.removeFirst();

data.removeLast();

data.removeKey(60);

System.out.println("Data setelah dihapus data

pertamanya dan terakhirnya, dan nilai data 60");

*/

//data.print();

}

}

ANALISA :

- Strukturnya hamper sama dengan single linked list, hanya di dalam method

addLast ditambah

if (tail.next == head)

jika key sudah terbaca sampai tail terakhir, tail akan melanjutkan data (dot

next) kembali ke Head sehingga terjadi circular

Page 42: 201410370311127_Modul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – Laporan Modul Praktikum Algoritma dan Struktur Data By. [ 201410370311127 ] [ Akhmad Zulfikar Al Ghivani ]

6. Kesimpulan

Dari percobaan di atas dapat disimpulkan bahwa ada perbedaan antara single Linked

List dengan Double Linked List, yaitu pada jumlah pointernya. Pada single hanya

terdapat satu pointer, hanya akan membaca data terus menerus ke belakang (tail),

sedangkan Double memiliki dua pointer sehingga pembacaan data bisa dilakukan dari

head ke belakang ataupun tail ke dapan. Jika menggunakan konsep Circular,

pembacaan pada single akan dimulai dari head sampai bertemu head lagi, berbeda

dengan double, double bisa membaca dari dua arah secara beruntun head ke tail

maupun tail ke head.