201410370311151 andjani chaerun nisha algodatmodul2
DESCRIPTION
MODUL 2TRANSCRIPT
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
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
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
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 :
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
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;
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;
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);
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 {
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;
}
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");
}
}
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;
}
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;
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;
}
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;
}
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;
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 {
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());
}
}
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;
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] : ");
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;
}
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;
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");
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 {
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() {
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)) {
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();
}
}
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.
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
Dokumen Laboratorium Teknik Informatika UMM @ 2015 – LaporanModul Praktikum Algoritma dan Struktur
DataBy. [201410370311151] [Andjani Chaerun Nisha]
vi. No. 4
vii. No. 5
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”
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,
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
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.