201410370311151 andjani chaerun nisha algodatmodul2

34
Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur DataBy. [201410370311151] [Andjani Chaerun Nisha] LAPORAN PRAKTIKUM ALGORITMA DAN STRUKTUR DATA MODUL KE-2 SINGLE LINKED LIST & DOUBLE LINKED LIST Pengampu : Yufiz Azhar, S.Kom 201410370311151 Andjani Chaerun Nisha

Upload: anjani-chairunnisa

Post on 05-Jan-2016

229 views

Category:

Documents


0 download

DESCRIPTION

MODUL 2

TRANSCRIPT

Page 1: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

LAPORAN PRAKTIKUM ALGORITMA DAN STRUKTUR

DATA

MODUL KE-2

SINGLE LINKED LIST & DOUBLE LINKED LIST

Pengampu :

Yufiz Azhar, S.Kom

201410370311151 Andjani Chaerun Nisha

Page 2: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

Daftar Isi

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

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

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

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

5. Implementasi dan Hasil Praktikum ...................................................................................... 5

6. Kesimpulan ............................................................................................................................ 34

Page 3: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

1. Deskripsi Praktikum

Praktikum yang akan dilakukan adalah membuat program dengan pengaksesan dari head /

tail. Tujuan :

a. Mengerti bagaimana model penyimpanan data menggunakan struktur data single dan

double linked list.

b. Memahami model pengaksesan elemen dalam struktur data linked list.

c. Mengerti dan menggunakan metode-metode standar di kelas LlinkedList.

2. Perangkat Lunak

a. Komputer

b. Netbeans

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.

• 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

Page 4: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

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

Page 5: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

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.

4. Prosedur Pelaksanaan

Prosedur pelaksanaan praktikum adalah sebagai berikut :

a. Mahasiswa mencoba latihan yang ada pada modul praktikum

b. Mahasiswa menganalisa hasil dari program pada latihan yang telah dijalankan

c. Mahasiswa mengerjakan tugas yang diberikan

d. Mahasiswa mendemonstrasikan program yang telah dikerjakan pada dosen/assisten

e. Mahasiswa membuat laporan dari tugas yang telah dikerjakan

5. Implementasi dan Hasil Praktikum

A. Source Code

i. Latihan SingleList

1. Node.java

package latihan_singlelist;

/**

*

* @author ANJANI

Page 6: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

*/

public class Node {

Object data;

Node next;

public Node(Object data) {

this.data = data;

}

public Node() {

}

}

2. SingleList.java addFirst, addLast

package latihan_singlelist;

/**

*

* @author ANJANI

*/

public class SingleList {

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;

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

Page 7: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

tail = tail.next;

}

size++;

}

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

SingleList ambil = new SingleList();

ambil.addFirst(50);

ambil.addFirst(60);

ambil.addFirst(70);

ambil.addLast(10);

System.out.println("Data - datanya : ");

ambil.print();

}

}

3. SingleList. Java addFirst, addLast, removeFirst, removeLast

package latihan_singlelist;

/**

*

* @author ANJANI

*/

public class SingleList {

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 8: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

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

}

size++;

}

public void removeFirst() {

Node temp = head;

if (head == tail) {

head = tail = null;

} else {

head = temp.next;

temp = null;

}

size--;

}

public void removeLast() {

Node temp = head;

if (head == tail) {

head = tail = null;

} else {

while (temp.next != tail) {

temp = temp.next;

}

temp.next = null;

tail = temp;

temp = null;

}

size--;

}

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

SingleList ambil = new SingleList();

ambil.addFirst(50);

Page 9: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

ambil.addFirst(60);

ambil.addFirst(70);

ambil.addLast(10);

System.out.println("Data sebelum dihapus : ");

ambil.print();

ambil.removeFirst();

ambil.removeLast();

System.out.println("Data sesudah dihapus : ");

ambil.print();

}

}

ii. Latihan DoubleList

1. Node.java

package latihan_doublelist;

/**

*

* @author ANJANI

*/

public class Node {

Object data;

Node prev;

Node next;

}

2. DoubleList.java insertFirst, insertLast

package latihan_doublelist;

/**

*

* @author ANJANI

*/

