Buku Ajar Dan Panduan Praktikum Struktur
Buku Ajar Dan Panduan Praktikum Struktur
Genap / 2013
STRUKTUR DATA
Tujuan,
pemrograman
pendukungnya
Modul Praktikum,
4. Binary Tree
Kebutuhan Software,
Genap / 2013
Literatur,
Computer Science University of California, Irvine, John Willey & Son 2011.
Genap / 2013
Koleksi
Tujuan Instruksi Khusus:
dan Koleksi
Teori
seperti: Pascal, C, atau Basic. Dimana tipe data ini memiliki ukuran memori yang
• Integer : byte (8 byte), short (16 b), int (32 b), long (64 b)
• Floating point: float (32 byte), double(64 b), decimal(128 b), bigDecimal(256 b)
Genap / 2013
Kita dapat melakukan pengujian penggunaan memori dari tipe data primitif,
sebagaimana contoh pada listing bahasa pemrograman java berikut pada Gambar
1,
Class IntegerTest{
int i = (int)d;
d = Math.pow(2, 32);
i = (int)d;
d = Math.pow(2, 64);
i = (int)d;
Genap / 2013
kapasitasnya akan berhenti pada nilai 2147483647 yang merupakan 232 – 1 yang
Contoh program lainnya Gambar 2 untuk operasional karakter dan string pada
Dari listing program Gambar 2 ditunjukkan hasil bahwasanya tipe data char
hanya bisa diberikan satu karakter, sedangkan String merupakan set kumpulan
Genap / 2013
Operasional tipe data primitif terbatas pada jenis tipe datanya, sehingga
Name
Genap / 2013
ataupun C dengan penggunaan tipe data abstrak dan pointer, yaitu record, struct
untuk tipe data kelompok serta pointer untuk penciptaan tipe data dinamis. Pada
untuk tipe data Obyek dimulai pada bahasa pemrograman LISP dan kemudian
disusul Java.
Tipe data ini dapat merepresentasikan kelompok tipe data dengan beragam tipe
Type
Str25 = String[25];
TBookRec =
Record
Title, Author,
ISBN : Str25;
Price : Real;
Pascal
Class dimana obyek tidak hanya atribut variabel tetapi juga methode.
Genap / 2013
Dari hasil listing Gambar 5 didapatkan bahwasanya tipe data abstrak dapat
diberikan masukan baik berupa angka Integer ataupun String sehingga bersifat
dinamis. Karena itu tipe data abstrak memiliki ukuran memori yang dinamis atau
Koleksi adalah tipe data yang berupa rangkaian atau kumpulan data
ataupun obyek yang berindeks. Terdapat tiga tipe dasar koleksi di Java yaitu:
1. Array, koleksi statis dengan ukuran tetap dan hanya bisa mengelompokkan
Genap / 2013
<key, value>.
class Array{
int index = 10;
int [] arr= new int[index];
9,4,6,1,1,9,3,10,0,5
Genap / 2013
6|9|9|2|6|1|5|8|0|2
9|4|8|7|4|6|8|1|8|9
2|6|2|6|0|6|6|10|1|4
3|4|0|3|10|1|10|9|8|7
1|2|9|6|8|10|10|4|10|7
9|2|6|4|1|3|4|9|9|8
10
Genap / 2013
11
Genap / 2013
Instruksi Praktikum,
Tugas Pendahuluan,
1. Jawablah Pertanyaan berikut terkait tipe data primitif dan tipe data abstrak:
• Apa yang dimaksud dengan tipe data primitif dan tipe data abstrak,
2. Apa yang dimaksud dengan koleksi, sebutkan dan jelaskan tipe data koleksi
tersebut...!
Tugas Praktikum,
12
Genap / 2013
class mahasisw a
Studi
- fakultas: String
- prodi: String
0..*
Mahasisw a Prestasi
Gunakan konsep tipe data primitif, abstrak dan koleksi untuk mengolah
13
Genap / 2013
• Mahasiswa dapat memahami algoritma dan struktur data pada String dan
File
Teori
• Manipulasi String
• Pengaksesan File
String
14
Genap / 2013
Karena itu untuk menggunakan String perlu memahami terlebih dahulu struktur
• Huruf:
- A..Z, a..z
• Angka:
- 0..9
• Tanda baca:
• Karakter Escaped
- Blackslash : ‘\\’
- NewLine : ‘\n’
- Return : ‘\r’
- Tab : ‘\t’
- Backspace : ‘\b’
15
Genap / 2013
- Penggabungan: Concat
16
Genap / 2013
17
Genap / 2013
Map s = st.tokens("aku:mahasiswa
kuliah:universitasTrunojoyo");
System.out.println(s);
System.out.println(status);
18
Genap / 2013
File
yaitu hard-disk. Setiap file tersusun dari penulisan data berupa byte. Pada pustaka
bawaan java terdapat dua paket utama untuk manipulasi file yaitu:
- Java NIO, merupakan paket ekstensi tambahan pada file seperti: hak
19
Genap / 2013
Genap / 2013
Untuk pengolahan data terstruktur seperti halnya manajemen table data didalam
pembentukan token. Semisal contoh kita ingin mengelolah Tabel data Mahasiswa
Mahasisw a
- alamat: String
- nama: String
- tingkat: int
1. Membuat kelas Java Bean terlebih dahulu sebagaimana tugas pada modul 1
21
Genap / 2013
22
Genap / 2013
data perbaris.
23
Genap / 2013
24
Genap / 2013
25
Genap / 2013
5. Binding data dengan Java Bean, memetakan Table data dari File mini
Genap / 2013
1201|adi|kamal|4|
1202|budi|kamal|4|
1203|cucu|kamal|4|
1212|kancil|lamongan|6|
27
Genap / 2013
Instruksi Praktikum,
Tugas Pendahuluan,
sebaliknya ...?
Tugas Praktikum,
1. Buatlah program java untuk file Table penyimpanan dengan struktur dan
28
Genap / 2013
class mahasisw a
Studi
- fakultas: String
- prodi: String
0..*
Mahasisw a Prestasi
Gunakan konsep Binding untuk mendapatkan data obyek dari konstrain File
29
Genap / 2013
30
Genap / 2013
LinkList
Teori
dengan menggunakan struktur data yang tepat maka kinerja program sesuai
List
List merupakan tipe data koleksi yang memiliki indeks kontinyu dan dapat
dioperasikan secara dinamis tanpa dibatasi jumlah indeks ataupun tipe data
dasarnya. Operasional koleksi list mengikuti standar antrian Queue dimana setiap
Sebuah ilustrasi jika terdapat koleksi data ‘A’ ... ‘Z’, maka list memiliki struktur
31
Genap / 2013
Indeks ke-
Indeks ke-
Indeks ke-
Jika terdapat penghapusan data maka indeks yang lebih kecil misalkan indeks ke-0
maka indeks berikutnya yang lebih besar indeks ke-1 akan menggantikannya,
Indeks ke-
Indeks ke-
Indeks ke-
32
Genap / 2013
Class MyListTest{
l.add("A");
l.add("B");
l.add("C");
l.add("D");
l.remove(0);
System.out.println("List Java");
masuk pertama kali adalah data yang terdapat pada indeks terkecil, dan apabila
berikutnya, pola operasional seperti ini mengikuti pola First in First Out atau
33
Genap / 2013
LinkList
LinkList adalah tipe data koleksi seperti List tetapi memiliki indeks yang
diskontinyu. Indeks data LinkList tidak terkait secara fisik, namun indek data
menghapus data. Data didalam linklist dapat dimasukkan pada indeks yang
paling kecil ataupun paling besar ataupun disisipkan diantara indeks yang ada,
34
Genap / 2013
data pada indeks yang terkecil dengan menggunakan operasi addFirst ataupun
pula pada indeks yang terbesar sebagaimana ditunjukkan pada Listing program
Gambar 7.
35
Genap / 2013
Class JavaLinkListTest{
llist.add("A");
llist.addFirst("B");
llist.addFirst("C");
llist.addFirst("D");
llist.addFirst("E");
llist.addFirst("F");
llist.addFirst("G");
llist.addLast("I");
llist.add(3, "X");
berikut:
36
Genap / 2013
G Indeks ke-0
Indeks ke-1
F
Indeks ke-
F ke-0
Indeks ke-1
F
E
E
D X Indeks ke-
X
C
D
B
C
A Indeks ke-
B
37
Genap / 2013
bahwasanya indeks terkecil dari LinkList adalah indeks yang terakhir kali
First Out (LIFO) atau Stack. Ilustrasi operasional antrian Stack ditunjukkan pada
Gambar 9.
Instruksi Praktikum,
Tugas Pendahuluan,
38
Genap / 2013
List...?
caranya...!
Tugas Praktikum,
dengan oerasional:
pencarian tertentu.
39
Genap / 2013
class Node {
//Link constructor
public Node(Object d) {
data = d;
40
Genap / 2013
Teori
perulangan secara iteratif dan rekursif untuk algoritma yang sederhana (solusi
pemrograman dapat menggunakan dua metode yaitu iteratif dan rekursif. Iteratif
pemanggilan methode secara berulang sampai ditemukan solusi dasar dari sebuah
permasalahan.
Persamaan n! = faktorial(n) :
41
Genap / 2013
int result=1;
if(n==0){
return result;
else{
42
Genap / 2013
if(n==0){
return 1;
else
return n * recursion(n-1);
Gambar 3.
43
Genap / 2013
//recursion
System.out.println(f.recursion(5));
long tr = after2-now2;
//iteration
System.out.println(f.iteration(5));
long ti = after1-now1;
//comparation
120
120
time for iterative 107785
44
Genap / 2013
Binary Tree
Binary Tree adalah struktur Tree dengan didalamnya terdapat data dan dua
link untuk kedua anak cabangnya. Binary Tree digunakan untuk memperkecil
indeks data sehingga waktu operasional penelusuran data didalam koleksi ADT
dapat lebih cepat dibanding struktur sequensial seperti Array, List ataupun
proses yaitu:
class BinaryNode{
long key; // unique key
Object element; // The data in the node
BinaryNode left; // Left child
BinaryNode right; // Right child
}
Genap / 2013
if(root==null){
root = node;
else{
46
Genap / 2013
Rekursif
1. Solusi Iteratif
47
Genap / 2013
if(pKey<current.key){
System.out.println("goto left leaf of: "+ current.key);
if(current.left==null){
current.left=b;
set=true;
}
else
current=current.left;
}
else{
set=false;
}
}
System.out.println("current -> set "+b.key);
}
return set;
}
48
Genap / 2013
2. Solusi Rekursif
49
Genap / 2013
if (pKey<root.key){
System.out.println("goto left leaf of: "+ root.key);
if(root.left==null){
BinaryNode b = new BinaryNode(pKey, null);
root.left=b;
set = true;
System.out.println("current -> set "+b.key);
}
else{
return insertRecursiveBinaryTree(root.left,pKey);
}
}
if (pKey==root.key){
set = false;
}
Setelah terbentuk struktur Binary Tree dapat dilakukan
berikut:
if(root.key == pKey) {
System.out.println(pKey+"...is find");
return true;
50
Genap / 2013
if (root.right != null){
traverse (root.right);
}
}
51
Genap / 2013
eksekusi berikut:
52
Genap / 2013
Instruksi Praktikum,
Tugas Pendahuluan,
53
Genap / 2013
Tugas Praktikum,
54
Genap / 2013
LinkList
Balanced Tree
membentuk susunan yang tidak seimbang antar bagian cabangnya, hal ini
sekuensial. Untuk itu diperlukan melakukan reindeksing pada bagian cabang yang
rotasi kearah kanan dan berlaku sebaliknya. Pada Gambar 1 dan Gambar 2
ditunjukkan rotasi BT secara Single Rotation dimana rotasi hanya dilakukan secara
55
Genap / 2013
10 10
6
3 6
10 10
6 12 6 12
3 15 3 15 20
20
Sesudah, Berimbang
Sebelum, Tidak berimbang
56
Genap / 2013
10 15
6 15 10 20
6 12 25
12 20
1. Node insertion,
Pada masukan data pertama node akan menempati root, dan untuk
cabang kiri lebih panjang dan bernilai 0 apabila memenuhi batas toleransi
keberimbangan.
57
Genap / 2013
58
Genap / 2013
2. Check level
apabila cabang kanan >=2 maka diberikan tanda 1 pada root cabang, dan
membandingkan cabang kanan dan kiri, apabila cabang null maka cabang
yang terkait diberikan nilai 0 dan apabila tidak null maka cabang yang lebih
panjang ditambahkan 1.
59
Genap / 2013
Q P
P c a Q
b c
a b
Rotasi kanan
60
Genap / 2013
Rotasi kiri
61
Genap / 2013
struktur tree-nya. Namun pada forest tree tiap-tiap child node koneksinya
Dengan penggunaan Forest tree, kita dapat menentukan dimana posisi node
sesuai kebutuhan.
1. Adjency List,
62
Genap / 2013
Adjency List
Adjency list dibangun menggunakan dari struktur list bisa menggunakan List
ataupun Linked List, dimana tiap List Child Node di kaitkan dengan List Parent-
63
Genap / 2013
class TreeNode{
String data;
TreeNode parent;
List<TreeNode> childrens = new ArrayList<TreeNode>();
64
Genap / 2013
65
Genap / 2013
dibandingkan node J.
66
Genap / 2013
dan mudah secara rekursif. Operasional Rekursif DFS dapat dilakukan secara
Operasional Preorder,
A, B, D, E, H, L, M, N, I, O, P, C, F, G, J, K,
67
Genap / 2013
Operasional Postorder,
D, L, M, N, H, O, P, I, E, B, F, J, Q, K, G, C, A
68
Genap / 2013
level yang lebih rendah. Dalam ilustrasi sebagaimana pada Gambar maka node J
Dikarenakan antar node memiliki level yang sama dan tidak memiliki
hubungan link secara langsung maka proses iteratif dapat lebih mudah dilakukan.
69
Genap / 2013
A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q
70
Genap / 2013
Instruksi Praktikum,
Tugas Pendahuluan,
Tugas Praktikum,
71
Genap / 2013
Modul 7: Graph
Graph, adalah representasi pasangan Vertex(Node) dan Edge(Link) yang
membentuk sebuah jaringan koneksi antar satu Node dengan Node lainnya.
juga memiliki pasangan asal dan tujuan sehingga juga bisa dapat
Pada sisi arah dari edge, graph diklasifikasikan menjadi dua kategori
yaitu: Directed Graph (graph berarah) dan Undirected Graph (graph tak berarah).
Pada graph berarah (V,W)≠ (WV), sedangkan pada graph tak berarah (V,W) =
(W,V). Sedangkan pada sisi bobot dari edge juga diklasifikasikan menjadi dua
kategori yaitu Weighted Graph (graph tak berbobot) dan Unweighted Graph (graph
72
Genap / 2013
73
Genap / 2013
74