Anda di halaman 1dari 12

PEMBAHASAN

class simpul { protected perintah protected merupakan perintah untuk membatasi hak akses, sehingga variabel nama dan umur tidak dapat diakses oleh kelas yang lain String nama; int umur; simpul kiri; simpul kanan; Kelas pertama dengan nama simpul public void ngisiSimpul(String NAMA, int UMUR) Void disamping digunakan untuk mengisi data pada simpul yang memiliki 2 variabel yaitu NAMA beripe string dan UMUR bertipe Integer. { nama = NAMA; umur = UMUR; } Pada Program Double Linked List didalam simpul terdapat 2 simpul yaitu simpul kanan dan simpul kiri, simpul didalam Double Linked List ini disebut Simpul Ganda. Simpul ganda inilah yang memungkinkan program untuk mengaitkan diri dengan simpul dikanan dan dikirinya.sehingga data bisa diakses kekiri tidak seperti Single Linked List yang hanya bisa menunjuk ke arah kanan. Dalam penjabaran vzr sama seperti halnya Single Linked List yaitu Simpul(String d) data d bertipekan string. void cetakSimpul() Void disamping digunakan untuk mencetak simpul { System.out.print (nama + "-" + umur + " "); Perintah untuk mencetak simpul yang telah dimasukkan. } } class senarai { protected perintah protected merupakan perintah untuk membatasi hak akses, sehingga variabel nama dan umur tidak dapat diakses oleh kelas yang lain. simpul awal; public void inisialisasiSenaraiKosong() { awal = null; akhir = null; } int hitungJumlahSimpul() Sintaks di samping berfungsi untuk mengitung jumlah simpul { int N = 0; simpul bantu; bantu = awal; while (bantu!=null) { bantu = bantu.kanan; N++; } return (N); } Perintah di atas merupakan perdeklarasian untuk menghitung jumlah simpul dengan tipe data integer yanag dimulai dari 0. Variabel bantu dideklarasikan dengan nama variabel yaitu awal. N++ berarti simpul tersebut akan bertambah satu.

void tambahDepan(String NAMA, int UMUR) Void disamping digunakan untuk menambahkan data pada simpul bagian tengah , yang memiliki dua variabel yaitu nam bertipe string dan umur bertipe integer { System.out.println("tambah depan '" +NAMA+ "' dilakukan.."); Perintah untuk mencetak pemberitahuan bahwa penambahan yang dilakukan di bagian tengan telah berhasil dilakukan. simpul baru = new simpul(); Pembuatan objek baru dengan nama baru baru.ngisiSimpul(NAMA, UMUR); if (awal == null) // jika senarai masih kosong { awal = baru; akhir = baru; baru.kiri = null; baru.kanan = null; } else // jika senarai tidak kosong { baru.kanan = awal; awal.kiri = baru; awal= baru; awal.kiri=null; } } Dalam program class senarai diatas sama seperti class senarai tunggal pada praktikum sebelumnya dimana terdapat simpul awal dan simpul akhir. Dalam senarai ini juga didefinisikan bahwa awal adalah kosong (null) dan akhir juga kosong ( null). Untuk menambahkan data baru kedalam program. Simpul baru = new Simpul menandakan bahwa Simpul baru merupakan new simpul. if(awal==null)merupakan fungsi perulangan jika awal sama dengan kosong maka program akan menandai bahwa akhir adalah baru dan data baru mengikat var disebelah kanannya(baru.kanan = awal;) dan var baru akan mengikat var dikirinya yang merupakan var kosong.(baru.kiri = null) sehingga awal sama dengan baru(awal = baru;). void tambahBelakang(String NAMA, int UMUR) Void disamping digunakan untuk menambah data pada simpul bagian belakang yang memiliki 2 variabel yaitu NAMA beripe string dan UNUR bertipe Integer. { System.out.println("tambah belakang '" +NAMA+ "'dilakukan.."); Perintah untuk mencetak pemberitahuan bahwa penambahan yang dilakukan di bagian belakang telah berhasil dilakukan. simpul baru = new simpul(); Pembuatan objek baru dengan nama baru baru.ngisiSimpul(NAMA, UMUR); if (awal == null) { awal = baru; akhir = baru; baru.kiri = null; baru.kanan = null; } else {// jika senarai tidak kosong baru.kiri = akhir; akhir.kanan = baru; akhir = baru; baru.kanan = null; } } Perintah di atasdidefinisikan bahwa awal adalah kosong (null) dan akhir juga kosong ( null). Untuk menambahkan data baru kedalam program. Simpul baru = new Simpul menandakan bahwa Simpul baru merupakan new simpul. if(awal==null)merupakan fungsi perulangan jika awal sama dengan

kosong maka program akan menandai bahwa akhir adalah baru dan data baru mengikat var disebelah kanannya(baru.kanan = awal;) void tambahTengah(int POSISI, String NAMA, int UMUR) Void disamping digunakan untuk menambah data pada bagian tengah simpul yang memiliki 2 variabel yaitu NAMA beripe string dan UNUR bertipe Integer. { System.out.println("tambah tengah '" +NAMA+ "'dilakukan.."); Perintah untuk mencetak pemberitahuan bahwa penambahan yang dilakukan di bagian tengah telah berhasil dilakukan. if (awal == null) { simpul baru = new simpul(); Perintah untuk mendeklarasikan pembuatan objek baru dengan nama baru baru.ngisiSimpul(NAMA, UMUR); awal = baru; akhir = baru; baru.kiri = null; aru.kanan = null;} else { int jumlahSimpul = hitungJumlahSimpul (); if (POSISI==1) tambahDepan (NAMA, UMUR); else if (POSISI > jumlahSimpul) tambahBelakang (NAMA, UMUR); else { simpul bantu ; bantu = awal; int N = 1; while ((N<POSISI - 1) && (bantu!=akhir)) { bantu = bantu.kanan; N++; } if(awal==null) merupakan fungsi perulangan jika awal sama dengan kosong maka program akan menandai bahwa akhir adalah baru dan data baru mengikat var disebelah kanannya(baru.kanan = awal;) dan var baru akan mengikat var dikirinya yang merupakan var kosong.(baru.kiri = null) sehingga awal sama dengan baru(awal = baru;) Pada perulanagn tersebut ada perulangan lagi untuk menghitung jumlah simpul yang menyatakan bahwa jika posisi awal adalah 1 maka penambahan dilakukan di depan, jika tidak maka penambhan dilakukan di bagian belakang. simpul baru = new simpul (); Perintah untuk mendeklarasikan pembuatan objek baru dengan nama baru baru.ngisiSimpul (NAMA, UMUR); baru.kiri = bantu.kiri; baru.kiri.kanan = baru; baru.kanan = bantu; bantu.kanan = baru; } } } void cetakSenarai() Void disamping digunakan untuk menvetak senarai yang telah dibuat. { System.out.print ("CETAK : "); if (awal==null) // jika senarai masih kosong System.out.print ("....senarai kosong..."); else {

simpul bantu; bantu = awal; while (bantu != null) { bantu.cetakSimpul(); bantu = bantu.kanan; //bantu = bantu.kiri; } } Program tersebut digunakan untuk menghapus data diakhir senarai.Disini dijelaskan bahwa Simpul bantu merupakan variabel awal(Simpul bantu = awal;). Dalam program ini digunakan pengulangan while. Variabel bantu mengikat variabel dikanan yang sama dengan variabel akhir, fungsi cut digunakan supaya perulangan tidak melakukan backtracking setelah ditemukan variabel diakhir.( while(bantu.kanan !=akhir)). Variabel bantu adalah variabel yang hanya mengikat data dikanan(bantu=bantu.kanan;). Simpul yang dihapus merupakan berada diakhir simpul(simpul hapus= akhir;), sehingga variabel akhir adalah vaiabelr bantu(akhir=bantu;), Dan variabel akhir mengikat variabel disebelah kanan yang merupakan kosong(tidak ada data lagi) maka program akan melakukan penghapusan. System.out.println(""); perintah yang berfungsi untuk member jarak spasi pada output } void hapus(String NAMA) Void disamping digunakan untuk menghapus data pada simpul yang memiliki 1 variabel yaitu NAMA beripe string. Sehingga yang bias dihapus hanya nama saja sedangkan umur tidak. { if (awal == null) { System.out.println ("senarai kosong, menghapus tidak dapat dilakukan"); } Perintah yang berfungsi untuk mencetak pemberitahuan bahawa senarai kosong sehingga penghapusan tidak dapat dilakukan. else { if (awal.nama.equals (NAMA)) { System.out.println ("menghapus "+NAMA+" dilakukan.."); if (awal == akhir) inisialisasiSenaraiKosong(); else { awal = awal.kanan; awal.kiri = null;}} else if (awal.nama.equals(NAMA)) { System.out.println ("menghapus "+NAMA+" dilakukan.."); akhir = akhir.kiri; awal = awal.kanan; } else { simpul bantu; bantu = awal; boolean ketemu = false; while (bantu!=akhir) //while(bantu.kanan.nama != HNAMA) { if (bantu.nama.equals (NAMA)) { System.out.println("menghapus "+NAMA+"dilakukan."); ketemu = true;

bantu.kanan.kiri = bantu.kiri; bantu.kiri.kanan = bantu.kanan; break; } bantu=bantu.kanan; } if (ketemu==false) System.out.println ("data ' "+ NAMA + "' tidak ditemukan"); } } }

