• Tidak ada hasil yang ditemukan

Laporan Bab 6 Algoritma dan Struktur Dat

N/A
N/A
Protected

Academic year: 2018

Membagikan "Laporan Bab 6 Algoritma dan Struktur Dat"

Copied!
16
0
0

Teks penuh

(1)

LABORATORIUM PEMBELAJARAN ILMU KOMPUTER

FAKULTAS ILMU KOMPUTER

UNIVERSITAS BRAWIJAYA

BAB

: DOUBLE LINKED LIST

NAMA

: M SATRIA PUTRA UTAMA

NIM

: 155150207111168

TANGGAL : 15/10/2016

ASISTEN

: 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

Mahasiswa.java 1

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

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;

} }

NodeDLL.java 1

2 3 4 5

package asdpraktikum; public class NodeDLL { Mahasiswa data; NodeDLL prev, next; }

DLL_Mahasiswa.java 1

2 3 4 5 6 7

package asdpraktikum;

public class DLL_Mahasiswa {

private NodeDLL pKepala, pEkor; int size;

(2)

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;

(3)

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 {

(4)

119 120 121 122 123 124

pKepala.prev = baru; pKepala = baru; } bubbleSort(); } } MainDLL.java 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 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); }

(5)

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

Mahasiswa.java

1

2

3

4

5

6

7

8

9

10

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

(6)

11

12

13

14

15

16

17

18

19

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

NodeDLL.java

1

2

3

4

5

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

DLL_Mahasiswa.java

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

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

(7)

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

(8)

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() <pBaru.data.getIpk()

Memanggil method tukar dengan mengisi pBaru.next, pBaru

Done sama dengan false

Kurung kurawal penutup if

pBaru sama dengan pBaru.next

kurung kurawal penutup while

kurung kurawal penutup while

kurung kurawal penutup method bublesort

Deklarasi method tukar dengan type void dan hak akses private berparameter

NodeDLL node1, NodeDLL node2

Inisialisasi variable temp sama dengan node1.data

Inisialisasi node1.data sama dengan node2.data

Inisialisais node2.data sama dengan temp

Kurung kurawal penutup method tukar

Method sisipDataTerurut dengan parameter Mahasiswa data

Instansiasi objek baru

Inisialisasi baru.data = data

Pengondisian jika pKepala sama dengan null

Maka Pbaru bagian depan menunjuk ke pKepala

pBaru 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

kurng kurawal penutup else

perintah Memanggil method bubbleSort

kurung kurawal penutup method sisipDataTerurut

Kurung kurawal penutup class DLL_Mahasiswa

MainDLL.java

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

Package dengan nama asdpraktikum

Scanner Digunakan untuk bisa memasukkan data dari user

Deklarasi class main dengan nama MainDLL

Method Main yang berguna untuk menjalankan program

Instansiasi data1 dari class DLL_Mahasiswa

Instansiasi data2 dari class DLL_Mahasiswa

Digunakan untuk memasukkan data dari user sebagai data inputan

Perulangan untuk mengulangi data sebanyak yang diinginkan user

Perintah Mencetak DOUBLE LINKED LIST MAHASISWA

Proses mencetak “==============================”

Proses mencetak ("1. Mengisi Data Diawal ");

(9)

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

44

45

46

47

48

49

50

51

52

53

55

56

57

58

59

60

61

62

63

64

65

66

68

69

70

72

73

Proses mencetak ("6. Mengisi Data Urut ");

Proses mencetak ("7. Tampilkan Data Urut ");

Proses mencetak ("8. Exit ");

Proses mencetak “==============================”

Proses mencetak pilihan

Perintah untuk menginputkan pilihan dari user yang disimpan pada variable pilih

Cetak kosong memberi efek enter

Pengondisian jika pilih sama dengan 1

Proses mencetak Mengisi Data Mahasiswa

Proses mencetak Masukkan NAMA

User input bertipe String yang akan disimpan pada variabel nama

Proses mencetak Masukkan NIM

User input bertipe String yang akan disimpan pada variabel nim

Proses mencetak masukkan IPK

User input bertipe double yang akan disimpan pada variabel ipk

Instansiasi dengan object mahasiswa1 yang berparameter nama, nim, ipk

Memanggil sisipDipKepala dengan data1 yang berparameter mahasiswa1

Pengondisian jika pilih sama dengan 2