public class DoubleList {

Node head, tail;

int size;

public boolean isEmpty() {

return size == 0;

}

public int size(){

return size;

}

public void insertFirst(Object o) {

Node baru = new Node();

baru.data = o;

if (isEmpty()) {

head = tail = baru;

} else {

Page 10: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

baru.next = head;

head.prev = baru;

head = baru;

}

size++;

}

public void insertLast(Object o) {

Node baru = new Node();

baru.data = o;

if (isEmpty()) {

head = tail = baru;

} else {

baru.prev = tail;

tail.next = baru;

tail = baru;

}

size++;

}

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

d.insertFirst(200);

d.insertFirst(100);

d.insertLast(300);

d.insertLast(400);

System.out.println("Data – data nya : ");

d.print();

}

}

3. DoubleList.java insertFirst, insertLast, insertAfter

package latihan_doublelist;

/**

*

* @author ANJANI

*/

public class DoubleList {

Node head, tail;

int size;

public boolean isEmpty() {

return size == 0;

}

Page 11: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

public int size(){

return size;

}

public void insertFirst(Object o) {

Node baru = new Node();

baru.data = o;

if (isEmpty()) {

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

head = tail = baru;

} else {

baru.prev = tail;

tail.next = baru;

tail = baru;

}

size++;

}

public void insertAfter(Object key, Object a) {

Node input = new Node();

input.data = a;

Node temp = head;

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

temp = temp.next;

}

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

this.insertLast(a);

} else {

input.prev = temp;

input.next = temp.next;

temp.next.prev = input;

temp.next = input;

size++;

}

}

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 12: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

public static void main(String[] args) {

DoubleList d = new DoubleList();

d.insertFirst(200);

d.insertFirst(100);

d.insertLast(300);

d.insertLast(400);

System.out.println("Data sebelum ditambah insertAfter :

");

d.print();

d.insertAfter(100, 20);

d.insertAfter(200, 30);

System.out.println("Data setelah ditambah insertAfter :

");

d.print();

}

}

iii. No. 1

Node.java

package latihan_singlelist;

/**

*

* @author ANJANI

*/

public class Node {

Object data;

Node next;

public Node(Object data) {

this.data = data;

}

public Node() {

}

}

SingleList.java

package latihan_singlelist;

/**

*

* @author ANJANI

*/

public class SingleList {

Node head, tail;

int size;

public void inisialisasi() {

head = tail = null;

}

Page 13: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

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;

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

}

size++;

}

public void insertAfterKey(Object key, Object a) {

Node temp = head;

Node input = new Node();

input.data = a;

if (isEmpty()) {

head = tail = input;

} else {

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

temp = temp.next;

}

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

addLast(a);

} else {

input.next = temp.next;

temp.next = input;

size++;

}

}

}

public void insertBeforeKey(Object key, Object a) {

Node temp = head;

Node input = new Node();

input.data = a;

if (isEmpty()) {

head = tail = input;

Page 14: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

} else {

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

addFirst(a);

} 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 (head == tail) {

head = tail = null;

} else {

head = temp.next;

temp = null;

}

size--;

}

public void removeLast() {

Node temp = head;

if (head == tail) {

head = tail = null;

} else {

while (temp.next != tail) {

temp = temp.next;

}

temp.next = null;

tail = temp;

temp = null;

}

size--;

}

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

}

Page 15: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

if (temp.next == tail &&

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

removeLast();

} else {

temp.next = temp.next.next;

temp = null;

size--;

}

}

} else {

System.out.println("Data sudah habis");

}

}

public static void main(String[] args) {

SingleList ambil = new SingleList();

ambil.addFirst(50);

ambil.addFirst(60);

ambil.addFirst(70);

ambil.addLast(10);

ambil.insertAfterKey(50, 100);

ambil.insertAfterKey(10, 200);

ambil.insertBeforeKey(70, 300);

ambil.insertBeforeKey(60, 400);

System.out.println("Data sebelum dihapus : ");

ambil.print();

System.out.println("Panjang single list

"+ambil.size());

ambil.removeFirst();

ambil.removeLast();

ambil.removeKey(70);

System.out.println("Data sesudah dihapus : ");

ambil.print();

System.out.println("Panjang single list

"+ambil.size());

}

}

iv. No. 2

Node.java

package latihan_doublelist;

/**

*

* @author ANJANI

*/

public class Node {

Object data;

Node prev;

Node next;

}

Page 16: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

DoubleList.java

package latihan_doublelist;

/**

*

* @author ANJANI

*/

public class DoubleList {

Node head, tail;

int size;

public boolean isEmpty() {

return size == 0;

}

public int size(){

return size;

}

public void insertFirst(Object o) {

Node baru = new Node();

baru.data = o;

if (isEmpty()) {

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

head = tail = baru;

} else {

baru.prev = tail;

tail.next = baru;

tail = baru;

}

size++;

}

public void insertAfter(Object key, Object a) {

Node input = new Node();

input.data = a;

Node temp = head;

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

temp = temp.next;

}

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

this.insertLast(a);

} else {

input.prev = temp;

input.next = temp.next;

temp.next.prev = input;

Page 17: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

temp.next = input;

size++;

}

}

