MODUL 7 POHON Pembahasan

advertisement
MODUL 7
POHON
A. Pembahasan
Pratikum 1 :
class simpul
{ public
String elemen;
simpul kiri;
simpul kanan;
public void ngisiElemen(String ELEMEN)
{ elemen = ELEMEN;
}
}
Potongan program dia atas merupakan sebuah kelas dengan nama simpul, didalam kelas
tersebut terdapat tipe data String dengan nama elemen, simpul kiri dan simpulkan kanan.
Terdapat pula sebuah method dengan nama ngisiElemen yang dikerjakan pada dengan tipe data
String yang dengan nama variabelnya ELEMEN. Dan method tersebut bersifat public sehingga
dapat diakses semua method yang ada pada program ini.
class pohon
{ public
simpul akar;
public void deklarasiPohon()
{ akar = null;
}
Sedangkan pada potongan program di atas merupakan sebuah kelas dengan nama pohon,
yang mana di dalam kelas tersebut hanya terdiri simpulkan akar, dan memiliki method dengan
nama deklarasiPohon, yang bersifat public dan menyatakan pula bahwa akar sama dengan null.
simpul tambahSimpul(simpul Petunjuk, String ELEMEN)
{ if (Petunjuk == null)
{ simpul baru = new simpul();
baru.ngisiElemen(ELEMEN);
baru.kiri = null;
baru.kanan = null;
Petunjuk = baru;
return(Petunjuk);
}
program di atas merupakan sebuah method dengan nama tambahSimpul,dengan variable
petunjuk dan ELEMENT. Menggunakan pernyataan if yaitu jika penunjuk sama dengan null,
berarti node dalam keadaan kosong. Sehinga sebuah objek baru di ciptakan, yaitu dengan nama
baru .Maka simpul baru akan masuk dalam pohon dengan perintah atau method ngisiElemen,
sehingga simpul baru masuk maka simpul tersebut akan menjadi ELEMEN atau simpul dalam
pohon. Saat elemen atau simpul tersebut sudah masuk dalam pohon, maka terdapat satu
simpul/node, dan simpul/elemen tersebut pada sisi kiri dari simpul tersebut bernilai null, dan
pada sisi kanannya pula akan bernilai null, dan simpul tersebut akan menjadi penunjuk dalam
pohon.
else
{ if (ELEMEN.compareTo(Petunjuk.elemen) < 0)
{ Petunjuk.kiri = tambahSimpul(Petunjuk.kiri, ELEMEN);
return(Petunjuk);
Lanjutan dari perintah If di atas, jika penunjuk tidak sama dengan null, maka dihadapkan
pula dalam sebuah kondisi. jika ELEMEN dibandingkan dengan petunjuk elemen dan hasilnya
lebih kecil dari nol (0), maka akan dikerjakan perintah selanjutnya yiatu petunjuk kekiri sama
dengan melakukan tambah simpul, dan simpul penunjuk akan ke kiri dari ELEMEN. Dan akan
dilakukan nilai pengembalian penunjuk tersebut sepeti semula. jika elemen atau simpul yang
akan masuk dalam pohon dibandingkan dengan petunjuk simpul lebih kecil,maka akan berada
pada posisi kiri dari penunjuk tersebut, dan akan dikembalikan lagi nilai penunjuk seperti
semula.
}
else
{ Petunjuk.kanan = tambahSimpul(Petunjuk.kanan, ELEMEN);
return(Petunjuk);
}
}
}
Sedangkan jika pernyataan sebelumnya tidak terpenuhi, maka penunjuk ke kanan sama
dengan melakukan tambah simpul petunjuk kekanan untuk menjadikan eleman atau simpul
dalam pohon, maka setalah perintah tersebut telah dilakukan, akan dikerjakan nilai pengembalian
petunjuk seperti semula
void preOrder(simpul Penunjuk)
{ if (Penunjuk != null)
{ System.out.print(Penunjuk.elemen + ",");
preOrder(Penunjuk.kiri);
preOrder(Penunjuk.kanan);
}
}
Method dengan nama PreOrder yang merupakan simpul penunjuk. jika simpul penunjuk
tidak sama dengan null, maka element pun dicetak. Kemudian preOrder(Penunjuk.kiri);
dimulai dari kiri,yang menyatakan bahwa simpul penunjuk akan ke kiri hingga penunjuk bernilai
null, maka tidak dikerjakan. Kemudian akan berpindah pada preOrder(Penunjuk.kanan);
untuk dikerjakan.
void inOrder(simpul Penunjuk)
{ if (Penunjuk != null)
{ inOrder(Penunjuk.kiri);
System.out.print(Penunjuk.elemen + ",");
inOrder(Penunjuk.kanan);
}
}
Merupakan Method inOrder dengan menggunakan simpul penunjuk sebagai penelusuran dalam
pohon. Didalam method ini terdapat sebuah kondisi jika penunjuk tidak sama dengan null, maka
dikerjakan perintah inOrder(Penunjuk.kiri);,berarti node dibaca dari kiri.Dan kemudian
elemen akan dicetak dengan perintah:
System.out.print(Penunjuk.elemen + ",");,Dan
setelah dicetak, maka yang akan dikerjakan selanjutnaya adalah membaca node pohon ke kanan,
dengan perintah inOrder(Penunjuk.kanan);.
void postOrder(simpul Penunjuk)
{ if (Penunjuk != null)
{ postOrder(Penunjuk.kiri);
postOrder(Penunjuk.kanan);
System.out.print(Penunjuk.elemen + ",");
}
}
}
Method postOrder dengan menggunakan simpul penunjuk juga sebagai penelusuran dalam
pohon. postOrder postOrder(Penunjuk.kiri);,membaca node pohon yang dimulai dari kiri,
kemudian akan dikerjakan perintah postOrder(Penunjuk.kanan);,yang mana simpul
penunjuk akan dibaca dari kanan, setelah dilakukan kunjungan pada node dalam pohon dari kiri,
maka
selanjutnya
pada
program
ini,
akan
dilakukan
System.out.print(Penunjuk.elemen + ",");,merupakan
ke
kanan.
Setelah
itu,
perintah untuk mencetak element.
public class ProgramPohonBiner {
public static void main(String[] args) {
pohon PohonBiner = new pohon();
potongan program diatas merupakan class utama/main class dari program Pohon Biner ini.
Dengan menciptakan objek pohon yang baru dan aka dihasilkan output dengan perintah dibawah
ini :
PohonBiner.deklarasiPohon();
PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "M");
PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "P");
PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "D");
PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "A");
PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "S");
PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "K");
PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "N");
PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "G");
PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "O");
PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "L");
PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "W");
PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "F");
PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "J");
PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "T");
PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "H");
PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "U");
Terdapat 16 simpul yang akan masuk ke dalam pohon, dengan simpul pertama akan menjadi
root dalam pohon. Dari data atau simpul/elemen di atas, dapat diketahui bahwa yang menjadi
root adalah M. Kemuadian semua simpul akan dikerjakan dengan perintah tambah simpul, dan
dilihat letak posisinya yang aka dibandingkan dengan penunjuk simpul.
Dari perintah simpul/elemen tersebut adalah dapat dicontohkan salah satu :
PohonBiner.akar =PohonBiner.tambahSimpul(PohonBiner.akar, "M"); //
simpul dalam
pohon biner akan menjadi akar sama dengan pohon biner akan melakukan tambah simbul di
dalam pohon, dan huruf atau simpul yang ada diantara petik dua akan amsuk ke dalam pohon
biner dan akan menjadi akar. Maka dari 16 simpul tersebut akan ada 16 akar yang akan masuk
dalam pohon biner. 16 simpul tersebut dapat dikerjakan dengan menggunakan preOrder, seperti
berikut :
PohonBiner.preOrder(PohonBiner.akar);
}
}
Untuk output program tersebut, dapat dilihat pada listing modul 7.
B. Kesimpulan
Pohon atau tree adalah kumpulan akar(root), cabang, dan simpul (node) yang saling
terhubung secara hirarki. Sedangkan pada modul ini membahas tentnag jenis pohon biner (binary
tree), yaitu pohon dimana setiap simpulnya (node) hanya boleh memiliki maksimal 2 anak
(cabang kiri dan kanan). Terdapat beberapa istilah dalam tree, yaitu simpul akar, adalah simpul
yang tidak memiliki parent. Kemudian ada simpul daun, adalah simpul yang tidak memiliki
anak. Sedangkan simpul(node) itu sendiri terbagi atas dua, yaitu simpul anak (children), yang
hanya boleh mempunyai 1 oarangtua. Dan simpul orangtua (parent), yang hanya boleh
mempunyai maksimal 2 anak, namun boleh juga tidak mempunyai anak.
C. Listing
Terlampir.
MODUL 8
COLLECTION
A. Pembahasan
Pratikum 1 :
import java.util.*;
//untuk mengimport class-class yang ada pada java util
public class Example {
private List list;
public List getList() {
return list;
}
Sedangkan pada potongan program di atas merupakan, nama kelas dari program ini, yaitu
dengan nama kelasnya adalah kelas Example. Kelas tersebut memiliki tingkat akses private,
karena menggunakan akses private, maka data dan method dapat diakses oleh kelas yang
memilikinya saja. Dan dengan menggunakan variabel list dari tipe data List. Public List
getList(), berarti merupakan konstruktor yang dapat diakses semua bagian atau method dalam
program ini, yiatu pada List dengan perintah getList atau mengambil daftar List. Maka nilai list
akan dikembalikan kembali.
Example() {
list = new ArrayList();
list.add(new String("Hello world!"));
list.add(new String("Good bye!"));
}
Dan pada potongan program di atas, merupakan bagian isi dari program dengan nama kelas
Example, yiatu list = new ArrayList, merupakan penciptaan list dengan ArrayList, yang teridiri
dari, list yang ditambah dengan tipe data String dengan varaibel atau isi dari tipe data tersebut
adalah “Hello world!”,kemudian ditambah lagi daftarnya dengan tipe data String pula yang
menyatakan pernyataan “Good bye!”.
public void printList() {
for (Object s:list) {
System.out.println(s);
}
}
Pada potongan program di atas adalah sebuah method atau konstruktor dengan nama
printList. Dan pada method ini dapat diakses oleh semua method lain yang terdapat dalam
program ini. Pada method ini akan membaca dari kels Example dengan perulangan, yang
menyatakan objek s adalah list atau daftar yang ditambah dari kelas Example tersebut. Dengan
menggunakan perintah System.oyt.println(s), berfungsi untuk memanggil atau menampilkan
hasil dari perulangan for tersebut.
public static void main(String arrgv[]) {
Example e = new
Example();
e.printList();
dari potongan program di atas, merupakan suatu method yang mana bersifat public sehingga
dapat diakses semua method yang ada pada program ini, perintah tersebut juga merupakan
perintah method dengan memulai program dengan method main. Dalam method tersebut,
diciptakaannya object dari class example dan akan dibawa ke dalam method printList untuk
dieksekusi atau ditampilkan pada outputnya.
System.out.println("Data Setelah diurutkan : ");
Collections.sort(e.getList());
e.printList();
}
}
Masih sambungan dari program di atas, yiatu lanjutan program pada method void main
tersebut. Namun pada potongan program di atas merupakan pengurutan dari data atau objek e
nya pada kelas Example yang penambahan daftar dari tipe data String. Dengan menggunakan
perintah sort, yiatu mengumpulkan data e yang ada kemudian di urutkan datanya, yiatu data atau
obejk baru (e) diambil kemudian diurutkan dan kemudian hasilnya akan dibawa kepada method
printList untuk ditampilkan pada output. Karena mengalamin sort/urutan, maka dilihat dari
kedua data tersbeut yiatu data “Hello world!” dan “Good bye!”. Yang memiliki urutan pertaman
adalah “Good bye!”, kemudian “Hello world!. Sehingga sort yang dilakukan dengan cara
ascending dalam program ini.
Pratikum 2 :
import java.awt.Graphics;
import java.util.LinkedList;
import javax.swing.JFrame;
Masih kedalam package aplikasisd untuk program pada pratikum 2 ini. Namun pada
pratikum 2 ini, menggunakan import declarations nya adalah import java.awt.Graphics;
berfungsi
untuk
menampilkan
grafiks
dalam
program
java
ini.
Kemudian
import
java.util.LinkedList; berfungsi untuk mengattur data dalam bentuk LinkedList yang ada pada
program ini. Kemudian import javax.swing.JFrame; berfungsi untuk menampilkan dan mengatur
bnetuk form atau Jframe dalam program tersebut.
public class PercobaanLinkedList extends JFrame {
public static void main(String[] args) {
new PercobaanLinkedList();
}
program di atas merupakan suatu kelas dengan nama PercobaanLinkedList. Dengan
memulai program dengan method yang void mainnya. New PercobaanLinkedList ini merupakan
awal dari kelas dari program ini, dengan bagiannya programnya seperti berikut :
LinkedList l1 = new LinkedList();
PercobaanLinkedList() {
l1.add("Test LinkedList");
l1.add("Coba lagi");
l1.add(10243);
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
this.setSize(500, 500);
this.setVisible(true);
setTitle("Test LinkedList");
}
Sambungan dari program sebelumnya. Disini akan dilakukan penciptaan objek dari kelas
LinkedList nya yaitu dengan nama l1. Disana dari kelas PercobaanLinkedLlist akan melakukan
penambahan obek yang dilakukan dari penciptaan objcek tersebut. Seperti melakukan
penambahan data pada objek l1 yang memiliki pernyataan “Test LinkedList”, kemuadian
dilakukan lagi penambahan data dari penciptaan objek baru l1 dengan pernyataan “Coba lagi”,
kemuadian dilakukan lagi penambahan data pada objek l1 dengan pernyataan 10243.
Kemudian terdapat kata kunci this, yang berarti menunjuk pada kostruktor atau method yang
dituju dalam program ini, yiatu this menyatakan mengatur operasi tutup dari form dekstopnya,
yaitu berupa exit_on_close, untuk keluar form atau mutup form tersebut. Sehingga untuk
membuat form tersebut dibutuhkan ukuran. Maka diperlukanlah perintah atau pengaturan dengan
menggunakan setsize, yang mana kata kunci menunjuk pada perintah setSize untuk mengatur
ukuran form dengan ukuran 500 x 500. Kemudian untuk mengatur tampilkan hasil formnya
dibutuhkan perintah setvisible yang bernilai true/benar. Dan jika menggunakan setTitle itu
merupakan pengaturan untuk judul pada form yang dibuat. Dan pada program ini membuat form
dengan judul “Test LinkedList”.
public void paint(Graphics g) {
g.drawString("Jumlah Elemen : "+String.valueOf(l1.size()),10,50);
Potongan program di atas merupakan method dengan nama paint dengan menggunakna
bnetuk Graphics bernama g. dan akan menampilkan kata di antara petik dua yiatu Jumlah
Elemen, dan disertai dengan isi dari tipe data string yang akan menagmbil data dari data l1 dan
memiliki nilai atau value yang memiliki ukuran 10x50. Sehingga dari perintah dibawah ini, dapat
diketahui bahwa didalam LinkedList l1 terdapat 3 elemen.
g.drawString("Elemen ke-1 : "+l1.get(0), 10, 100);
g.drawString("Elemen ke-2 : "+l1.get(1), 10, 150);
g.drawString("Elemen ke-3 : "+l1.get(2), 10, 200);
kemudian menambahkan perintah yg sama namun dengan element yang berurutan berbeda.
g.drawString("Method getFirst() : "+l1.getFirst(),10,250);
g.drawString("Method getLast() : "+l1.getLast(),10,300);
Dari perintah di atas, merupakan perintah yang akan menampilkan isi dari g yang dibawah
ke dalam drawString yang kemudian akan menampilkan kata di antara petik dua, yaituMethod
getFirst yag akan disertai dengan data l1 yang diambil dengan menggunakan perintah getFirst
dari l1 dengan ukuran 10x250, maka dari data yang ada pada l1, untuk data l1 yang ditambah
pertama adalah “Test LinkedList”, maka kan ditampilkan hasil tersebut. Kemudian akan
menampilkan pula Method getLast, yiatu akan mengambil data l1 dengan perintah getLast
dengan menggunakan ukuran 10x300, dari data l1 yang masuk dalam LinkedList, yang masuk
terakhir adalah 10243, maka data tersebut akan ditampikan saat dilakukan pemanggilan dengan
getLast.
l1.addLast("Terakhir");
g.drawString("Method getLast() : "+l1.getLast(),10,350);
Sedangkan di atas akan dilakukan penambahna objek lagi terhadapa l1 LinkedListnya
dengan menggunakan perintah addLast, hal tersebut berarti data yang akan masuk dalam
LinkedList dengan nama l1, akan dilakukan penambah dari belkangan atau terakhir. Dari data
sebelumnya yang berada dalam posisi terakhir adalah 10243, maka saat dilakukan l1.addLast
dengan nama “Terakhir”, maka variabel data dengan nama terakhir akan menggantikan posisi
10243 sebagai method terkahir dalam LinkedList l1 ini.
l1.remove();
g.drawString("Jumlah Elemen Sekarang : " String.valueOf(l1.size()),10,400);
}}
Dari bentuk perintah di atas adalah suatu perintah untuk menhapus data dalam LinkedList l1,
yiatu menggunakan perintah remove, maka akan ada satu data yang dipilih untuk dihapus.
Sehingga saat dilakukan pengecekan jumlah elemen ekarang, dapat diketahui bahwa dengan
mengghunakan perintah String.valueOf tersebut utnuk mengetahui jumlha elemen yang ada
dalam LinkedList l1, yiatu terdapat 3 elemen dan memiliki ukuran 10x400. Yang mana
semulanya saat dilakukan penambahan elemen terakhir, jumlah elemen yang ada dalam l1 adalah
4 elemen, saat dilakukan pemanggilan perintah remove, maka akan ada satu elemn yang keluar
atau terhapus dari l1, sehingga 4 – 1 = 3 elemen sekarang dalam l1.
B. Tugas
1. Apa perbedaan Vektor dan ArrayList pada packet java.util ?
Jawab :
a. Arraylist tidak disinkronkan sementara vector disinkronkan.
b. Arraylist tidak memiliki ukuran standar sementara vektor memiliki ukuran standar 10.
c. Arraylist tidak mendefinisikan ukuran kenaikan sementara vektor tidak.
2. Bagaimana perintah untuk menambah, menghapus dan menampilkan data pada List ?
Jawab :
Untuk menambha data ke dalam List, maka dapat dilihat pada program di atas, yaitu
menggunakan suatu method tambah, yaitu dengan nama PercobaaLinkedList, dengan
menggunakan perintah yang melakukan atau menciptakan objek yang mana data akan masuk ke
dalam LinkedList tersebut. Dan menggunakan perintah l1.add(sertakan nama data yang ingin
dimasukkan dalam data l1 ini).
Sedangkan
Sedangkan untuk menghapus data yang ada pada List, dari program Pratikum ke-2 ini
menggunakan perintah remove, yiatu l1.remove(); maka akan ada satu data yang dipilih untuk
dihapus dari List.
Dan untuk menampilkan data pada List, dari program di atas menggunakan perintah
pemanggilan yang akan menampikja hasilnya data yang ada pada l1. Yaitu dengan perintah
g.drawString(menyertai no index yang ingin dipanggil, dan menentukan pula ukurannya). No
index dalam l1 mrupakan nomor pemanggilan dari data pada l1, yang dimulai dari 0 atau first
dana terakhir jumlah data yang ada atau last.
C. Kesimpulan
Collection secara umum memiliki arti yaitu sebuah kumpulan. Dalam OOP Colletion
dikenal sebagai suatu tempat atau wadah atau objek yang dapat menyimpan objeck lainnya baik
yang memiliki tipe data yang sama maupun tidak. Adapun collection dibagi menjadi 2 macam,
yiatu collection set yang terdiri dari HastSet, LinkedListHastSet dan TreeSet. Dan kemudian ada
collection list, yang terdiri dari ArrayList, LinkedList dan Vector.
D. Listing
Terlampir.
Download