Proses mencetak Mengisi Data Mahasiswa

Proses mencetak Masukkan NAMA

User input bertipe String yang akan disimpan pada variabel nama

Proses mencetak Masukkan NIM

User input bertipe String yang akan disimpan pada variabel nim

Proses mencetak masukkan IPK

User input bertipe double yang akan disimpan pada variabel ipk

Instansiasi dengan object mahasiswa3 yang berparameter nama, nim, ipk

Memanggil sisipDiekor dengan data1 yang berparameter mahasiswa3

Pengondisian jika pilih sama dengan 3

Memanggil method hapus depan dari data1

Proses mencetak “tampilan data setalah di hapus depan”

Pengondisian jika pilih sama dengan 4

Mencetak kalimat “hapus data berdasarkan nim”

Mencetak “masukkan NIM”

Menginputkan nim dari user

Memanggil method hapus tertentu dari data 1 berdasarkan nim yang sesuai

Pengondisian jika pilih sama dengan 5

Memanggil method cetak untuk mencetak data1

Pengondisian jika pilih sama dengan 6

Mencetak kalimat “mengisi data urut mahasiswa”

Proses mencetak Masukkan NAMA

User input bertipe String yang akan disimpan pada variabel nama

Proses mencetak Masukkan NIM

User input bertipe String yang akan disimpan pada variabel nim

Proses mencetak Masukkan IPK

User input bertipe double yang akan disimpan pada variabel ipk

Instansiasi dengan object mahasiswa2 yang berparameter nama, nim, ipk

Memanggil sisipDataTerurut dengan data2 yang berparameter mahasiswa2

Pengondisian jika pilih sama dengan 7

Memanggil method cetak dari data2 yang telah urut datanya

Pengondisian jika pilih sama dengan 8

Maka akan mencetak kalimat THANKS YOU

Program berhenti atau selesai menjalankannya

Memberi efek enter

(10)

74

75

76

77

78

79

80

81

82

83

84

Mencetak kalimat “1. Keluar”

Mencetak kalimat “2. Tidak”

Mencetak tanda “=>”

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

(11)
(12)
(13)
(14)

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

(15)

-

Perbedaan Single Lingked List dengan Double Linked List

SLL

DLL

-

Dalam satu node hanya terdapat

satu pointer yaitu next yang

menunjukkan ke node selanjutnya

-

Pada saat pembacaan elemen

sebelumnya

diperlukan,

maka

membutuhkan pembacaan ulang

dari elemen paling awal

-

Kurang efisisen

-

Dalam satu node terdapat 2 pointer

yaitu prev yang menunjukkan ke

node

sebelumnya

dan

next

menunjukkan ke node selanjutnya

-

Tidak memerlukan pembacaan

dari awal karena memilik dua

pointer

-

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;

(16)

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

Referensi

Dokumen terkait

Berdasarkan analisa mean , dapat disimpulkan bahwa perilaku konsumsi yang ditunjukan oleh masyarakat Surabaya dalam mengkonsumsi produk-produk pastry dan bakery pada tahap

Pengawasan terhadap tenaga pemasaran di Koperasi Simpan Pinjam Artha Prima harus lebih ditingkatkan karena mempunyai pengaruh yang signifikan dalam meningkatkan kinerja

Hasil penelitian ekuitas merek terhadap loyalitas nasabah bank Danamon ini konsisten dengan penelitian yang dilakukan oleh YulmidaMella, dkk (2013) yang meneliti

Hasil analisis varians satu jalur untuk burnout ditinjau dari dukungan sosial pada atlet Women’s National Basketball League (WNBL) Indonesia, diperoleh F hitung &gt; F tabel

Selanjutnya peneliti merancang RPP yang mengacu pada format dari Permendikbud 103 dimana di dalam RPP tersebut digunakan model Discovery Learning yang terdiri dari (

Untuk membuat media promosi yang ingin memperlihatkan ciri khas klinik kecantikan yang sesuai dengan hasil analisis data dan keyword, diharapkan akan didapatkan

terhadap prestasi belajar matematika siswa kelas VII SMP Negeri 1 Ngunut.. Tahun

Jasa giro merupakan suatu imbalan yang diberikan oleh bank kepada giran atas sejumlah saldo gironya yang mengendap di bank.Jasa giro ini relatif lebih kecil