public void insertBeforeKey(Object key, Object a) {

Node temp = head;

Node input = new Node();

input.data = a;

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

temp = temp.next;

}

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

insertFirst(a);

} else {

input.next = temp;

input.prev = temp.next;

temp.prev.next = input;

temp.prev = input;

size++;

}

}

public void removeFirst() {

if (isEmpty()) {

System.out.println("Data sudah habis");

} else {

if (head == tail) {

head = tail = null;

size--;

} else {

head = head.next;

head.prev = null;

size--;

}

}

}

public void removeLast() {

if (isEmpty()) {

System.out.println("Data sudah habis");

} 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("Data sudah habis");

} else {

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

removeFirst();

} else {

Page 18: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

while (!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() {

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

d.insertFirst(200);

d.insertFirst(100);

d.insertLast(300);

d.insertLast(400);

d.insertAfter(100, 20);

d.insertAfter(200, 30);

d.insertBeforeKey(200, 40);

d.insertBeforeKey(400, 50);

System.out.println("Data sebelum dihapus : ");

d.print();

System.out.println("Panjang Double List "+d.size());

d.removeFirst();

d.removeLast();

d.removeKey(300);

System.out.println("Data setelah dihapus : ");

d.print();

System.out.println("Panjang Double List "+d.size());

}

}

Page 19: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

v. No. 3

Node.java

package no_3;

/**

*

* @author ANJANI

*/

public class Node {

Object dataku;

Node sebelum;

Node sesudah;

public void displayLink() {

System.out.print(" " + dataku + " ");

}

}

Akses_doublelinklist.java package no_3;

import java.util.Scanner;

/**

*

* @author ANJANI

*/

public class Akses_doublelinklist {

Node head, tail;

int size;

public boolean kosong() {

return size == 0;

}

public int size() {

return size;

}

public void addFirst(Object o) {

Node baru = new Node();

baru.dataku = o;

if (kosong()) {

head = tail = baru;

} else {

baru.sesudah = head;

head.sebelum = baru;

head = baru;

}

size++;

}

public void addLast(Object o) {

Node baru = new Node();

baru.dataku = o;

if (kosong()) {

head = tail = baru;

Page 20: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

} else {

baru.sebelum = tail;

tail.sesudah = baru;

tail = baru;

}

size++;

}

public void print_depan() {

Node temp = head;

if (!kosong()) {

while (temp != null) {

temp.displayLink();

temp = temp.sesudah;

}

} else {

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

}

}

public void print_belakang() {

Node temp = tail;

if (!kosong()) {

while (temp != null) {

temp.displayLink();

temp = temp.sebelum;

}

} else {

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

}

}

public static void main(String[] args) {

Scanner input = new Scanner(System.in);

String menu;

Akses_doublelinklist ambil = new

Akses_doublelinklist();

ambil.addFirst(4);

ambil.addFirst(3);

ambil.addFirst(2);

ambil.addFirst(1);

ambil.addLast(5);

do {

System.out.println("Isi linked list : 1 2 3 4

5");

System.out.println("-------------------------------

----");

System.out.println("Pilih metode akses : ");

System.out.println("1. Akses depan");

System.out.println("2. Akses belakang");

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

int pilihan = input.nextInt();

if (pilihan == 1) {

System.out.print("Output : ");

ambil.print_depan();

} else if (pilihan == 2) {

System.out.print("Output : ");

ambil.print_belakang();

}

System.out.println("");

System.out.print("Kembali ke menu? [y/t] : ");

Page 21: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

menu = input.next();

} while (menu.equals("y"));

}

}

vi. No. 4

Node.java

package no_4;

/**

*

* @author ANJANI

*/

public class Node {

Object data;

Node prev;

Node next;

}

Replace.java

package no_4;

import java.util.Scanner;

public class Ganti_angka {

Node head, tail;

int size;

boolean kosong() {

return size == 0;

}

public void addFirst(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 addLast(Object o) {

Node baru = new Node();

baru.data = o;

if (head == null) {

head = tail = null;

} else {

baru.prev = tail;

tail.next = baru;

tail = baru;

}

Page 22: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

size++;

}

public void ganti(int index, Object angka) {

Node current = head;

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

current = current.next;

}

current.data = angka;

}

public void print() {

Node temp = head;

if (!kosong()) {

while (temp != null) {

System.out.println(temp.data);

temp = temp.next;

}

} else {

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

}

}

public static void main(String[] karen) {

Ganti_angka ambil = new Ganti_angka();

String ingin;

Scanner input = new Scanner(System.in);

System.out.println("Data angka :");

ambil.addFirst(10);

ambil.addFirst(11);

ambil.addFirst(12);

ambil.addFirst(13);

ambil.addLast(14);

ambil.print();

do {

System.out.print("Apakah ingin mengubah angka?

[y/t] : ");

ingin = input.next();

if (ingin.equals("y")) {

System.out.print("Masukkan index mulai dari 0 :

");

int index = input.nextInt();

System.out.print("Masukkan angka perubahan :

");

int angka = input.nextInt();

ambil.ganti(index, angka);

System.out.println("Angka setelah diganti : ");

ambil.print();

} else {

}

} while (ingin.equals("y"));

}

}Node();

input.data = o;

if (isEmpty()) {

head = input;

tail = input;

Page 23: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

} else {

tail.next = input;

tail = tail.next;

tail.next = head;

}

size++;

}

public void insertAfterKey(Object key, Object a) {

Node temp = head;

Node input = new Node();

input.data = a;

if (isEmpty()) {

head = tail = input;

} else {

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

temp = temp.next;

}

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

addLast(a);

} else {

input.next = temp.next;

temp.next = input;

size++;

}

}

}

public void insertBeforeKey(Object key, Object a) {

Node temp = head;

Node input = new Node();

input.data = a;

if (isEmpty()) {

head = tail = input;

} else {

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

addFirst(a);

} else {

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

temp = temp.next;

}

input.next = temp.next;

temp.next = input;

size++;

}

}

}

public void print() {

Node temp = head;

if (!isEmpty()) {

while (temp != null) {

System.out.println(temp.data);

temp = temp.next;

if (temp == head) {

break;

}

}

System.out.println(temp.data);

} else {

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

Page 24: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

}

}

public static void main(String[] args) {

SingleListCircular ambil = new SingleListCircular();

ambil.addFirst(50);

ambil.addFirst(60);

ambil.addFirst(70);

ambil.addLast(10);

ambil.insertAfterKey(10, 200);

ambil.insertBeforeKey(60, 400);

System.out.println("Data - data : ");

ambil.print();

}

}

