Laporan Bab 6 Algoritma dan Struktur Dat
LABORATORIUM PEMBELAJARAN ILMU KOMPUTER
FAKULTAS ILMU KOMPUTER
UNIVERSITAS BRAWIJAYA
BAB
NAMA
NIM
TANGGAL
ASISTEN
: DOUBLE LINKED LIST
: M SATRIA PUTRA UTAMA
: 155150207111168
: 15/10/2016
: ILHAM ROMADHONA
A. DEFINISI MASALAH
Modifikasilah program di atas dengan mengganti tipe item data pada NodeDLL dengan
Object. Kemudian gunakan class Mahasiswa yang pernah dibuat pada praktikum 4
untuk diisikan pada DLL. Gunakan pemasukan data secara interaktif.
B. SOURCE CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Mahasiswa.java
package asdpraktikum;
public class Mahasiswa {
private String nim;
private String nama;
private double ipk;
public Mahasiswa() {
}
public Mahasiswa(String nama, String nim, double ipk) {
this.nama = nama;
this.nim = nim;
this.ipk = ipk;
}
public String getNim() {
return nim;
}
public String getNama() {
return nama;
}
public double getIpk() {
return ipk;
}
}
1
2
3
4
5
NodeDLL.java
package asdpraktikum;
public class NodeDLL {
Mahasiswa data;
NodeDLL prev, next;
}
1
2
3
4
5
6
7
DLL_Mahasiswa.java
package asdpraktikum;
public class DLL_Mahasiswa {
private NodeDLL pKepala, pEkor;
int size;
public DLL_Mahasiswa() {
pKepala = null;
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
pEkor = null;
}
public int getSize() {
return size;
}
public void sisipDipKepala(Mahasiswa mahasiswa) {
NodeDLL Baru = new NodeDLL();
Baru.data = mahasiswa;
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(Mahasiswa 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 komentar) {
System.out.println(komentar);
NodeDLL kom = pKepala;
System.out.println("===========================================
======"
+ "================");
System.out.println("|\t NAMA \t\t|\t NIM \t\t|\t IPK
\t|");
System.out.println("===========================================
======"
+ "================");
while (kom != null) {
System.out.println("|\t" + kom.data.getNama() +
"\t|\t"
+ kom.data.getNim() + "\t|\t" +
kom.data.getIpk() + "\t|");
kom = kom.next;
}
System.out.println("===========================================
======"
+ "================");
}
public void hapusDepan() {
Mahasiswa dtHapus;
NodeDLL pHapus = pKepala;
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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
pKepala = pKepala.next;
dtHapus = pKepala.data;
pHapus = null;
}
public void hapusTertentu(String nim) {
NodeDLL pHapus = pKepala;
NodeDLL pSblKini, pKini;
pSblKini = null;
pKini = pKepala;
if (pKepala != null) {
while (pHapus != null) {
if (pHapus.next.data.getNim().equals(nim)) {
pSblKini = pKini;
pHapus.next = pHapus.next.next;
if (pHapus.next == null) {
pHapus.next = pHapus;
}
break;
} else if (pHapus.data.getNim().equals(nim) &&
pHapus == pKepala) {
this.hapusDepan();
break;
}
pHapus = pHapus.next;
}
} else {
System.out.println("data kosong");
size--;
}
}
public void bubbleSort() {
boolean done = false;
while (!done) {
NodeDLL pBaru = pKepala;
done = true;
while (pBaru != pEkor) {
if (pBaru.next.data.getIpk() <
pBaru.data.getIpk()) {
tukar(pBaru.next, pBaru);
done = false;
}
pBaru = pBaru.next;
}
}
}
private void tukar(NodeDLL node1, NodeDLL node2) {
Mahasiswa temp = node1.data;
node1.data = node2.data;
node2.data = temp;
}
public void sisipDataTerurut(Mahasiswa data) {
NodeDLL baru = new NodeDLL();
baru.data = data;
if (pKepala == null) {
baru.prev = pKepala;
baru.next = pEkor;
pKepala = baru;
pEkor = baru;
} else {
baru.next = pKepala;
119
120
121
122
123
124
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
pKepala.prev = baru;
pKepala = baru;
}
bubbleSort();
}
}
MainDLL.java
package asdpraktikum;
import java.util.Scanner;
public class MainDLL {
public static void main(String[] args) {
DLL_Mahasiswa data1 = new DLL_Mahasiswa();
DLL_Mahasiswa data2 = new DLL_Mahasiswa();
Scanner in = new Scanner(System.in);
while (true) {
System.out.println("== DOUBLE LINKED LIST
MAHASISWA==");
System.out.println("=================================");
System.out.println("1. Mengisi Data Diawal
");
System.out.println("2. Mengisi Data Diakhir
");
System.out.println("3. Menghapus Data Depan
");
System.out.println("4. Menghapus Data Tertentu ");
System.out.println("5. Tampil Data
");
System.out.println("6. Mengisi Data Urut
");
System.out.println("7. Tampilkan Data Urut
");
System.out.println("8. Exit
");
System.out.println("================================");
System.out.print("Masukkan pilihan : ");
int pilih = in.nextInt();
System.out.println("");
if (pilih == 1) {
System.out.println("\t Mengisi Data Mahasiswa
\t");
System.out.print("Masukkan NAMA : ");
String nama = in.next();
System.out.print("Masukkan NIM : ");
String nim = in.next();
System.out.print("Masukkan IPK : ");
double ipk = in.nextDouble();
Mahasiswa mahasiswa1 = new Mahasiswa(nama, nim,
ipk);
data1.sisipDipKepala(mahasiswa1);
}else if (pilih==2){
System.out.println("\t Mengisi Data Mahasiswa
\t");
System.out.print("Masukkan NAMA : ");
String nama = in.next();
System.out.print("Masukkan NIM : ");
String nim = in.next();
System.out.print("Masukkan IPK : ");
double ipk = in.nextDouble();
Mahasiswa mahasiswa3 = new Mahasiswa(nama, nim,
ipk);
data1.sisipDipEkor(mahasiswa3);
}
else if (pilih == 3) {
data1.hapusDepan();
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
84
data1.cetak("\t Hapus Data Depan \t \n
\tTampilan Setelah Hapus Data Depan\t");
} else if (pilih == 4) {
System.out.println("\t Hapus Data Tertentu
Berdasarkan Nim \t");
System.out.print("Masukkan NIM : ");
String nim = in.next();
data1.hapusTertentu(nim);
}else if (pilih==5){
data1.cetak("\t Tampil Data Mahasiswa \t");
}
else if (pilih == 6) {
System.out.println("\t Mengisi Data Urut
Mahasiswa \t");
System.out.print("Masukkan NAMA : ");
String nama = in.next();
System.out.print("Masukkan NIM : ");
String nim = in.next();
System.out.print("Masukkan IPK : ");
double ipk = in.nextDouble();
Mahasiswa mahasiswa2 = new Mahasiswa(nama, nim,
ipk);
data2.sisipDataTerurut(mahasiswa2);
}else if (pilih ==7){
data2.cetak("\t Tampilkan Data Urut Berdasarkan
IPK \t");
}
else if (pilih == 8) {
System.out.println("\t THANKS YOU \t");
System.exit(0);
}
System.out.println("");
System.out.println("Apakah anda ingin keluar ? ");
System.out.println("1. Keluar");
System.out.println("2. Tidak");
System.out.print("=> ");
int keluar = in.nextInt();
if (keluar == 1){
System.out.println("\t Terima Kasih \t");
System.exit(0);
}
}
}
}
C. PEMBAHASAN
1
2
3
4
5
6
7
8
9
10
Mahasiswa.java
Package dengan nama asdpraktikum
Deklarasi class dengan nama Mahasiswa
Deklarasi Variable nim dengan type data String dan hak akses private
Deklarasi Variable nama dengan type data String dan hak akses private
Deklarasi Variable ipk dengan type data double dan hak akses private
Konstuktor Mahasiswa
Tutup kurung konstruktor
Konstruktor Mahasiswa dengan parameter String nama, String nim, Double ipk
Inisialisasi nama = nama, operasi memasukkan nilai variabel nama ke nama
Inisialisasi nim = nim, operasi memasukkan nilai variabel nim ke nim
11
12
13
20
21
22
Inisialisasi ipk - ipk, operasi memasukkan nilai variabel ipk ke ipk
Tutup kurung konstruktor
Deklarasi method getNim dengan type data String untuk mendapatkan value balikan
dari user
Mengembalikan value nim
Tutup kurung kurawal method getNim
Deklarasi Method getNama dengan type data String untuk mendapatkan value balikan
dari user
Mengembalikan value nama
Tutup kurung kurawal method getNim
Deklarasi Method getIpk dengan type data double untuk mendapatkan value balikan
dari user
Mengembalikan value ipk
Tutup kurung kurawal method getNim
Tutup kurung kurawal class Mahasiswa
1
2
3
4
5
NodeDLL.java
Package dengan nama asdpraktikum
Deklarasi class dengan nama NodeDLL
Deklarasi Variable data dengan type data Mahasiswa
Deklarasi Variable prev dan next dengan type data NodeDLL
Kurung kurawal penutup clas NodeDLL
14
15
16
17
18
19
1
2
3
4
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
DLL_Mahasiswa.java
Package dengan nama asdpraktikum
Deklarasi class dengan nama DLL_Mahasiswa
Deklarasi Variable Pkepala dan Pekor dengan type data NodeDLL dan hak akses
private
Deklarasi Variable size dengan type data int
Konstruktor DLL_Mahasiswa
Inisialisasi pKepala sama dengan null
Inisialisasi pEkor sama dengan null
Kurung kurawal penutup konstruktor
Method getsize dengan type data int
Mengembalikan value size
Kurung kurawal penutup method getSize
Method sisipDipKepala dengan type data void dan berparameter Mahasiswa
mahasiswa
Instansiasi objek baru
Inisialisasi Baru dengan data yang lama sama dengan data yang baru
Pengondisian jika pKepala sama dengan null
Maka baru bagian depan menunjuk ke pKepala
Baru selanjutnya menunjuk ke pEkor
Pkepala sama dengan Baru
pEkor sama dengan Baru
Pengondisian jika bukan termasuk kondisi yang atas
Maka Baru selanjutnya sama dengan pKepala
pKepala.prev sama dengan baru
pKepala sama dengan Baru
Kurung kurawal penutup else
Kurung kurawal penutup method sisipDipKepala
Deklarasi method sisipDiEkor dengan type void dan berparameter Mahasiswa data
Instansiasi objek baru
Inisialisasi baru.data sama dengan data yang baru dimasukkan
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
46
47
49
50
52
53
54
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
85
86
87
88
Pengondisian jika pKepala sama dengan null
Maka baru bagian depan menunjuk ke pKepala
Baru selanjutnya menunjuk ke pEkor
Pkepala sama dengan Baru
pEkor sama dengan Baru
Pengondisian jika bukan termasuk kondisi yang atas
Maka baru.prev sama dengan pEkor
pEkor.next sama dengan baru
pEkor sama dengan baru
kurung kurawal penutup else
kurung kurawal penutup method sisipDipEkor
Deklarasi Method cetak dengan type void dan berparameter String komentar
Mencetak isi komentar
Inisialisasi kom sama dengan pKepala
Perintah mencetak”===========================”
Perintah mencetak NAMA, NIM, IPK
Perintah mencetak”===========================”
Perulangan kom jika tidak sama dengan null
Perintah Mencetak NAMA, NIM, IPK dan menampilkan isinya
Kom sama dengan kom.next yang menunjuk ke komentar selanjutnya
Kurung kurawal penutup while
Perintah mencetak”===========================”
Kurung kurawal penutup method cetak
Deklarasi method hapusDepan dengan type void
Deklarasi Variable dtHapus dengan type Mahasiswa
Inisialisasi pHapus sama dengan pKepala
Inisialisasi pKepala sama dengan pKepala.next
Inisialisasi dtHapus sama dengan pKepala.data
Inisialisasi pHapus sama dengan null
Kurung kurawal penutup method hapus depan
Deklarasi Method hapusTertentu dengan parameter String nim
Inisialisasi pHapus sama dengan pKepala
Variable pSblKini, pKini dengan type NodeDLL
Inisialisasi pSblKini sama dengan null
Inisialisasi pKini sama dengan pKepala
Pengondisian jika pKepala tidak sama dengan null
Perulangan pHapus tidak sama dengan null
Pengondisian pHapus.next.data.getNim().equeals(nim)
Maka pSblKini sama dengan pKini
Maka pHapus.next sama dengan pHapus.next.next
Pengondisian jika pHapus.next sama dengan null
Maka pHapus.next sama dengan pHapus
Kurung tutup End if
Deklarasi break berarti Perulangan berhenti
Pengondisian lain jika pHapus.data.getNim().equals(nim) && pHapus = = pKepala
Maka hapusDepan
Perulangan selesai
Tutup kurung kurawal End if
pHapus sama dengan pHapus.next
kurung kurawal penutup perintah while
Pengondisian lain jika tidak memenuhi kondisi sebelumnya
Maka akan mencetak “data kosong”
Size berkurang
Kurung kurawal penutup else
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
Kurung kurawal penutup method hapusTertentu
Deklarasi Method bubbleSort dengan type void
Inisialisasi done dengan type Boolean sama dengan false
Perulangan tidak done
Inisialisasi pBaru sama dengan pKepala
Inisialisasi done sama dengan true
Perulangan pBaru tidak sama dengan pEkor
Pengondisian jika pBaru.next.data.getIpk() ”
Menginputkan data pilihan sesuai keinginan user yang akan di variable keluar
Pengondisian jika user memilih keluar
Mencetak kalimat terima kasih
Program berhenti atau selesai menjalankannya
Kurung kurawal penutup if(keluar==1)
Kurung kurawal penutup while(true)
Kurung kurawal penutup method main
Kurung kurawal penutup clas MainDLL
D. SCREENSHOT PROGRAM
E. KESIMPULAN
-
Pengertian DLL ( Double Linked List)
Adalah elemen-elemen yang dihubungkan dengan dua pointer dalam
elemen dan list dapat melintas baik didepan atau belakang. Double linked list
memliki kemampuan untuk membaca data dengan cara maju atau mundur.
Elemen double link list terdiri dari tiga bagian :
- Bagian data informasi
- Pointer next yang merujuk ke elemen berikutnya
- Pointer prev yang merujuk ke elemen sebelumnya
-
Perbedaan Single Lingked List dengan Double Linked List
SLL
DLL
- Dalam satu node hanya terdapat - Dalam satu node terdapat 2 pointer
satu pointer yaitu next yang
yaitu prev yang menunjukkan ke
menunjukkan ke node selanjutnya
node sebelumnya dan next
menunjukkan ke node selanjutnya
- Pada saat pembacaan elemen - Tidak memerlukan pembacaan
sebelumnya diperlukan, maka
dari awal karena memilik dua
membutuhkan pembacaan ulang
pointer
dari elemen paling awal
- Kurang efisisen
- Lebih efisien
-
Implementasi Double Linked List
Contoh :
Class berikut merupakan class untuk mengimplementasikan sebuah elemen dari
DLL.
Public class Node {
int data;
Node next;
Node prev;
}
Class berikut merupakan implementasi dari Double Linked List. Class ini
memenfaatkan class Node yang telah diimplementasikan di atas :
public class DoubleLinkedList {
private NodeDLL pKepala, pEkor;
int size;
public DoubleLinkedList() {
pKepala = null;
pEkor = null;
}
public void sisipDipKepala(int dt) {
NodeDLL baru = new NodeDLL();
baru.data = dt;
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(int 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);
NodeDLL pCetak = pKepala;
while (pCetak != null) {
System.out.print(pCetak.data + "->");
pCetak = pCetak.next;
}
System.out.println();
}
}
FAKULTAS ILMU KOMPUTER
UNIVERSITAS BRAWIJAYA
BAB
NAMA
NIM
TANGGAL
ASISTEN
: DOUBLE LINKED LIST
: M SATRIA PUTRA UTAMA
: 155150207111168
: 15/10/2016
: ILHAM ROMADHONA
A. DEFINISI MASALAH
Modifikasilah program di atas dengan mengganti tipe item data pada NodeDLL dengan
Object. Kemudian gunakan class Mahasiswa yang pernah dibuat pada praktikum 4
untuk diisikan pada DLL. Gunakan pemasukan data secara interaktif.
B. SOURCE CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Mahasiswa.java
package asdpraktikum;
public class Mahasiswa {
private String nim;
private String nama;
private double ipk;
public Mahasiswa() {
}
public Mahasiswa(String nama, String nim, double ipk) {
this.nama = nama;
this.nim = nim;
this.ipk = ipk;
}
public String getNim() {
return nim;
}
public String getNama() {
return nama;
}
public double getIpk() {
return ipk;
}
}
1
2
3
4
5
NodeDLL.java
package asdpraktikum;
public class NodeDLL {
Mahasiswa data;
NodeDLL prev, next;
}
1
2
3
4
5
6
7
DLL_Mahasiswa.java
package asdpraktikum;
public class DLL_Mahasiswa {
private NodeDLL pKepala, pEkor;
int size;
public DLL_Mahasiswa() {
pKepala = null;
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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
pEkor = null;
}
public int getSize() {
return size;
}
public void sisipDipKepala(Mahasiswa mahasiswa) {
NodeDLL Baru = new NodeDLL();
Baru.data = mahasiswa;
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(Mahasiswa 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 komentar) {
System.out.println(komentar);
NodeDLL kom = pKepala;
System.out.println("===========================================
======"
+ "================");
System.out.println("|\t NAMA \t\t|\t NIM \t\t|\t IPK
\t|");
System.out.println("===========================================
======"
+ "================");
while (kom != null) {
System.out.println("|\t" + kom.data.getNama() +
"\t|\t"
+ kom.data.getNim() + "\t|\t" +
kom.data.getIpk() + "\t|");
kom = kom.next;
}
System.out.println("===========================================
======"
+ "================");
}
public void hapusDepan() {
Mahasiswa dtHapus;
NodeDLL pHapus = pKepala;
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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
pKepala = pKepala.next;
dtHapus = pKepala.data;
pHapus = null;
}
public void hapusTertentu(String nim) {
NodeDLL pHapus = pKepala;
NodeDLL pSblKini, pKini;
pSblKini = null;
pKini = pKepala;
if (pKepala != null) {
while (pHapus != null) {
if (pHapus.next.data.getNim().equals(nim)) {
pSblKini = pKini;
pHapus.next = pHapus.next.next;
if (pHapus.next == null) {
pHapus.next = pHapus;
}
break;
} else if (pHapus.data.getNim().equals(nim) &&
pHapus == pKepala) {
this.hapusDepan();
break;
}
pHapus = pHapus.next;
}
} else {
System.out.println("data kosong");
size--;
}
}
public void bubbleSort() {
boolean done = false;
while (!done) {
NodeDLL pBaru = pKepala;
done = true;
while (pBaru != pEkor) {
if (pBaru.next.data.getIpk() <
pBaru.data.getIpk()) {
tukar(pBaru.next, pBaru);
done = false;
}
pBaru = pBaru.next;
}
}
}
private void tukar(NodeDLL node1, NodeDLL node2) {
Mahasiswa temp = node1.data;
node1.data = node2.data;
node2.data = temp;
}
public void sisipDataTerurut(Mahasiswa data) {
NodeDLL baru = new NodeDLL();
baru.data = data;
if (pKepala == null) {
baru.prev = pKepala;
baru.next = pEkor;
pKepala = baru;
pEkor = baru;
} else {
baru.next = pKepala;
119
120
121
122
123
124
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
pKepala.prev = baru;
pKepala = baru;
}
bubbleSort();
}
}
MainDLL.java
package asdpraktikum;
import java.util.Scanner;
public class MainDLL {
public static void main(String[] args) {
DLL_Mahasiswa data1 = new DLL_Mahasiswa();
DLL_Mahasiswa data2 = new DLL_Mahasiswa();
Scanner in = new Scanner(System.in);
while (true) {
System.out.println("== DOUBLE LINKED LIST
MAHASISWA==");
System.out.println("=================================");
System.out.println("1. Mengisi Data Diawal
");
System.out.println("2. Mengisi Data Diakhir
");
System.out.println("3. Menghapus Data Depan
");
System.out.println("4. Menghapus Data Tertentu ");
System.out.println("5. Tampil Data
");
System.out.println("6. Mengisi Data Urut
");
System.out.println("7. Tampilkan Data Urut
");
System.out.println("8. Exit
");
System.out.println("================================");
System.out.print("Masukkan pilihan : ");
int pilih = in.nextInt();
System.out.println("");
if (pilih == 1) {
System.out.println("\t Mengisi Data Mahasiswa
\t");
System.out.print("Masukkan NAMA : ");
String nama = in.next();
System.out.print("Masukkan NIM : ");
String nim = in.next();
System.out.print("Masukkan IPK : ");
double ipk = in.nextDouble();
Mahasiswa mahasiswa1 = new Mahasiswa(nama, nim,
ipk);
data1.sisipDipKepala(mahasiswa1);
}else if (pilih==2){
System.out.println("\t Mengisi Data Mahasiswa
\t");
System.out.print("Masukkan NAMA : ");
String nama = in.next();
System.out.print("Masukkan NIM : ");
String nim = in.next();
System.out.print("Masukkan IPK : ");
double ipk = in.nextDouble();
Mahasiswa mahasiswa3 = new Mahasiswa(nama, nim,
ipk);
data1.sisipDipEkor(mahasiswa3);
}
else if (pilih == 3) {
data1.hapusDepan();
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
84
data1.cetak("\t Hapus Data Depan \t \n
\tTampilan Setelah Hapus Data Depan\t");
} else if (pilih == 4) {
System.out.println("\t Hapus Data Tertentu
Berdasarkan Nim \t");
System.out.print("Masukkan NIM : ");
String nim = in.next();
data1.hapusTertentu(nim);
}else if (pilih==5){
data1.cetak("\t Tampil Data Mahasiswa \t");
}
else if (pilih == 6) {
System.out.println("\t Mengisi Data Urut
Mahasiswa \t");
System.out.print("Masukkan NAMA : ");
String nama = in.next();
System.out.print("Masukkan NIM : ");
String nim = in.next();
System.out.print("Masukkan IPK : ");
double ipk = in.nextDouble();
Mahasiswa mahasiswa2 = new Mahasiswa(nama, nim,
ipk);
data2.sisipDataTerurut(mahasiswa2);
}else if (pilih ==7){
data2.cetak("\t Tampilkan Data Urut Berdasarkan
IPK \t");
}
else if (pilih == 8) {
System.out.println("\t THANKS YOU \t");
System.exit(0);
}
System.out.println("");
System.out.println("Apakah anda ingin keluar ? ");
System.out.println("1. Keluar");
System.out.println("2. Tidak");
System.out.print("=> ");
int keluar = in.nextInt();
if (keluar == 1){
System.out.println("\t Terima Kasih \t");
System.exit(0);
}
}
}
}
C. PEMBAHASAN
1
2
3
4
5
6
7
8
9
10
Mahasiswa.java
Package dengan nama asdpraktikum
Deklarasi class dengan nama Mahasiswa
Deklarasi Variable nim dengan type data String dan hak akses private
Deklarasi Variable nama dengan type data String dan hak akses private
Deklarasi Variable ipk dengan type data double dan hak akses private
Konstuktor Mahasiswa
Tutup kurung konstruktor
Konstruktor Mahasiswa dengan parameter String nama, String nim, Double ipk
Inisialisasi nama = nama, operasi memasukkan nilai variabel nama ke nama
Inisialisasi nim = nim, operasi memasukkan nilai variabel nim ke nim
11
12
13
20
21
22
Inisialisasi ipk - ipk, operasi memasukkan nilai variabel ipk ke ipk
Tutup kurung konstruktor
Deklarasi method getNim dengan type data String untuk mendapatkan value balikan
dari user
Mengembalikan value nim
Tutup kurung kurawal method getNim
Deklarasi Method getNama dengan type data String untuk mendapatkan value balikan
dari user
Mengembalikan value nama
Tutup kurung kurawal method getNim
Deklarasi Method getIpk dengan type data double untuk mendapatkan value balikan
dari user
Mengembalikan value ipk
Tutup kurung kurawal method getNim
Tutup kurung kurawal class Mahasiswa
1
2
3
4
5
NodeDLL.java
Package dengan nama asdpraktikum
Deklarasi class dengan nama NodeDLL
Deklarasi Variable data dengan type data Mahasiswa
Deklarasi Variable prev dan next dengan type data NodeDLL
Kurung kurawal penutup clas NodeDLL
14
15
16
17
18
19
1
2
3
4
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
DLL_Mahasiswa.java
Package dengan nama asdpraktikum
Deklarasi class dengan nama DLL_Mahasiswa
Deklarasi Variable Pkepala dan Pekor dengan type data NodeDLL dan hak akses
private
Deklarasi Variable size dengan type data int
Konstruktor DLL_Mahasiswa
Inisialisasi pKepala sama dengan null
Inisialisasi pEkor sama dengan null
Kurung kurawal penutup konstruktor
Method getsize dengan type data int
Mengembalikan value size
Kurung kurawal penutup method getSize
Method sisipDipKepala dengan type data void dan berparameter Mahasiswa
mahasiswa
Instansiasi objek baru
Inisialisasi Baru dengan data yang lama sama dengan data yang baru
Pengondisian jika pKepala sama dengan null
Maka baru bagian depan menunjuk ke pKepala
Baru selanjutnya menunjuk ke pEkor
Pkepala sama dengan Baru
pEkor sama dengan Baru
Pengondisian jika bukan termasuk kondisi yang atas
Maka Baru selanjutnya sama dengan pKepala
pKepala.prev sama dengan baru
pKepala sama dengan Baru
Kurung kurawal penutup else
Kurung kurawal penutup method sisipDipKepala
Deklarasi method sisipDiEkor dengan type void dan berparameter Mahasiswa data
Instansiasi objek baru
Inisialisasi baru.data sama dengan data yang baru dimasukkan
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
46
47
49
50
52
53
54
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
85
86
87
88
Pengondisian jika pKepala sama dengan null
Maka baru bagian depan menunjuk ke pKepala
Baru selanjutnya menunjuk ke pEkor
Pkepala sama dengan Baru
pEkor sama dengan Baru
Pengondisian jika bukan termasuk kondisi yang atas
Maka baru.prev sama dengan pEkor
pEkor.next sama dengan baru
pEkor sama dengan baru
kurung kurawal penutup else
kurung kurawal penutup method sisipDipEkor
Deklarasi Method cetak dengan type void dan berparameter String komentar
Mencetak isi komentar
Inisialisasi kom sama dengan pKepala
Perintah mencetak”===========================”
Perintah mencetak NAMA, NIM, IPK
Perintah mencetak”===========================”
Perulangan kom jika tidak sama dengan null
Perintah Mencetak NAMA, NIM, IPK dan menampilkan isinya
Kom sama dengan kom.next yang menunjuk ke komentar selanjutnya
Kurung kurawal penutup while
Perintah mencetak”===========================”
Kurung kurawal penutup method cetak
Deklarasi method hapusDepan dengan type void
Deklarasi Variable dtHapus dengan type Mahasiswa
Inisialisasi pHapus sama dengan pKepala
Inisialisasi pKepala sama dengan pKepala.next
Inisialisasi dtHapus sama dengan pKepala.data
Inisialisasi pHapus sama dengan null
Kurung kurawal penutup method hapus depan
Deklarasi Method hapusTertentu dengan parameter String nim
Inisialisasi pHapus sama dengan pKepala
Variable pSblKini, pKini dengan type NodeDLL
Inisialisasi pSblKini sama dengan null
Inisialisasi pKini sama dengan pKepala
Pengondisian jika pKepala tidak sama dengan null
Perulangan pHapus tidak sama dengan null
Pengondisian pHapus.next.data.getNim().equeals(nim)
Maka pSblKini sama dengan pKini
Maka pHapus.next sama dengan pHapus.next.next
Pengondisian jika pHapus.next sama dengan null
Maka pHapus.next sama dengan pHapus
Kurung tutup End if
Deklarasi break berarti Perulangan berhenti
Pengondisian lain jika pHapus.data.getNim().equals(nim) && pHapus = = pKepala
Maka hapusDepan
Perulangan selesai
Tutup kurung kurawal End if
pHapus sama dengan pHapus.next
kurung kurawal penutup perintah while
Pengondisian lain jika tidak memenuhi kondisi sebelumnya
Maka akan mencetak “data kosong”
Size berkurang
Kurung kurawal penutup else
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
Kurung kurawal penutup method hapusTertentu
Deklarasi Method bubbleSort dengan type void
Inisialisasi done dengan type Boolean sama dengan false
Perulangan tidak done
Inisialisasi pBaru sama dengan pKepala
Inisialisasi done sama dengan true
Perulangan pBaru tidak sama dengan pEkor
Pengondisian jika pBaru.next.data.getIpk() ”
Menginputkan data pilihan sesuai keinginan user yang akan di variable keluar
Pengondisian jika user memilih keluar
Mencetak kalimat terima kasih
Program berhenti atau selesai menjalankannya
Kurung kurawal penutup if(keluar==1)
Kurung kurawal penutup while(true)
Kurung kurawal penutup method main
Kurung kurawal penutup clas MainDLL
D. SCREENSHOT PROGRAM
E. KESIMPULAN
-
Pengertian DLL ( Double Linked List)
Adalah elemen-elemen yang dihubungkan dengan dua pointer dalam
elemen dan list dapat melintas baik didepan atau belakang. Double linked list
memliki kemampuan untuk membaca data dengan cara maju atau mundur.
Elemen double link list terdiri dari tiga bagian :
- Bagian data informasi
- Pointer next yang merujuk ke elemen berikutnya
- Pointer prev yang merujuk ke elemen sebelumnya
-
Perbedaan Single Lingked List dengan Double Linked List
SLL
DLL
- Dalam satu node hanya terdapat - Dalam satu node terdapat 2 pointer
satu pointer yaitu next yang
yaitu prev yang menunjukkan ke
menunjukkan ke node selanjutnya
node sebelumnya dan next
menunjukkan ke node selanjutnya
- Pada saat pembacaan elemen - Tidak memerlukan pembacaan
sebelumnya diperlukan, maka
dari awal karena memilik dua
membutuhkan pembacaan ulang
pointer
dari elemen paling awal
- Kurang efisisen
- Lebih efisien
-
Implementasi Double Linked List
Contoh :
Class berikut merupakan class untuk mengimplementasikan sebuah elemen dari
DLL.
Public class Node {
int data;
Node next;
Node prev;
}
Class berikut merupakan implementasi dari Double Linked List. Class ini
memenfaatkan class Node yang telah diimplementasikan di atas :
public class DoubleLinkedList {
private NodeDLL pKepala, pEkor;
int size;
public DoubleLinkedList() {
pKepala = null;
pEkor = null;
}
public void sisipDipKepala(int dt) {
NodeDLL baru = new NodeDLL();
baru.data = dt;
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(int 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);
NodeDLL pCetak = pKepala;
while (pCetak != null) {
System.out.print(pCetak.data + "->");
pCetak = pCetak.next;
}
System.out.println();
}
}