Anda di halaman 1dari 12

PRAKTIKUM ALGORITMA DAN STRUKTUR DATA I LAPORAN PRAKTIKUM 3 : DLL

Disusun Oleh : Nama Nim Tanggal Praktikum Assisten 1 Assisten 2 : Martasoid Fitriza : 105090606111002 : 16 November 2011 : Aldi Sunantio : Inthi Bau Surotih

LABORATORIUM KOMPUTER JURUSAN MATEMATIKA FAKULTAS MIPA UNIVERSITAS BRAWIJAYA MALANG 2011

PEMBAHASAN PROGRAM
Program ini dibuat untuk memasukkan data (baik di awal, di akhir dan ditengah), kemudian untuk menghapus data (baik di awal, di akhir maupun data yang kita inginkan), serta untuk menampilkan data yang telah diinputkan (baik dari depan maupun belakang) pada Double Linked List (DLL). Pada method insertafter yaitu untuk menginputkan data2 setelah data1, didalamnya terdapat fungsi break;. Sehingga, jika data1 jumlahnya lebih dari1 maka data2 akan diinputkan setelah data1 yang berada diurutan terdepan. Namun, jika fungsi break; dihapus maka data2 akan berjumlah sama dengan data1 dan terletak setelah data1. Pada method deletedata yaitu untuk menghapus data dengan nilai yang diinginkan, didalamnya juga terdapat fungsi break;. Sehingga jika jumlah data dengan nilai yang sama lebih dari 1 dan akan dihapus, maka data yang terhapus adalah data pada urutan terdepan. Namun, jika fungsi break; dihapus maka data dengan nilai yang sama tadi akan terhapus secara keseluruhan.

SOURCE CODE
No. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Node.java package laporan3; class Node{ int Data; Node next; Node prev; Node(){ this.next=null; this.prev=null; } Node(int d){ this.Data = d; } void display(){ System.out.print(Data+" "); } }

No. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