vii. No. 5

Node.java

package no_5;

public class Node {

Object data;

Node prev;

Node next;

public void displayLink() {

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

}

}

Pecah_kata.java

package no_5;

import java.util.Scanner;

/**

*

* @author ANJANI

*/

public class Pecah_kata {

Node head, tail;

int size;

public boolean kosong() {

return size == 0;

}

public void addLast(Object o) {

Node baru = new Node();

baru.data = o;

if (kosong()) {

head = tail = baru;

} else {

Page 25: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

baru.prev = tail;

tail.next = baru;

tail = baru;

}

size++;

}

public void print_belakang() {

Node temp = tail;

while (temp != null)

{

temp.displayLink();

temp = temp.prev;

}

System.out.println("");

}

public void print_depan() {

Node temp = head;

if (!kosong()) {

while (temp != null) {

System.out.println(temp.data);

temp = temp.next;

}

} else {

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

}

}

public static void main(String[] args) {

Scanner input = new Scanner(System.in);

Pecah_kata ambil = new Pecah_kata();

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

String kata = input.next();

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

System.out.println("Data node ke - " + i + " = " +

kata.charAt(i));

ambil.addLast(kata.charAt(i));

}

System.out.print("Hasil : ");

ambil.print_belakang();

}

}

viii. No. 6

