Anda di halaman 1dari 7

LABORATORIUM PEMBELAJARAN ILMU KOMPUTER

FAKULTAS ILMU KOMPUTER


UNIVERSITAS BRAWIJAYA

BAB : ADT DOUBLE LINKED LIST


NAMA : DIMAS FERRY KURNIAWAN
NIM : 185150600111004
TANGGAL : 18/09/2019
ASISTEN : M NAUFAL ANDIKA N P

A. DEFINISI MASALAH
Modifikasilah program di atas dengan mengganti tipe item data pada NodeDLL
denganObject. Kemudian gunakan class Buku yang pernah dibuat pada praktikum bab
4 untukdiisikan pada DLL. Gunakan pemasukan data secara interaktif.

B. SOURCE CODE
Node.java
1 package Praktikum5;
2 public class Node {
3 Object data;
4 Node prev, next;
5 String judul, kategori;
6 double sewa, denda;
7 }

Buku.java
1 package Praktikum5;
2 import java.util.Scanner;
3 public class Buku {
4 private Node pKepala, pEkor;
5 public Buku() {
6 pKepala = null;
7 pEkor = null; }
8 public void sisipDipKepala(String j, String k, double
9 s, double d) {
Node baru = new Node();
10 baru.judul = j;
11 baru.kategori = k;
12 baru.sewa = s;
13 baru.denda = d;
14 if (pKepala == null) {
15 baru.prev = pKepala;
16 baru.next = pEkor;
17 pKepala = baru;
18 pEkor = baru;
19 } else {
20 baru.next = pKepala;
21 pKepala.prev = baru;
22 pKepala = baru;} }
23 public void sisipDipEkor(String j, String k, double
24 s, double d) {
25 Node baru = new Node();
26 baru.judul = j;
baru.kategori = k;
27 baru.sewa = s;
28 baru.denda = d;
29 if (pEkor == null) {
30 baru.prev = pKepala;
31 baru.next = pEkor;
32 pKepala = baru;
33 pEkor = baru;
34 } else {
35 baru.prev = pEkor;
36 pEkor.next = baru;
37 pEkor = baru; } }
38 public void hapusDataTertentu(String dataHapus) {
39 Node curr = pKepala;
40 while (curr.judul == null ? dataHapus != null : !
41 curr.judul.equals(dataHapus)) {
42 curr = curr.next; }
43 if (curr == pKepala) {
44 pKepala = curr.next;
45 } else {
curr.prev.next = curr.next; }
46 if (curr == pEkor) {
47 pEkor = curr.prev;
48 } else {
49 curr.next.prev = curr.prev; } }
50 public void sisipDataTerurut(double s) {
51 Node a = new Node();
52 a.sewa = s;
53 Node curr = pKepala;
54 while (curr != null) {
55 Node cr = curr.next;
56 while (cr != null) {
57 if (curr.sewa > cr.sewa) {
58 double temp = curr.sewa;
59 curr.sewa = cr.sewa;
60 cr.sewa = temp;}
61 cr = cr.next;}
62 curr = curr.next;} }
63 public void cetak(String kom) {
64 System.out.println(kom);
65 Node p = pKepala;
66 while (p != pEkor.next) {
67 System.out.print("\nJUDUL : " + p.judul +
"\nKATEGORI : " + p.kategori + "\nBIAYA SEWA : " + p.sewa
+ "\nBIAYA DENDA : " + p.denda +
"\n=============================");
68 p = p.next; }
69 System.out.println("\nNULL"); }
70 public static void main(String s[]) {
71 Scanner input = new Scanner(System.in);
72 int choose;
73 String judul, kategori;
74 double sewa, denda;
75 Buku buku = new Buku();
76 Node book = new Node();
77 do {
78 System.out.println("PROGRAM SEWA BUKU");
79 System.out.print("1.TAMBAH DATA
AWAL\n2.TAMBAH DATA AKHIR\n3.HAPUS DATA\n4.URUTKAN
DATA\n5.CETAK DATA\n0.EXIT\n PILIH :");
80 choose = input.nextInt();
81 switch (choose) {
82 case 1:
83 System.out.print("JUDUL\t: ");
84 judul = input.next();
85 input.nextLine();
86 System.out.print("KATEGORI\t: ");
87 kategori = input.next();
88 input.nextLine();
89 System.out.print("BIAYA SEWA\t: ");
90 sewa = input.nextDouble();
91 System.out.print("BIAYA DENDA\t: ");
92 denda = input.nextDouble();
93 buku.sisipDipKepala(judul, kategori,
sewa, denda);
94 break;
95 case 2:
96 System.out.print("JUDUL\t: ");
97 judul = input.next();
98 input.nextLine();
99 System.out.print("KATEGORI\t: ");
100 kategori = input.next();
101 input.nextLine();
102 System.out.print("BIYA SEWA\t: ");
103 sewa = input.nextDouble();
104 System.out.print("BIAYA DENDA\t: ");
105 denda = input.nextDouble();
106 buku.sisipDipEkor(judul, kategori,
sewa, denda);
107 break;
108 case 3:
109 System.out.print("JUDUL\t: ");
110 judul = input.next();
111 input.nextLine();
112 buku.hapusDataTertentu(judul);
113 buku.cetak("DATA BUKU " + judul + "
DIHAPUS");
114 break;
115 case 4:
116 buku.sisipDataTerurut(book.sewa);
117 buku.cetak("URUTAN");
118 break;
119 case 5:
120 buku.cetak("DATA BUKU");
121 break; }
122 } while (choose != 0); } }

C. PEMBAHASAN
DoubleLinkedList.java
1 Deklarasi class bernama Node
2 Deklarasi atribut bertipe data Object
4 Deklarasi atribut bertipe data Node
5 Deklarasi atribut bertipe data String
6 Deklarasi atribut bertipe data double

Buku.java
1 Deklarasi class bernama Buku
2 Deklarasi atribut bertipe data Buku dengan access modifier private
3 Deklarasi constructor
4 Inisialisasi atribut bernama pKepala, pEkor
8 Deklarasi method void bernama sisipDipKepala dengan 4 parameter dimana
method ini digunakan untuk menyisipkan data pada list pertama
23 Deklarasi method void bernama sisipDipEkor dengan 4 parameter dimana
method ini digunakan untuk menyisipkan data pada list terakhir
38 Deklarasi method void bernama hapusDataTertentu dengan 1 parameter
dimana method ini digunakan untuk menghapus data tertentu yang ada pada
list
50 Deklarasi method void bernama sisipDataTerurut dengan 1 parameter dimana
method ini digunakan untuk mengurutkan data berdasarkan biaya sewa mulai
dari biaya terendah sampai tertinggi
63 Deklarasi method void bernama cetak dengan 1 parameter dimana method ini
digunakan untuk mencetak data pada list
70 Deklarasi main method
71 Penggunaan fungsi Scanner input
72 Deklarasi variabel bertipe data int
73 Deklarasi variabel bertipe data String
74 Deklarasi variabel bertipe data double
75 Instansiasi object bernama buku
76 Instansiasi object bernama book
77 Perulangan do
78 Mencetak “PROGRAM SEWA BUKU”
79 Mencetak “1.TAMBAH DATA AWAL\n2.TAMBAH DATA
AKHIR\n3.HAPUS DATA\n4.URUTKAN DATA\n5.CETAK
DATA\n0.EXIT\nPILIH :”
80 Menginput data bertipe data int
81 Percabangan switch case
82 Case pertama
83 Mencetak “Judul :”
84 Menginput data bertipe data String
86 Mencetak “Kategori :”
87 Menginput data bertipe data String
89 Mencetak “Biaya sewa :”
90 Menginput data bertipe data double
91 Mencetak “Biaya denda :”
92 Menginput data bertipe data double
93 Memanggil method bernama sisipDipKepala
94 Menghentikan proses perulangan
95 Case ke-2
96 Mencetak “Judul :”
97 Menginput data bertipe data String
99 Mencetak “Kategori :”
100 Menginput data bertipe data String
102 Mencetak “Biaya sewa :”
103 Menginput data bertipe data double
104 Mencetak “Biaya denda :”
105 Menginput data bertipe data double
106 Memanggil method bernama sisipDipEkor
107 Menghentikan proses perulangan
108 Case ke-3
109 Mencetak “Judul :”
110 Menginput data bertipe data String
112 Memanggil method bernama hapusDataTertentu
113 Memanggil method bernama cetak
114 Menghentikan proses perulangan
115 Case ke-4
116 Memanggil method bernama sisipDataTerurut
117 Memanggil method bernama cetak
118 Menghentikan proses perulangan
119 Case ke-5
120 Memanggil method bernama cetak
121 Menghentikan proses perulangan
122 Perulangan while dimana nilai pada variabel choose != 0

D. SCREENSHOT PROGRAM
E. KESIMPULAN
Double Link List adalah elemen-elemen yang dihubungkan dengan dua pointer
dalam satu elemen dan list dapat melintas baik di depan atau belakang. Elemen double
link list terdiri dari tiga bagian: 1)Bagian data informasi. 2)Pointer next yang
menunjuk ke elemen berikutnya. 3)Pointer prev yang menunjuk ke elemen
sebelumnya.
Perbedaan SLL dan DLL adalah terletak pada jumlah pointernya untuk SLL
hanya memiliki satu pointer yaitu poointer next saja. Sedangkan DLL memiliki dua
pointer yaitu pointer prev dan next.
Untuk menunjuk head dari double link list, pointer prev dari elemen pertama
menunjuk NULL. Sedangkan untuk menunjuk tail, pointer next dari elemen terakhir
menunjuk NULL. Berbeda dengan Single Linked List yang hanya mempunyai satu
penunjuk (pointer), untuk mengubah data, pada Double Linked List bisa dikatakan
lebih mudah dengan adanya dua penunjuk yang telah disebutkan.

Untuk menyisipkan data baru dilakukan dengan menunjuk pointer next Baru menuju
kepala, serta pointer next dari data/node kepala menuju Baru. Kemudian Baru menjadi
kepala:
Baru.next = kepala;
kepala.prev = Baru;
kepala = Baru;

Untuk menyisipkan data baru di belakang, pointer next ekor meuju baru, dan pointer
prev baru menuju ekor. Kemudian nama baru menjadi ekor.
baru.prev = ekor;
ekor.next = baru;
ekor = baru;

Untuk menyispkan data baru sesuai posisi, diperlukan node sebelum (sbl) dan sesudah
(sdh).
baru.prev = sbl;
baru.next = sdh;
sbl.next = baru;
sdh.prev = bar

Anda mungkin juga menyukai