Anda di halaman 1dari 9

LAPORAN PRAKTIKUM ALGORITMA DAN

STRUKTUR DATA
PROGRAM TEKNOLOGI INFORMASI DAN ILMU
KOMPUTER
UNIVERSITAS BRAWIJAYA
BAB
NAMA
NIM
TANGGAL
ASISTEN

: DOUBLE LINKED LIST


: ANDI HAFIIDH
: 145150407111065
: 19/10/2015
: - GALUH WIDHI GUMILAR
-REZA HASTUTI

A. DEFINISI MASALAH
Memodifikasi program di Double Linked List dengan mengganti tipe item data
pada NodeDLL dengan Object. Kemudian menggunakan class Masiswa yang pernah
dibuat pada praktikum 4 untuk diisikan pada DLL. Menggunakan pemasukan data
secara interaktif.
Mahasiswa
String nim
String nama
double ipk
Constructor Mahasiswa
double getIpk
String getNim
String getNama

B. SOURCE CODE
1. DLL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

package ADT_LIST_BARU;
import java.util.Scanner;
class NodeDLL {
Object data = new Mahasiswa();
NodeDLL prev, next;
}
public class DoubleLinkedList {
private NodeDLL pKepala, pEkor;
public DoubleLinkedList() {
pKepala = null;
pEkor = null;
}
public void sisipDipKepala(Object dt) {
NodeDLL baru = new NodeDLL();
baru.data = dt;

23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81

if (pKepala == null) {
baru.prev = pKepala;
baru.next = pEkor;
pKepala = baru;
pEkor = baru;
} else {
baru.next = pKepala;
pKepala.prev = baru;
pKepala = baru;
}

public void sisipDipEkor(Object data) {


NodeDLL baru = new NodeDLL();
baru.data = data;
if (pEkor == null) {
baru.prev = pKepala;
baru.next = pEkor;
pKepala = baru;
pEkor = baru;
} else {
baru.prev = pEkor;
pEkor.next = baru;
pEkor = baru;
}
}
public void cetak(String kom) {
System.out.println(kom + "\n");
NodeDLL p = pKepala;
while (p != pEkor.next) {
System.out.println(p.data);
p = p.next;
}
System.out.println();
}
public void hapusDataTertentu(Object dataHapus) {
NodeDLL p = pKepala;
while (p != pEkor.next) {
if (p.next.data == dataHapus) {
p.next.next.prev = p;
p.next = p.next.next;
break;
}
p = p.next;
}
}
public void sisipDataTerurut(Object data) {
sisipDipKepala(data);
NodeDLL data1 = pKepala;
while (data1 != null) {
Mahasiswa mala = (Mahasiswa) data1.data;
NodeDLL data2 = data1.next;
while (data2 != null) {
Mahasiswa maba = (Mahasiswa) data2.data;
if (maba.nim < mala.nim) {
data2.data = mala;

82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130

data1.data = maba;
}
data2 = data2.next;
}
data1 = data1.next;
}

public void cetakDariBelakang() {


NodeDLL temp = pEkor;
System.out.print("NULL");
do {
System.out.println(temp.data);
temp = temp.prev;
} while (temp != null);
System.out.println("");
}
public static void main(String s[]) {
Scanner input = new Scanner(System.in);
Scanner line = new Scanner(System.in);
DoubleLinkedList DLL = new DoubleLinkedList();
String lagi, nama;
Long NIM;
double ipk;
System.out.println("===== Masukan Data Mahasiswa
=====");

do {
System.out.print("Masukan NIM
NIM = input.nextLong();
System.out.print("Masukan Nama
nama = line.nextLine();
System.out.print("Masukan IPK
ipk = input.nextDouble();

: ");
: ");

Mahasiswa maba = new Mahasiswa(NIM, nama, ipk);


DLL.sisipDataTerurut(maba);
System.out.print("\ningin memasukan data lagi (y/n)

? ");

lagi = input.next();
System.out.println("");
} while (lagi.equalsIgnoreCase("y"));
DLL.cetak("===== Data Mahasiswa : =====");
}

2. Mahasiswa
1
2
3
4
5

: ");

package ADT_LIST_BARU;
public class Mahasiswa {
Long nim;

6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

String nama;
double ipk;
public Mahasiswa() {
}
public Mahasiswa(Long nim, String nama, double ipk) {
this.nim = nim;
this.nama = nama;
this.ipk = ipk;
}
@Override
public String toString(){
return ("Nim : " + nim + "\n"
+ "Nama : " + nama + "\n"
+ "IPK : " + ipk + "\n");
}
}

C. PEMBAHASAN
1. DLL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 -18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

Deklarasi nama package yaitu ADT_LIST_BARU


Mengimport Scanner
Deklarasi kelas NodeDLL
Deklarasi field data bertipe Object
Deklarasi field prev, next bertipe NodeDLL
Akhir kelas NodeDLL
Deklarasi kelas DoubleLinkedList
Deklarasi field pKepala, pEkor bertipe private NodeDLL
Konstruktor untuk menginisialisasi pKepala dan pEkor dengan nilai null
Method sisipDipKepala dengan parameter (Object dt)
Instansiasi kelas NodeDLL untuk membuat objek baru
Assignment dt kedalam data pada objek
Percabangan dengan kondisi jika pKepala belum diisi maka
Assignment pKepala pada variabel prev pada objek baru
Assignment pEkor pada variabel next pada objek baru
Assignment baru kedalam pKepala
Assignment baru kedalam pEkor
Jika tidak, maka
Assignment pKepala ke dalam baru.next
Assignment baru ke dalam pKepala.prev
Assignment baru ke dalam pKepala
Akhir percabangan
Akhir method sisipDipKepala

34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83

Method sisipDipEkor dengan parameter (Object data)


Instansiasi kelas NodeDLL untuk membuat objek baru
Assignment data ke dalam baru.data
Percabangan jika pEkor sedang kosong maka
Assignment pKepala ke dalam baru.prev
Assignment pEkor ke dalam baru.next
Assignment baru ke dalam pKepala
Assignment baru ke dalam pEkor
Jika tidak, maka
Assignment pEkor ke dalam baru.prev
Assignment baru ke dalam pEkor.next
Assignment baru ke dalam pEkor
Akhir percabangan
Akhir method sisipDipEkor
Method cetak dengan parameter (String kom)
Mencetak kom + "\n"
Instansiasi kelas NodeDLL untuk membuat objek p dengan isi pKepala
Perulangan selama p tidak sama dengan pEkor.next
Mencetak p.data
Assignment p.next ke dalam p
Akhir perulangan
Mencetak
Akhir method cetak
Method hapusDataTertentu dengan parameter (Object dataHapus)
Instansiasi kelas NodeDLL untuk membuat objek p dengan isi pKepala
Perulangan dengan kondisi selama p tidak sama dengan pEkor.next
Seleksi kondisi jika p.next.data sama dengan dataHapus
Assignment p ke dalam p.next.next.prev
Assignment p.next.next ke dalam p.next
keluar perulangan
akhir seleksi kondisi
Assignment p.next ke dalam p
Akhir perulangan
Akhir method hapusDataTertentu
Method sisipDataTerurut dengan parameter (Object data)
Memanggil method sisipDipKepala dengan passing (data)
Instansiasi kelas NodeDLL untuk membuat objek data1 dengan value
pKepala
Perulangan selama data1 tidak kosong
Instansiasi kelas Mahasiswa untuk membuat objek mala dengan value
hasil casting data1.data ke dalam Mahasiswa
Instansiasi kelas NodeDLL untuk membuat objek data2 dengan value
data1.next
Perulangan selama data2 tidak kosong
Instansiasi kelas Mahasiswa untuk membuat objek maba dengan value
hasil casting data2.data ke dalam Mahasiswa
Seleksi kondisi dimana nim dari maba kurang dari nim dari mala maka
Assignment mala ke dalam data pada data2
Assignment maba ke dalam data pada data1

84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130

Akhir seleksi kondisi


Assignment data2.next ke dalam data2
Akhir perulangan
Assignment data1.next ke dalam data1
Akhir perulangan
Akhir method sisipDataTerurut
Method cetakDariBelakang()
Instansiasi kelas NodeDLL untuk membuat objek temp dengan isi value
dari pEkor
Mencetak "NULL"
Memulai perulangan dengan do
Mencetak value dari data pada objek temp
Assignment temp.prev kedalam temp
Perulangan selama temp tidak kosong
Mencetak ""
Akhir method cetakDariBelakang
Deklarasi main method
Instansiasi kelas Scanner untuk membuat objek input
Instansiasi kelas Scanner untuk membuat objek line
Instansiasi kelas DoubleLinkedList untuk membuat objek DLL
Deklarasi lagi dan nama bertipe String
Deklarasi NIM bertipe Long
Deklarasi ipk bertipe double
Mencetak "===== Masukan Data Mahasiswa ====="
Memulai perulangan menggunakan do
Mencetak "Masukan NIM : "
Assignment inputan user ke dalam variabel NIM
Mencetak "Masukan Nama : "
Assignment inputan user ke dalam variabel nama
Mencetak "Masukan IPK : "
Assignment inputan user ke dalam variabel ipk
Instansiasi kelas Mahasiswa untuk membuat objek maba dengan
konstruktor dengan parameter NIM, nama, ipk
Memanggil method sisipDataTerurut dari objek DLL dengan passing
parameter (maba)
Mencetak "\ningin memasukan data lagi (y/n) ? "
Assignment inputan user ke dalam variabel lagi
Mencetak ""
Pengecekan untuk perulangan dengan kondisi variabel lagi berisi "y"
Memanggil method cetak dari objek DLL dengan pasing parameter
("===== Data Mahasiswa : =====")
Akhir main method
Akhir kelas DoubleLinkedList

2. Mahasiswa
1
2
3
4
5
6
7
8
9 10
11
12 - 16
17
18
19
20
21
22
23
24

Deklarasi nama package yaitu ADT_LIST_BARU


Deklarasi kelas Mahasiswa
Deklarasi variabel nim bertipe Long
Deklarasi variabel nama bertipe String
Deklarasi ipk double
Konstruktor kosong
Konstruktor untuk menginisialisasi nim, nama, dan ipk
Override Anotation
Method toString mengembalikan data berupa String
Berupa "Nim : " + nim + "\n"
+ "Nama : " + nama + "\n"
+ "IPK : " + ipk + "\n"
Akhir method toString
Akhir kelas Mahasiswa

D. SCREENSHOT PROGRAM

E. KESIMPULAN
1. DLL singkatan dari Double Linked List, merupakan salah satu tipe Linked List
yang memiliki keunikan dimana datanya bisa di baca dari dua arah, Node pada
DLL memiliki attribute Node sesudah dan Node sebelum, sehingga program dapat
mengetahui urutan Node pada DLL dari depan maupun dari belakang.
2. Perbedaan SLL dengan DLL diantaranya :
a. Pada SLL, Node hanya dapat dibaca dari depan ke belakang (Head to
Tail), sedangkan pada DLL, Node dapat dibaca dari depan maupun
belakang (dua arah).
b. Node pada SLL memiliki atribut next saja, sedangkan pada DLL memiliki
next dan prev.
3. Implementasi dari DLL yaitu dengan cara menambahkan atribut next dan prev
bertipe Node.
public void Node{
Object data;
Node next, prev;
public Node(){
}
public Node(Object data){
this.data = data;
}
}

Anda mungkin juga menyukai