Node.java

package no_6;

public class Node {

Object data;

Node next;

public Node(Object data) {

this.data = data;

}

public Node() {

Page 26: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

}

}

SLLC.java

package no_6;

/**

*

* @author ANJANI

*/

public class SingleListCircular{

Node head, tail;

int size;

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;

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

}

size++;

}

public void insertAfterKey(Object key, Object a) {

Node temp = head;

Node input = new Node();

input.data = a;

if (isEmpty()) {

head = tail = input;

} else {

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

temp = temp.next;

}

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

Page 27: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

addLast(a);

} else {

input.next = temp.next;

temp.next = input;

size++;

}

}

}

public void insertBeforeKey(Object key, Object a) {

Node temp = head;

Node input = new Node();

input.data = a;

if (isEmpty()) {

head = tail = input;

} else {

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

addFirst(a);

} else {

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

temp = temp.next;

}

input.next = temp.next;

temp.next = input;

size++;

}

}

}

public void print() {

Node temp = head;

if (!isEmpty()) {

while (temp != null) {

System.out.println(temp.data);

temp = temp.next;

if (temp == head) {

break;

}

}

System.out.println(temp.data);

} else {

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

}

}

public static void main(String[] args) {

SingleListCircular ambil = new SingleListCircular();

ambil.addFirst(50);

ambil.addFirst(60);

ambil.addFirst(70);

ambil.addLast(10);

ambil.insertAfterKey(10, 200);

ambil.insertBeforeKey(60, 400);

System.out.println("Data - data : ");

ambil.print();

}

}

Page 28: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

B. Print Screen

i. Latihan SingleList

1. Node.java

2.

3.

ii. Latihan DoubleList

1. Node.java

2.

3.

Page 29: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

iii. No. 1

iv. No. 2

v. No. 3

Page 30: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

vi. No. 4

vii. No. 5

Page 31: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

viii. No. 6

C. Analisis

i. Latihan SingleList

Saya membuat method addFirst, addLast, dan removeFirst pada latihan single

list ini. Masing-masing method memiliki parameter bernama “o” dengan tipe

data Object. Di dalam addFirst saya membuat object dari Node bernama input.

Lalu input saya isikan dengan parameter o. jika data kosong maka head dan

tail berupa kosongan. Jika tidak maka data setelah kosong tersebut akan jadi

head. Saya membuat method addLast yang hampir sama dengan addFirst.

Yang membedakan adalah di percabangan if else, jika data kosong maka head

dan tail berupa input kosongan. Jika tidak maka tail.next = input yang artinya

data tail selanjutnya adalah angka yang telah diinput, jika angka yang telah

kita masukkan pada addLast lebih dari 2 maka yang menjadi tail adalah data

yang terakhir diinputkan. Saya membuat method removeFirst yang gunanya

menghapus data pertama.

ii. Latihan DoubleList

j. Saya membuat method insertFirst, insertLast, dan insertAfter pada latihan

double list ini. Masing-masing method memiliki parameter bernama “o”

Page 32: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

dengan tipe data Object. Di dalam insertFirst saya membuat object dari Node

bernama baru. Lalu input saya isikan dengan parameter o. jika data kosong

maka head dan tail berupa kosongan. Jika tidak maka data setelah kosong

tersebut akan jadi head, jika data yang dimasukkan dalam method insertFirst

lebih dari 1 maka data yang paling terakhir sendiri yang menjadi head. Saya

membuat method insertLast yang hampir sama dengan insertFirst. Yang

membedakan adalah di percabangan if else, jika data kosong maka head dan

tail berupa input kosongan. Jika tidak maka baru.prev = tail yang artinya data

tail sebelumnya menjadi tail adalah, jika angka yang telah kita masukkan pada

insertLast lebih dari 2 maka yang menjadi tail adalah data yang pertama

diinputkan. Saya membuat method insertAfter yang gunanya menambah data

setelah key yang ditunjuk.

i. No. 1

Di dalam praktikum nomer 1 ini, saya membuat method insertAfterKey

dengan parameter key dan a yang masing-masing bertipe data object.

Membuat inisialisasi variable dari kelas Node bernama temp untuk