TUGAS
Modifikasi program di modul dengan menambahkan jenis kelamin dan umur!
class simpul { protected String nama; int umur; char jkel; String jbtn; simpul kiri; simpul kanan; public void ngisiSimpul(String NAMA, int UMUR, char JK, String JABATAN) { nama = NAMA; umur = UMUR; jkel= JK; jbtn= JABATAN; } void cetakSimpul() { System.out.print (nama + "-" + umur + " "+jkel+" "+jbtn+" "); }} class senarai { protected simpul awal; simpul akhir; public void inisialisasiSenaraiKosong() { awal = null; akhir = null; } int hitungJumlahSimpul() { int N = 0; simpul bantu; bantu = awal; while (bantu!=null) { bantu = bantu.kanan; N++; } return (N); } void tambahDepan(String NAMA, int UMUR,char JK, String JABATAN) { System.out.println("tambah depan '" +NAMA+ "' dilakukan.."); simpul baru = new simpul(); baru.ngisiSimpul(NAMA, UMUR, JK, JABATAN); if (awal == null) // jika senarai masih kosong { awal = baru; akhir = baru; baru.kiri = null; baru.kanan = null; } else // jika senarai tidak kosong { baru.kanan = awal; awal.kiri = baru; awal= baru; awal.kiri=null; }

} void tambahBelakang(String NAMA, int UMUR, char JK, String JABATAN) { System.out.println("tambah belakang '" +NAMA+ "'dilakukan.."); simpul baru = new simpul(); baru.ngisiSimpul(NAMA, UMUR, JK, JABATAN); if (awal == null) { awal = baru; akhir = baru; baru.kiri = null; baru.kanan = null; } else {// jika senarai tidak kosong baru.kiri = akhir; akhir.kanan = baru; akhir = baru; baru.kanan = null; } } void tambahTengah(int POSISI, String NAMA, int UMUR, char JK, String JABATAN) { System.out.println("tambah tengah '" +NAMA+ "'dilakukan.."); if (awal == null) { simpul baru = new simpul(); baru.ngisiSimpul(NAMA, UMUR, JK , JABATAN); awal = baru; akhir = baru; baru.kiri = null; baru.kanan = null; } else { int jumlahSimpul = hitungJumlahSimpul (); if (POSISI==1) tambahDepan (NAMA, UMUR,JK , JABATAN); else if (POSISI > jumlahSimpul) tambahBelakang (NAMA, UMUR, JK , JABATAN); else { simpul bantu ; bantu = awal; int N = 1; while ((N<POSISI ) && (bantu!=akhir)) { bantu = bantu.kanan; N++; } simpul baru = new simpul (); baru.ngisiSimpul (NAMA, UMUR, JK , JABATAN); baru.kiri = bantu.kiri;

baru.kiri.kanan = baru; baru.kanan = bantu; bantu.kiri = baru; } } } void cetakSenarai() { System.out.print ("CETAK : "); if (awal==null) // jika senarai masih kosong System.out.print ("....senarai kosong..."); else { simpul bantu; bantu = awal; while (bantu != null) { bantu.cetakSimpul(); bantu = bantu.kanan; //bantu = bantu.kiri; } } System.out.println(""); } void tambahHapus(String NAMA) { if (awal == null) { System.out.println ("senarai kosong, menghapus tidak dapat dilakukan"); } else { if (awal.nama.equals (NAMA)) { System.out.println ("menghapus "+NAMA+" dilakukan.."); if (awal == akhir) inisialisasiSenaraiKosong(); else { awal = awal.kanan; awal.kiri = null; } } else if (awal.nama.equals(NAMA)) { System.out.println ("menghapus "+NAMA+" dilakukan.."); akhir = akhir.kiri; awal = awal.kanan; } else { simpul bantu;

bantu = awal; boolean ketemu = false; while (bantu!=akhir) //while(bantu.kanan.nama != HNAMA) { if (bantu.nama.equals (NAMA)) { System.out.println("menghapus "+NAMA+"dilakukan."); ketemu = true; bantu.kanan.kiri = bantu.kiri; bantu.kiri.kanan = bantu.kanan; break; } bantu=bantu.kanan; } if (ketemu==false) System.out.println ("data ' "+ NAMA + "' tidak ditemukan"); } } } } //----------------------bagian program utama------------------------------------------------class TugasSenaraiGanda { public static void main(String[] args) { senarai mahasiswa = new senarai(); mahasiswa.inisialisasiSenaraiKosong(); mahasiswa.tambahDepan("Dedi",15,'L', "OB"); mahasiswa.tambahDepan("Cecep",12, 'L', "OWNER"); mahasiswa.tambahDepan("Ani",11,'P', "DIREKTUR"); mahasiswa.tambahDepan("Abud",10,'L', "KEUANGAN"); mahasiswa.cetakSenarai(); mahasiswa.tambahBelakang("Eko",25,'L', "SEKERTARIS"); mahasiswa.tambahBelakang("Feri",25,'L', "KARYAWAN"); mahasiswa.tambahBelakang("Gunawan",32,'L', "SECURITY"); mahasiswa.tambahBelakang("Hasan",19,'L', "KARYAWAN"); mahasiswa.cetakSenarai(); mahasiswa.tambahTengah(4,"Zaenal",25,'L', "MANEGER"); mahasiswa.cetakSenarai(); mahasiswa.tambahHapus ("Dedi"); mahasiswa.cetakSenarai(); }}

KESIMPULAN
Setelah melakukan praktikum Double LinkedList dapat saya ambil kesimpulan bahwa Double LinkedList hampir sama dengan Single LinkedList. Perbedaannya Double LinkedList lebih fleksibel dibanding Single LinkedList karena pada Double LinkedList semua simpulsimpulnya yang ada di dalamnya memiliki dua buah penunjuk yang dipakai untuk mengkaitkan diri dengan simpul lain yang ada di sebelah kanan dan sebelah kirinya.

LAPORAN PRAKTIKUM STRUKTUR DATA PERTEMUAN 6 DOUBLE LINKEDLIST

Disusun oleh : Nama: Ryan Dwi Handoko NIM: 125410044 Jurusan: Teknik Informatika

JURUSAN TEKNIK INFORMATIKA SEKOLAH TINGGI MANAJEMEN DAN INFORMATIKA AKAKOM YOGYAKARTA 2013

Anda mungkin juga menyukai