DLL.java package laporan3; class DLL{ Node depan; Node belakang; DLL(){ depan = null; belakang = null; } void insertawal(int d){ Node baru = new Node(d); if(depan==null) depan=belakang=baru; else{ depan.prev=baru;

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 60 61 62 63 64 65 66 67

baru.next=depan; depan=baru; } displaydepan(); displaybelakang(); } void insertakhir(int d){ Node baru = new Node(d); if(depan==null) depan=belakang=baru; else{ belakang.next = baru; baru.prev=belakang; belakang=baru; } displaydepan(); displaybelakang(); } void insertafter(int d1, int d2){ Node cari = depan; Node baru = new Node (d2); System.out.println("============================== ===="); System.out.println("Data dimasukkan setelah angka "+d1); while(cari!=belakang.next){ if(cari.Data==d1){ baru.next = cari.next; cari.next.prev = baru; cari.next = baru; baru.prev = cari; displaydepan(); displaybelakang(); break; } cari = cari.next; if(cari==belakang) System.out.println("Data "+d1+"

68 69 70 71 72 73 74 75 76 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

tidak ditemukan"); } System.out.println("============================== ====\n"); } int deleteawal(){ System.out.println("============================== ===="); System.out.println("Data awal dihapus!"); Node temp = depan; depan = depan.next; displaydepan(); displaybelakang(); System.out.println("============================== ====\n"); return temp.Data; } int deleteakhir(){ System.out.println("============================== ===="); System.out.println("Data akhir dihapus!"); Node temp = belakang; belakang = belakang.prev; displaydepan(); displaybelakang(); System.out.println("============================== ====\n"); return temp.Data; }

116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162

int deletedata(int d1){ System.out.println("============================== ===="); System.out.println("Hapus data = "+d1+"!!"); Node temp = null; Node cari = depan; while(cari!=belakang.next){ if(depan.Data==d1&&cari==depan){ cari=cari.next; temp=depan; deleteawal(); displaydepan(); displaybelakang(); break; } else if(cari.Data==d1&&cari!=depan&&cari!=belakang){ temp = cari; cari.prev.next = cari.next; cari.next.prev = cari.prev; cari = cari.next; displaydepan(); displaybelakang(); break; } else if (belakang.Data==d1&&cari==belakang){ temp = belakang; deleteakhir(); displaydepan(); displaybelakang(); break; } else if(cari==belakang){ System.out.println("Data yang akan dihapus tidak ditemukan"); System.out.println("============================== ====\n");

163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209

return 0; } else cari = cari.next; } System.out.println("============================== ====\n"); return temp.Data; } void displaydepan(){ System.out.println("Data dari depan ke belakang :"); Node cari = depan; while(cari!=belakang.next){ cari.display(); cari=cari.next; } System.out.println("\n"); } void displaybelakang(){ System.out.println("Data dari belakang ke depan"); Node cari = belakang; while(cari!=depan.prev){ cari.display(); cari = cari.prev; } System.out.println("\n"); } }

No. 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

Laporan3.java package laporan3; class Laporan3{ public static void main(String[] args) { DLL d = new DLL(); System.out.println("============================== ===="); System.out.println("Insert akhir :"); d.insertakhir(6); d.insertakhir(7); d.insertakhir(8); d.insertakhir(9); d.insertakhir(10); d.insertakhir(11); System.out.println("============================== ====\n"); System.out.println("============================== ===="); System.out.println("Insert awal"); d.insertawal(4); d.insertawal(3); d.insertawal(2); d.insertawal(1); d.insertawal(5); d.insertawal(4); System.out.println("============================== ====\n"); d.insertafter(3, 90); d.insertafter(50, 90); d.deleteawal(); d.deleteakhir(); d.deletedata(90); d.deletedata(100); } }

ANALISA PROGRAM
Class : DLL.java Baris ke17-23 Keterangan Pada method insertawal : jika tidak ada data, maka depan = belakang = data baru jika ada data, maka data baru menjadi data paling depan Pada method insertakhir : Jika tidak ada data, maka depan=belakang=baru Jika ada data, maka data baru menjadi data paling akhir Pada method insertafter : Melakukan perulangan untuk mencari letak dari data1, jika letaknya ditemukan maka akan dimasukkan data2 setelah data1 (baris ke-56-64), dan dilakukan proses break; untuk keluar dari perulangan. Jika data1 tidak ditemukan maka akan dilakukan proses cetak (baris 67-68). Method deleteawal: Berupa method yang mengembalikan nilai data pada data terdepan, kemudian mengubah data terdepan menjadi data pada urutan selanjutnya (depan = depan.next). Method deleteakhir: Berupa method yang mengembalikan nilai data pada data terdakhir, kemudian mengubah data terdakhir menjadi data pada urutan sebelumnya (belakang = belakang.prev). Method deletedata: Berupa method yang mengembalikan nilai data pada data yang diinginkan. Pertama melakukan perulangan untuk mencari data yang akan dihapus (misal data1). Jika data1 ditemukan pada urutan terdepan maka akan dipanggil method deleteawal (baris ke-131) dan dilakukan proses break. Jika data1 ditemukan ditengah- tengah maka akan dilakukan penghapusan data dengan memindahkan pointer next pada data sebelum data1 menuju data sesudah data1(baris ke-140), kemudian memindahkan pointer prev pada data sesudah data1 menuju data sebelum data1 (baris ke-141) sehingga tidak ada data yang memiliki pointer ke data1. Dan dilakukan proses break. Jika data1 berada di urutan terakhir, maka akan dipanggil

32-39

55-70

78-94

97-113

116-177

method deleteakhir (baris ke-151) dan dilakukan proses break. Dan jika data1 tidak ditemukan pada data yang ada maka akan dilakukan proses cetak (baris ke-158, 159) Method untuk mencetak data yang ada dengan urutan dari depan sampai belakang Method untuk mencetak data yang ada dengan urutan dari belakang sampai depan

179-192 195-207

OUTPUT

Anda mungkin juga menyukai