menyimpan head/ data pertamanya. Kemudian membuat object dari kelas

Node bernama input. Lalu input tersebut saya isikan dengan parameter a yang

akan disimpan dalam variable data di kelas Node. Membuat percabangan if

else, jika data kosong maka akan diisi berupa kosongan yaitu input. Di dalam

else terdapat while dan if else untuk mengecek apakah parameter key dan a

sesuai dengan angka yang dimasukkan. Jika sesuai maka akan menambahkan

data setelah angka yang ditunjuk. Membuat method insertBeforeKey hampir

sama dengan method insertAfterKey hanya data yang ditambah adalah data

sebelum angka yang ditunjuk. Membuat removeKey gunanya untuk

menghapus angka yang ditunjuk.

ii. No. 2

Di dalam praktikum nomer 2 ini, saya membuat method insertAfterKey

dengan parameter key dan a yang masing-masing bertipe data object.

Membuat inisialisasi variable dari kelas Node bernama temp untuk

menyimpan head/ data pertamanya. Kemudian membuat object dari kelas

Node bernama input. Lalu input tersebut saya isikan dengan parameter a yang

akan disimpan dalam variable data di kelas Node. Membuat perulangan while,

Page 33: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

jika data tidak sama dengan key yang ditunjuk temp akan mengecek data

selanjutnya. Membuat percabangan if else. Di dalam if ada perbandingan

antara temp jika sama dengan tail maka akan dibandingkan dengan keynya,

lalu memanggil method insertLast. Jika tidak maka data prev = temp, data

next = temp.next, temp.next.prev = input untuk mengecek key kemudian jika

cocok maka akan ditambahkan setelah key, temp.next = input. Membuat

method insertBeforeKey hamper sama dengan method insertAfterKey hanya

temp.prev.next = input karena untuk mengecek key kemudian jika cocok

maka akan ditambah sebelum key. Membuat method removeFirst gunanya

hanya untuk menghapus data pertama saja, sedangkan removeLast gunanya

hanya untuk menghapus data terakhir saja. Membuat removeKey gunanya

untuk menghapus angka yang ditunjuk.

iii. No. 3

Saya membuat method print_depan dan print_belakang untuk mengakses data

dari depan atau belakang. Di dalam method print_depan, saya membuat object

dari Node bernama temp untuk menampung head. Jika data tidak kosong maka

akan dilakukan perulangan while jika temp tidak sama dengan null untuk

menampilkan data dari depan yaitu temp = temp.sesudah dimana temp disini

tempat menampung head. Jika tidak maka akan menampilkan output “data

tidak ada”. Lalu membuat method print_belakang, saya membuat object dari

Node bernama temp untuk menampung tail. Jika data tidak kosong maka akan

dilakukan perulangan while jika temp tidak sama dengan null maka akan

menampilkan data dari belakang yaitu temp = temp.sebelum.

iv. No. 4

Saya membuat method ganti dengan parameter index bertipe int, dan angka

bertipe object. Lalu membuat object dari Node yaitu current untuk

menampung head. Lalu membuat perulangan for untuk mengecek head jika

i<index maka current = current.next yang artinya head berpindah ke data

selanjutnya. Jika sesuai dengan index yang ditunjuk maka akan diganti dengan

angka yang baru.

v. No. 5

Page 34: 201410370311151 Andjani Chaerun Nisha AlgodatModul2

Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur

DataBy. [201410370311151] [Andjani Chaerun Nisha]

Untuk mengambil huruf dari sebuah kata, saya menggunakan fungsi charAt.

Setelah menginputkan kata saya menyimpannya di variable “kata” bertipe

string. Lalu membuat perulangan for untuk mengambil panjang kata tersebut.

Lalu membuat output data node ke – i + kata.charAt(i) untuk mengambil

huruf. Lalu saya simpan di method addLast lalu tampilkan hasil dengan

menggunakan print_belakang

vi. No. 6

Untuk mengakses singlelistcircular saya menambahkan pada method addLast

tail.next = head yang artinya jika data sudah berada di tail maka data akan

diakses kembali dari head.

6. Kesimpulan

• Linked list : struktur data yang dibangun dari satu atau lebih node yang menempati alokasi

memori secara dinamis. Double list : artinya field pointer-nya dua buah dan dua arah,

yang menunjuk ke node sebelum dan sesudahnya.