Upload
akhmad-zulfikar
View
5
Download
2
Tags:
Embed Size (px)
DESCRIPTION
ASD Semester 3 JavaDosen Pengampu : Ilyas NuryasinNur Hayatin
Citation preview
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
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
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 :
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)
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
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.
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;
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;
}
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();
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++;
}
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--;
}
}
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;
}
}
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);
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.
*/
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 {
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;
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;
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;
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");
}
}
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();
}
}
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;
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;
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++;
}
}
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!");
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--;
}
}
}
}
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;
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(); */
}
}
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
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;
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 {
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();
}
}
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;
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++;
}
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();
}
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(){
}
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;
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;
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 {
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)) {
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);
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
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.