Anda di halaman 1dari 43

BRAWIIAYA 0NIvERSITY

Stiuktui Basai Iava


N0B0L PRAKTIK0N

Drs. MAkII, M1
Ck1C8Lk 2010



IUkU5AN MA1LMA1IkA IMIA UNIVLk5I1A5 8kAWIIAA
2


Praktikum-1 : ArrayList 1 dimensi

Arrays
Array adalah struktur data yang menyimpan kumpulan data dalam jumlah besar dan
mengijinkan akses langsung pada elemen-elemennya melalui indek. Suatu array memiliki
panjang yang tetap. Seorang programmer harus menentukan ukuran dari array pada saat
deklarasinya. Suatu aplikasi sering memerlukan struktur penyimpanan yang dapat
berkembang dan data dapat ditambah dan dihapus.

Buat program setiap permasalahan berikut ini :

1. TabInt adalah sebuah array 1 dimensi bertipe integer dengan ukuran statis 10, dan
variabel n menyatakan banyaknya elemen array saat ini dengan nilai n 10. Contoh
elemen-elemen tabel dengan n=6 sebagai berikut :

0 1 2 3 4 5
TabInt


a. Buat suatu prosedur InsertAtIndex(int idx,int v), untuk meyisipkan sebuah elemen pada
posisi tertentu. Misalkan dioperasikan prosedur InsertAtIndex(1,100) berarti menyisipkan
nilai 100 pada index 1, maka langkah yang bisa dilakukan adalah :

1. Operasi ShiftRight mulai index ke 1, dan nilai n bertambah 1, (n=7)

0 1 2 3 4 5 6
TabInt

ShiftRight

2. Set Nilai TabInt index 1 dengan 100

0 1 2 3 4 5 6
TabInt

Catatan :
idx harus berada pada kisaran 0..n-1

b. Buat sebuah prosedur RemoveAtIndex(int idx), untuk menghapus sebuah elemen yang
berada pada index idx, dimana idx = (0..n-1). Prosedur ini memiliki algoritma seperti
ShifLeft mulai index (idx+1) dan nilai n berkurang 1 (n=n-1).





5 12 7 53 4 9

5 12 12 7 53 4 9

5 100 12 7 53 4 9

3


Misalkan RemoveAtIndex(2), maka gambaran proses sebagai berikut :
0 1 2 3 4 5 6
TabInt

Elemen yang akan di ShifLeft
pada range (idx+1..n-1)
Keadaan TabInt setelah operasi RemoveAtIndex(2) adalah :

0 1 2 3 4 5 , dengan n = 6
TabInt


c. Buat sebuah fungsi GetIndex(int v) untuk menentukan index dari sebuah elemen v
pada array TabInt. Fungsi akan mengembalikan nilai 0..n-1 apabila v merupakan elemen
dari array dan mengembalikan nilai -1 apabila sebaliknya. Misalkan elemen array TabInt
sebagai berikut :

0 1 2 3 4 5 6
TabInt

maka fungsi GetIndex(53) mendapatkan nilai 4, sedangkan GetIndex(62) mendapatkan
nilai -1 karena elemen 62 tidak terdapat pada array.

d. Buat prosedur InsertFirst(int v) untuk menyisipkan sebuah elemen v menjadi elemen
pertama arrayList. Prosedur ini memiliki langkah kerja sebagai berikut :
1. ShiftRight mulai posisi ke 0..n-1
2. Set TabInt[0] dengan v
3. n bertambah 1 (n=n+1)

e. Buat prosedur untuk menyisipkan sebuah elemen setelah elemen tertentu pada
arrayList. Format prosedur dapat berupa InsertAfter(int v1,int v2) yang memiliki makna
sisipkan elemen v2 setelah elemen v1 pada array. Karena elemen v1 merupakan nilai
sembarang, maka dimungkinkan v1 terdapat dalam TabInt atau tidak. Bila v1 bukan
anggota TabInt lakukan InsertFirst. Misalkan keadaan awal tabel sebagai berikut :

0 1 2 3 4 5 6
TabInt

maka setelah operasi InsertAfter(7,25), maka keadaan tabel sebagai berikut :

0 1 2 3 4 5 6 7
TabInt




5 100 12 7 53 4 9

5 100 7 53 4 9

5 100 12 7 53 4 9

5 100 12 7 53 4 9

5 100 12 7 25 53 4 9

4





Praktikum-2 : ArrayList 1 dimensi Elemen Terurut

Elemen-elemen dalam array bisa dijaga sehingga selalu dalam keadaan terurut,
baik terurut membesar (ascending) maupun terurut mengecil (descending). Operasi
Insert, Delete dan Udpade pada tabel terurut memiliki sedikit perbedaan dbanding dengan
tabel yang elemennya acak. Implementasi tabel terurut dapat dilakukan dengan
menggunakan array 1 dimensi TabInt, akan tetapi setiap proses yang diterapkan
diharuskan dapat menjaga keterurutan elemen-elemennya.

a. Buat fungsi IsExist(int v) untuk mengecek apakah sebuah elemen v ada pada tabel
terurut TabInt. Karena tabel dalam kondisi terurut, maka pengecekan memungkinkan
tidak dilakukan ke semua elemen tabel. Misalkan kondisi awal tabel sebagai berikut :

0 1 2 3 , dengan n=4
TabInt


dengan pemanggilan fungsi IsExist(14), maka fungsi bernilai true, karena elemen 14 ada
pada tabel, yaitu indek ke 1. Akan tetapi pemanggilan fungsi IsExist(10), fungsi akan
bernilai false. Pengecekan nilai tidak dilakukan terhadap semua elemen (n elemen) akan
tetapi sampai elemen 14 (index 1), karena kondisi nilai (10 <= 14). Dengan dipenuhinya
kondisi tersebut, maka tidak dimungkinkan elemen yang dicari berada pada index
berikutnya meskipun datanya masih banyak.

b. Buat prosedur InsertElmUrut(int v) untuk menyisipkan sebuah elemen dalam tabel
terurut TabInt. Permasalahan yang perlu diperhatikan antara lain :
1. Kasus dimana tabel TabInt masih kosong (n=0)
2. Menentukan index (posisi) yang tepat dari elemen yang akan di sisipkan
Misalkan keadaan awal tabel adalah :

0 1 2 3 , dengan n=4
TabInt


maka proses InsertElmUrut(30) dapat memiliki langkah sebagai berikut :
1. Menentukan index yang tepat dari elemen 30, diperoleh index 3

0 1 2 3
TabInt




5 14 27 43

5 14 27 43

5 14 27 43

5


2. ShiftRight mulai posisi 3

0 1 2 3
TabInt


3. Set TabInt[3]=v

0 1 2 3
TabInt

4. n=n+1

0 1 2 3 4, n = 5
TabInt


c. Buat prosedur untuk merubah sebuah nilai dengan nilai yang lain. Misalkan bentuk
prosedur adalah UpdateElmUrut(int v1,int v2) memiliki makna mengubah nilai v1 pada
TabInt dengan nilai baru v2. Misalkan keadaan awal TabInt sebagai berikut :

0 1 2 3 , dengan n=4
TabInt


maka, dengan pemanggilan prosedur UpdateElm(14,1), langkah-langkah yang dikerjakan
adalah :

1. Menghapus elemen 14 dari TabInt, dihasilkan TabInt sebagai berikut :

0 1 2, dengan n=3
TabInt


2. Menyisipkan elemen 1 ke TabInt


0 1 2 3 , dengan n=4
TabInt







5 14 27 43 43

5 14 27 30 43

5 14 27 43 43

5 14 27 43

5 27 43

1 5 27 43

6


Sorting (Pengurutan)
Salah satu metode pengurutan data adalah CountSort. Metode ini digunakan untuk
mengurutkan bilangan integer. Contoh program Java CountSort :

1 public class CountSort {
2 int[] TabInt = new int[6];
3 int[] TabCount;
4 int xMax,JumData=6;
5
6 public CountSort() {
7 TabInt[0]=10; TabInt[1]=3;
8 TabInt[2]=2; TabInt[3]=10;
9 TabInt[4]=3; TabInt[5]=1;
10 }
11
12 public void MencariMax(){
13 xMax = TabInt[0];
14 for(int j=1;j<JumData ; j++)
15 {
16 if (xMax < TabInt[j])
17 xMax = TabInt[j];
18 }
19 TabCount=new int[xMax+1];
20 }
21
22 public void MengisiTabCount(){
23 for(int j=0;j<JumData ; j++){
24 TabCount[TabInt[j]]++;
25 }
26 }
27
28 public void ReConstructTabInt()
29 { int k=0;
30 for(int i=0;i<=xMax;i++){
31 if (TabCount[i]!=0){
32 for(int m=1;m<=TabCount[i];m++){
33 TabInt[k++]=i;
34 }
35 }
36 }
37 }
38
39 public void printTabInt(){
40 for(int i=0;i<JumData;i++){
41 System.out.print(TabInt[i] + " ");
42 }
43 System.out.println("");
44 }
7


45 public static void main( String [ ] args )
46 {
47 CountSort cs = new CountSort();
48 cs.printTabInt();
49 cs.MencariMax();
50 cs.MengisiTabCount();
51 cs.ReConstructTabInt();
52 cs.printTabInt();
53 }
54 }

Bila dieksekusi, menghasilkan output :
10 3 2 10 3 1 {data asal}
1 2 3 3 10 10 {hasil pengurutan}
Process completed.

Selection Sort
Pada metode ini proses dimulai pada posisi index 0. Pilih elemen terkecil mulai
setelah posisi sekarang sampai elemen terakhir dan tukar dengan posisi sekarang. Lihat
contoh gambar berikut ini :








Index 0 1 2 3

Pengurutan dimulai dengan mencari lokasi hewan terkecil, yaitu ikan, untuk ditempatkan
pada posisi pertama. Operasi terjadi dengan menukar posisi 0 (burung hantu) dengan
posisi 1 (ikan). Akibat dari proses ini adalah menempatkan hewan yang terkecil ditempat
yang paling depan.










Proses selanjutnya dimulai dari posisi kedua (burung hantu). Selanjutnya memilih hewan
yang terkecil diantara burung hantu, dragon, dan anjing. Karena hewan yang terkecil
Ordered Unordered
8


adalah burung hantu, maka tidak terjadi pertukaran posisi karena burung hantu sudah
berada pada posisi yang tepat.









Proses selanjutnya pada posisi ketiga. Menentukan hewan terkecil diantara dragon dan
anjing. Karena anjing lebih kecil, maka terjadi pertukaran posisi, diperoleh urutan :







Dari gambar diatas, sudah diperoleh gambar yang sudah terurut membesar.

Aksi Selection Sort alam array


Pass 0 : Pilih 20 pada indek 1
Tukar arr[1] dengan arr[0]


Pass 1 : Pilih 35 pada indek 4
Tukar arr[4] dengan arr[1]



Pass 2 : Pilih 40 pada indek 2
Tidak terjadi pertukaran


Pass 3 : Pilih 50 pada indek 4
Tukar arr[3] dengan arr[4]



Array sudah terurut


Ordered Unordered
9


Insertion Sort

Metode ini melakukan pengurutan data dengan cara sebagai berikut :

Pass=0, posisi 50 sudah tepat








Pass=1, posisi elemen 20 seharusnya di index 0,
Maka terjadi pergeseran 50 ke 20, array menjadi








Pass=2, posisi elemen 40 seharusnya sebelum 50,
Maka terjadi pergeseran 50 kebawah , array menjadi







Pass=3, posisi elemen 75 sudah tepat








Pass=4, posisi elemen 35 seharusnya sebelum 40,
Maka terjadi pergeseran elemen 40,50,75
kebawah, array baru


50
20
40
75
35

50
20
40
75
35

20
50
40
75
35

20
50
40
75
35

20
40
50
75
35

20
40
50
75
35

20
40
50
75
35

20
35
40
50
75

10


Diperoleh array terurut sebagai berikut :

20 35 40 50 75

Praktikum : (Lanjutan Praktikum 2)
1. Buat program pencarian satu nilai dengan Sequential Search
2. Buat program pencarian satu nilai dengan Binary Search
3. Buat program untuk menentukan nilai maksimum dan minimum suatu array
4. Buat program untuk Insertion Sort
5. Buat program untuk Merge Sort
































11


Praktikum-3 : Single Linked List

Untuk menyisipkan(insert) atau menghapus(remove, delete) sebuah elemen pada lokasi
didalam dari suatu list array memerlukan penggeseran data, misalnya

Insert 5 kedalam ArrayList {2,7,3,10,8} pada indek ke 2.
Membuat ruang dengan pergeseran ekor (tail) {3,10,8}


Tambahkan 5 pada indek 2 (Menghasilkan barisan {2,7,5,3,10,8})





Insert 5 pada ArrayList dilakukan dengan pergeseran tail kekanan

Dengan mengamati operasi diatas, maka diperlukan struktur alternatif yang dapat
menyimpan elemen dalam suatu barisan yang mengijinkan penyisipan dan penghapusan
elemen pada posisi acak yang lebih efisien pada list. Pada single linked list, suatu elemen
terdapat link yang mereferensi ke elemen berikutnya (successor) dalam list.

head

NULL



Setiap elemen pada list berupa Node yang dirangkai dengan Node yang lain.
Penyisipan sebuah node kedalam list dilakuakan dengan cara memotong koneksi,
kemudian menghubungkan kembali rantai pada akhir node yang baru.





12


Penghapusan sebuah node sembarang pada list memerlukan pemotongan dua
koneksi, penghapusan node, dan kemudian menghubungkan kembali rantai.



Penyisipan dan penghapusan sebuah node merupakan operasi local dan pengubahan
terjadi hanya pada link yang terhubung terhadap node. Elemen yang lain dari node tidak
terpengaruh. Pada ArrayList harus terdapat pergeseran semua elemen pada tail pada saat
node baru masuk atau keluar dari list.

Struktur dari single linked list :
1. Setiap elemen adalah sebuah node yang terdiri dari sebuah nilai dan sebuah
referen(link) ke node selanjutnya (next ).
2. Sebuah node dengan dua field dapat berada di sembarang tempat pada memori.
3. List menjaga sebuah variabel referensi yang mengidentifikasikan elemen pertama
list. Akhir list ditandai dengan link null.

Implementasi single linked list dengan Java

1 class Node {
2 Object data;
3 Node next;
4 }
5
6 public class List
7 {
8 Node head;
9
10 public List()
11 {
12 head = null;
13 }
14
15 public void InsertFirst(Object o)
16 {
17 Node nn = new Node();
18 nn.data = o;
19 nn.next = head;
20 head = nn;
13


21 }
22 public Node FindLastNode(){
23 Node n=head;
24 if (n!=null){
25 while (n.next!=null){
26 n=n.next;
27 }
28 }
29 return n;
30 }
31
32 public void InsertLast(Object o){
33 if (head==null){
34 InsertFirst(o);
35 }
36 else{
37 Node n=FindLastNode();
38 Node new_n= new Node();
39 new_n.data=o;
40 new_n.next=null;
41 n.next=new_n;
42 }
43 }
44
45 public void print()
46 {
47 System.out.println("Printing the Single Linked List ");
48 Node n = head;
49 while (n!= null)
50 {
51 System.out.println(n.data);
52 n = n.next;
53 }
54 }
55
56 public static void main(String[] args)
57 {
58 List L = new List();
59 L.InsertFirst(1);
60 L.InsertFirst(2);
61 L.InsertFirst(3);
62 L.print();
63 }
64 }




14


front
//
front.next
item
newNode
front
//
Output program sebagai berikut :
Printing the Single Linked List
3
2
1

Process completed.

Setiap elemen pada single linked list adalah node yang memiliki dua variable
instans. Variabel pertama, data yang bertipe Object. Variabel kedua adalah node referens
yang disebut next yang menyediakan sebuah link ke node selanjutnya. Linked list
merupakan struktur implementasi, oleh karena itu tidak tampak pada antarmuka public
pada struktur data. Sebagai akibat, maka diperlukan untuk mendeklarasikan variable
instans pada kelas public node. Hal ini akan sangat menyederhanakan penulisan kode
yang melibatkan linked list. Kelas node merupakan struktur self-referencing, yaitu
variabel instans next, menunjuk ke objek yang memiliki tipe yang sama dengan dirinya
sendiri.

Menciptakan Linked List
Kelas node memiliki dua konstruktor yang mengkombinasikan operator new
untuk membuat sebuah node. Konstruktor default menginisialisasi setiap variabel instans
menjadi null. Konstruktor dengan sebuah type parameter mengnisialisasi field data dan
menset next menjadi null. Pada kelas ini diperlukan sebuah variabel referen, head, yang
mengidentifikasi node pertama dari list. Sekali dapat menunjuk node pertama, maka
dengan menggunakan next dapat menuju node kedua, kemudian ketiga, dan selanjutnya.
Jika list kosong, maka head bernilai null.

Praktikum :
1. Tampilkan data list dalam bentuk :
[data1,data2,,datan]
2. Buat program untuk insert dan menghapus head suatu single
linked list.






Gambaran proses insert






Gambaran proses delete
15



3. Buat program untuk menyisipkan sebuah node sebelum node dari suatu list










Gambaran proses InserBefore


4. Buat program untuk menghapus sebuah node











Bagaimana bila yang dihapus merupakan elemen pertama, tengah atau terakhir ?

5. Buat program untuk mengurutkan data list.

6. Buat suatu prosedur isPalindrome() yang mengembalikan nilai true apabila barisan
elemen merupakan palindrome dan false jika bukan. Suatu palindrome adalah barisan
nilai yang pembacaan maju dan mundurnya sama, misal kata level. Algoritma
membandingkan elemen pada ujung yang berlawanan dari list, dengan menggunakan
getFirst() dan getLast().


16



Doubly-Linked-List (DLL) melinkar
DLL adalah list yang memiliki dua pointer. Pointer yang satu ke Node berikutnya
(next) dan pointer yang lain ke node sebelumnya (prev). Spesifikasi DLL adalah :
1. List kosong (head=null)




2. DDL yang memilki satu elemen







3. DLL yang memiliki banyak elemen









Berikut ini program java doubly-linked-list melingkar :

1 class Node {
2 Object data;
3 Node next;
4 Node prev;
5 }
6
7 public class DoubleCircularList
8 {
9 Node head;
10
11 public DoubleCircularList()
12 {
13 head = null;
14 }
15
16 public boolean IsEmpty(){
17 return (head==null);
18 }
17


19
20 public Object GetFirst(){
21 return head.data;
22 }
23
24 public boolean IsNotEmpty(){
25 return (head!=null);
26 }
27
28 public void InsertLast(Object o)
29 {
30 Node new_n = new Node();
31 new_n.data = o;
32 if (IsEmpty()){ // List Masih kosong
33 head=new_n;
34 new_n.next=head;
35 new_n.prev=head;
36
37 } else { // List tak kosong
38 new_n.next=head;
39 new_n.prev=head.prev;
40 head.prev.next=new_n;
41 head.prev=new_n;
42 }
43 }
44
45 public void InsertFirst(Object o){
46 InsertLast(o);
47 head=head.prev;
48 }
49
50 public void print(String str)
51 {
52 System.out.println(str);
53 Node n = head;
54 if (IsNotEmpty()){
55 Do
56 {
57 System.out.println(n.data);
58 n = n.next;
59 } while (n != head);
60 } else {
61 System.out.println("List Kosong");
62 }
63 }
64


18






65 public static void main( String [ ] args )
66 { DoubleCircularList dcl=new DoubleCircularList();
67 dcl.InsertFirst(10);
68 dcl.InsertFirst(20);
69 dcl.print("Double Cicular List");
70 }
71 }

Output program sebagai berikut :
Double Cicular List
20
10

Process completed.


Praktikum-4 : Doubly-LinkedList

1.Buat prosedur untuk menghapus elemen pertama dari DDL (deleteFirst)
2.Buat prosedur public void DeleteNode(Node Pdel) yang berguna untuk menghapus
sebuah node dengan alamat Pdel.
3.Buat prosedur public void InsertAfterNode(Node NodePrev,Node NodeIns ) yang
berguna untuk menyisipkan sebuah node setelah NodePrev yang merupakan node milik
DLL.
4.Buat prosedur public Node FindNode(Object o) yang berguna untuk mendapatkan node
yang memiliki elemen o
5.Buat prosedur public void InsertAfterObject(Object oPrev,Object oIns) yang berguna
untuk menyisipkan sebuah elemen setelah elemen tertentu pada list.
6.Buat prosedur public void DeleteObject(Object o) yang berguna untuk menghapus
sebuah elemen o didalam list.
7.Buat prosedur public void DeleteLast() yang berguna untuk menghapus elemen terakhir
dari list.









19



Pratikum-5 : STACK (Tumpukan)

Sebuah stack adalah suatu daftar item yang dapat diakses hanya pada akhir
barisan, yang disebut puncak(top) dari stack. Tumpukan item menempatkan sesuatu di
puncak item-item yang lain adalah model dari stack.



















Operasi Stack terbatas pada elemen pada top dari stack. Push(item) menambah satu item
pada top, Pop() menghapus elemen dari top, Peek() mengakses nilai pada top.












Sebuah item yang di remove (pop) dari stack adalah elemen yang ditambahkan(push)
paling akhir ke stack. Stack memiliki urutan LIFO(last-in-last-out). Penyisipan yang
diikuti dengan penghapusan akan membalik urutan dari elemen stack.


20





Antarmuka(Interface) Stack

Type Interface
Boolean IsEmpty(), mengembalikan true jika tidak terdapat elemen dan false
jika memiliki elemen minimal satu
Object Peek(), mengembalikan elemen pada top stack. Jika stack kosong
mengembalikan EmptyStackException
Object Pop(), menghapus elemen pada top stack dan mengembalikan nilainya.
Jika kosong mengembalikan EmptyStackException
Void Push(Object) , Menyisipkan item pada top stack
Int Size(), mengembalikan banyaknya elemen stack

Contoh program berikut implementasi stack dengan menggunakan doubly-linked-list

1 public class Stack {
2 private DoubleCircularList S;
3 public Stack() {
4 S=new DoubleCircularList();
5 }
6
7 public void Push(Object o){
8 S.InsertFirst(o);
9 }
10
11 public Object Pop(){
12 Object o= S.GetFirst();
13 S.DeleteFirst();
14 return o;
15 }
16
17 public void print(String str){
18 S.print(str);
19 }
20
21 public static void main(String[] args)
22 { Stack S=new Stack();
23 S.Push(1);
24 S.Push(2);
25 S.Push("tiga");
26 S.print("Stack Asal");
27 Object o=S.Pop();
28 S.print("Stack setelah di Pop");
29 System.out.println("Object yang di Pop : " + o);
30 }
31 }
21






Output program adalah :
Stack Asal
tiga
2
1
Stack setelah di Pop
2
1
Object yang di Pop : tiga

Process completed.

Praktikum :
1. Implementasikan kelas stack dengan menggunakan array !
2 Buat program aplikasi stack pada M Mu ul lt ti ib ba as se e n nu um mb be er rs s .Berikut ini gambaran proses
















4. Buat program aplikasi stack untuk keseimbangan pasangan simbol. Contoh output :










22




Praktukum-5 : Antrian

Antrian adalah suatu daftar item yang mengijinkan pengaksesan hanya pada dua
ujung dari barisan, yang disebut head dan belakang dari antrian. Suatu item masuk pada
belakang dan keluar dari depan. Sebuah garis tunggu pada toko atau suatu bank adalah
model dari suatu stack.








C Co on nt to oh h a an nt tr ri ia an n p pa ad da a s se eb bu ua ah h t to ok ko o g gr ro os si ir r

O Op pe er ra as si i a an nt tr ri ia an n t te er rb ba at ta as s p pa ad da a u uj ju un ng g d da af ft ta ar r, , y ya an ng g d di is se eb bu ut t h he ea ad d d da an n b ba ac ck k. .
p pu us sh h( (i it te em m) ) m me en na am mb ba ah h i it te em m p pa ad da a b ba ac ck k
p po op p( () ) m me en ng gh ha ap pu us s e el le em me en n p pa ad da a h he ea ad d( (f fr ro on nt t) )
p pe ee ek k( () ) m me en ng ga ak ks se es s n ni il la ai i p pa ad da a h he ea ad d








S Sa at tu u i it te em m d di i r re em mo ov ve e ( (p po op p) ) d da ar ri i a an nt tr ri ia an n a ad da al la ah h e el le em me en n p pe er rt ta am ma a y ya an ng g d di it ta am mb ba ah hk ka an n( (p pu us sh h) )
k ke e d da al la am m a an nt tr ri ia an n. . A An nt tr ri ia an n m me em mi il li ik ki i u ur ru ut ta an n F FI IF FO O( (f fi ir rs st t- -i in n- -f fi ir rs st t- -o ou ut t) ). . I In ns se er rt t y ya an ng g d di ii ik ku ut ti i
o ol le eh h d de el le et te e m me en nj ja ag ga a u ur ru ut ta an n d da ar ri i e el le em me en n. .

Antarmuka(Interface) Antrian

Type Interface
boolean IsEmpty(), mengembalikan true jika tidak terdapat elemen dan false jika
memiliki elemen minimal satu
Object Peek(), mengembalikan elemen pada head antrian. Jika antrian kosong
mengembalikan NoSuchElementException
Object Pop(), menghapus elemen pada head antrian dan mengembalikan nilainya.
Jika kosong mengembalikan NoSuchElementException
void Push(Object) , Menyisipkan item pada belakang antrian
23


int Size(), mengembalikan banyaknya elemen antrian

Praktikum :
1. Buat struktur dari antrian dengan menggunakan doubly-linked-list
2. Buat program interface antrian : isEmpty(), Push(), Pop(),Peek() dan size()
3. Buat program untuk mengurutkan barisan bilangan integer dengan menggunakan
metode RadixSort, dimana metode ini menggunakan prinsip antrian. Gambaran
proses sebagai berikut :
a. Misal barisan bilangan integer sebagai berikut :
L Li is st t: : [ [9 91 1, , 6 6, , 8 85 5, , 1 15 5, , 9 92 2, , 3 35 5, , 3 30 0, , 2 22 2, , 3 39 9] ] Dapat dilihat per-angka dari sebelah
kanan. Pada saat Pass=0, maka barisan bilangan dilihat pada karakter angka yang
paling kanan, kemudian memasukkan ke dalam 10 antrian (0,1,2,,9) sesuai
dengan karakter angka yang ada. Pada metode ini banyaknya karakter angka
dibuat sama.

9 1
0 6
8 5
1 5
9 2
3 5
3 0
2 2
3 9

Pass=0
Keadaan antrian pada saat Pass=0 sebagai berikut :










S Se et te el la ah h P Pa as ss s 0 0: : [ [3 30 0, , 9 91 1, , 9 92 2, , 2 22 2, , 8 85 5, , 1 15 5, , 3 35 5, , 6 6, , 3 39 9] ]

I It te er ra as si i s se el la an nj ju ut tn ny ya a m me en ne em mp pa at tk ka an n d da af ft ta ar r a an nt tr ri ia an n y ya an ng g t te el la ah h d di ip pe er ro ol le eh h p pa ad da a P Pa as ss s= =0 0
d di im mu ul la ai i a an nt tr ri ia an n 0 0, ,1 1, , , ,9 9 d de en ng ga an n m me em mp pe er rt ti im mb ba an ng gk ka an n k ka ar ra ak kt te er r k ke e 2 2 d da ar ri i k ka an na an n. .

24








C Co on nt to oh h : :
a a. . A An nt tr ri ia an n k ke e 0 0. . K Ka ar re en na a k ka ar ra ak kt te er r k ke e 2 2 a ad da al la ah h 3 3 ( (d da ar ri i a an ng gk ka a 3 30 0) ), , m ma ak ka a a an ng gk ka a t te er rs se eb bu ut t
d di it te em mp pa at tk ka an n p pa ad da a a an nt tr ri ia an n k ke e 3 3, , s se ep pe er rt ti i g ga am mb ba ar r b be er ri ik ku ut t i in ni i : :










Karena pada antrian ke 0 elemennya habis, maka STOP

b. Antrian ke 1. Ditempatkan pada antrian ke 9,










Karena pada antrian ke 0 elemennya habis, maka STOP

c. Antrian ke 3. Ambil element 92, taruh di antrian 9, dan ambil elemen 22 kemudian
taruh di antrian 2. Kondisi antrian sebagai berikut :










25







Setelah antrian ke 9 diproses, maka kondisi antrian yang baru adalah :









S Se et te el la ah h P Pa as ss s 1 1: : [ [6 6, , 1 15 5, , 2 22 2, , 3 30 0, , 3 35 5, , 3 39 9, , 8 85 5, , 9 91 1] ] d da at ta a s su ud da ah h u ur ru ut t m me em mb be es sa ar r

P Pr ro os se es s i it te er ra as si i P Pa as ss s s se eb ba an ny ya ak k m ma ak ks si im ma al l b ba an ny ya ak kn ny ya a k ka ar ra ak kt te er r b bi il la an ng ga an n y ya an ng g a ak ka an n d di iu ur ru ut tk ka an n
d di ik ku ur ra an ng gi i d de en ng ga an n 1 1 k ka ar re en na a i in nd de ek k P Pa as ss s d di im mu ul la ai i d da ar ri i 0 0. .

4 4. . S Si im mu ul la as si i E Ev ve en nt t- -D Dr ri iv ve en n
S Si im mu ul la as si i e ev ve en nt t- -d dr ri iv ve en n m me en ng gg gu un na ak ka an n s su ua at tu u a an nt tr ri ia an n b be er rp pr ri io or ri it ta as s u un nt tu uk k m me en ny yi im mp pa an n
e ev ve en nt ts s y ya an ng g t te er rj ja ad di i s se ep pa an nj ja an ng g. . M Mi is sa al ln ny ya a s si im mu ul la as si i b ba an nk k m me el li ih ha at t a al li ir ra an n c cu us st to om me er r y ya an ng g
d di il la ay ya an ni i o ol le eh h d du ua a t te el ll le er r. . T Ti ip pe e e ev ve en nt t b be er rb be ed da a t te er rh ha ad da ap p k ke ed da at ta an ng ga an n( (a ar rr ri iv va al l) ), ,
p pe el la ay ya an na an n( (s se er rv vi ic ce e) ), , d da an n k ke ep pe er rg gi ia an n ( (d de ep pa ar rt tu ur re e) ) d da ar ri i s se eo or ra an ng g p pe el la an ng gg ga an n. . W Wa ak kt tu u k ke ed da at ta an ng ga an n
d da an n p pe el la ay ya an na an n b be er rs si if fa at t r ra an nd do om m. . G Gr ra af fi ik k b be er ri ik ku ut t i in ni i m me en ng gg ga am mb ba ar rk ka an n e ev ve en nt t ( (A
i
=
kedatangan, S
i
= pelayanan, D
i
= kepergian) untuk empat pelanggan.












B Bu ua at t p pr ro og gr ra am m J Ja av va a p pr ro os se es s s si im mu ul la as si i e ev ve en nt t- -d dr ri iv ve en n t te er rs se eb bu ut t. .






26






Praktikum-6 : Binary Tree

S St tr ru uk kt tu ur r T Tr re ee e
Tree adalah struktur hirarki yang menempatkan elemen-elemen dalam node
sepanjang cabang (branches) yang berasal dari sebuah akar (root). Node dalam sebuah
pohon dibagi menjadi level-level. Level tertatas ditempati oleh node root. Sebuah node
dalam tree dapat memiliki multiple successor pada level berikutnya. Dengan demikian,
sebuah tree dikatakan struktur nonlinier.
Contoh-1 : Operating sistem menggunakan tree untuk memelihara struktur file.

















Contoh-2 : Pada binary tree, setiap node memiliki paling banyak dua successor.
Suatu kompiler membangun binary tree pada saat parsing ekspresi pada suatu kode
sumber program.













27






Terminologi Tree
Suatu tree dikarakteristikkan sebagai koleksi dari node yang berasal dari node
awal yang unik yang dinamakan root. Setiap node terdiri dari sebuah nilai dan beberapa
atau kosong successor. Istilah parent dan child menggambarkan hubungan antara sebuah
node dan beberapa successornya.



















Suatu path antara satu parent P dan sembarang node N dalam subtree adalah
barisan node P=X
0
, X
1
, . . ., X
k
= N dimana k adalah panjang path. Setiap node X
i
pada
barisan merupakan parent dari node X
i+1
untuk 0 i k-1. Level dari node adalah
panjang path dari root ke node tersebut. Dengan memandang sebuah node sebagai root
terhadap subtree-nya, tinggi sebuah node adalah panjang dari path terpanjang dari node
tersebut ke daun dalam subtree. Tinggi sebuah tree adalah level maksimum dari tree
tersebut.











28







Binary Tree
Pada binary tree, setiap parent memiliki anak tidak lebih dari dua. Model ini
memiliki struktur yang uniform yang memberikan gambaran yang sederhana terhadap
struktur nodenya dan pengembangan berbagai algoritma tree.














Setiap node pada Binary Tree mendefinisikan sebuah subtree left dan subtree
right. Setiap subtree juga merupakan binary tree.





















29




Pendefinisan secara rekursif terhadap binary tree adalah :
T adalah suatu binary tree apabila :
tidak memiliki node (T adalah tree kosong)
a at ta au u
m me em mi il li ik ki i p pa al li in ng g b ba an ny ya ak k d du ua a s su ub bt tr re ee e


Tinggi Binary Tree
Tinggi dari binary tree adalah panjang dari path terpanjang dari root ke
sebuah node daun. Misalkan T
N
adalah subtree dengan root N dan T
L
dan T
R
adalah root
dari subtree kiri dan subtree kanan dari N, maka :

= =
kosong tak T jika T height T height
kosong T jika
T height N height
N R L
N
N
)), ( ), ( max( 1
, 1
) ( ) (





























30




Kepadatan Binary Tree
Pada binary tree, banyaknya node pada setiap level berada pada kisaran nilai
tertentu. Pada level 0, terdapat sebuah node, pada level 1 terdapat 1 atau 2 node. Pada
level k, banyaknya node berada pada kisaran 1 sampai 2
k
. Banyaknya node setiap level
memiliki kontribusi terhadap kepadatan tree. Kepadatan adalah suatu ukuran yang
menyatakan banyaknya node relatif terhadap tinggi dari tree.

Praktikum :
1. Buat program untuk implementasi Binary Tree
2. Buat program untuk menginputkan elemen sehingga bentuk tree adalah :

Root

Root












3 3. . Buat program untuk menghitung banyaknya node. Untuk tree no 2 banyaknya
node adalah 9
+ +. . Buat program untuk menghitung jumlah seluruh elemen, yaitu 10+15+55+.+45
5. Buat program untuk menghitung banyaknya daun
6. Buat program untuk menghitung tinggi tree
7. Buat program untuk menghitung tinggi dan level tiap-tiap node










31




Aplikasi Binary Tree pada Ekspresi Aritmatika

Sebuah ekspresi biner tree menyatakan ekspresi aritmatika. Pada tree ekspresi
setiap operator merupakan node interior yang memiliki anak operand atau sub-ekspresi.
Operand menjadi node kiri atau kanan.


Traversal preorder terhadap ekspresi biner tree menghasilkan notasi prefix,
traversal postorder menghasilkan notasi postfix, dan traversal inorder menghasilkan
notasi infix. Pada kasus diatas diasumsikan tidak terdapat notasi kurung untuk
menyatakan ekspresi.

Contoh tree binary ekspresi sebagai berikut :

















32




Preorder(Prefix): - + a / * b c d e // preorder scan
Inorder(Infix): a + b * c / d - e // inorder scan
Postorder(Postfix): a b c * d / + e - // postorder scan

Membangun Tree Binary Ekspresi
Untuk membangun sebuah tree ekspresi dari sebuah ekspresi postfix dengan
menggunakan algoritma iteratif. Sebuah operand merupakan satu karakter tunggal seperti
a atau b. Jika token berupa operand, create satu node daun yang nilainya adalah
operand tersebut dan subtree kiri dan kanan adalah null. Push node ke stack. Jika token
adalah operator, create satu node baru dengan nilai operator tersebut. Pop dua node anak
dari stack dan jadikan anak kiri dan anak kanan pada node baru tersebut.

Misal ekspresi a b c * +


















Praktikum :
1. Buat program untuk mengubah notasi Infix menjadi notasi postfix, missal
2+3*6+4 menjadi notasi postfix 236*+4+
2. Buat program untuk mengubah notasi infix menjadi bentuk pohon
3. Hitung ekspresi tersebut berdasarkan pohon ekspresi biner yang terbentuk







33




Binary Search Tree
Node pada binary search tree merupakan path yang unik dari root sesuai dengan
prinsip pengurutan. Node pada subtree kiri memiliki nilai yang lebih kecil dan node pada
subtree kanan memiliki nilai yang lebih besar. Hal ini mengisyaratkan bahwa tidak
diperbolehkan terdapat nilai ganda.














Membangun Binary Search Tree
Untuk membangun BST, terdapat beberapa strategi untuk melakukan penyisipan
elemen ke tree antara lain :
1. Jika nilai dari elemen baru sama dengan nilai dari node sekarang, maka tidak terdapat
aksi yang dilakukan.
2. Jika nilai dari elemen baru lebih kecil daripada nilai dari node sekarang, maka
penyisipan dilakukan pada subtree kiri(left child) dari node. Jika null, sisipkan node
sebagai anak kiri dari parent.
3. Jika nilai dari elemen baru lebih besar dari node sekarang, maka penyisipan dilakukan
pada subtree kanan (right child) dari node. Jika null, maka sisipkan node sebagai anak
kanan dari parent.

Contoh :












34




Searching
Proses pencarian sebuah nilai dilakukan sama seperti pada proses insert.

Penghapusan Node
Misalkan ingin menghapus root, maka node tersebut tidak dapat di hapus dari
tree. Yang dapat dilakukan adalah mengganti nilai tersebut dengan nilai yang lain.
















Untuk menghapus sebuah node dari BST, harus ditemukan node pengganti, kopi
nilainya, kemudian hapus dari tree.





35





















Praktikum :
1. Implementasikan kelas Node Binary Search Tree
2. Buat program untuk menginsertkan sebuah elemen ke dalam BST
3. Buat program untuk mendapatkan nilai elemennya terkecil
4. Buat program untuk mendapatkan nilai elemennya terbesar
5. Buat fungsi untuk mengecek apakah sebuah elemen telah pada BST. Fungsi akan
mengembalikan nilai true apabila nilai sudah ada pada BST, dan mengembalikan
false jika sebaliknya.
6. Buat program untuk mengganti sebuah elemen dengan elemen yang lain.
Pertimbangkan apakah urutan pencarian masih terjaga ?
7. Dengan program uji pohon BST apabila urutan input sebagai berikut :
50, 60, 40, 45, 30, 20


36


Praktikum-7 : AVL (Height-balanced Trees)

Suatu pohon biner dinamakan perfectly balanced apabila :

Tinggi dari subtree kiri dan kanan terhadap root sama
Subtree kiri dan kanan terhadap root merupakan binary tree yang perfectly
balanced.

Contoh :












Suatu AVL Tree adalah Binary Search Tree yang memiliki karakteristik :
Tinggi dari subtree kiri dan kanan terhadap root berbeda paling banyak 1
Subtree kiri dan kanan terhadap root merupakan AVL Tree
Faktor keseimbangan node adalah -1 jika node tinggi subtree kiri, 0 jika memiliki
tinggi yang sama dan +1 jika tinggi kanan.

Contoh AVL Tree


















37


Contoh Non AVL Tree














Penyisipan terhadap AVL Tree

Kasus -1










AVL Tree sebelum penyisipan 90

















38



Kasus-2











AVL Tree sebelum penyisipan 75
































39


Kasus-3













































40


Kasus-4


































Praktikum :
1. Buat program untuk melakukan rotasi kiri terhadap pohon AVL dan uji dengan data !
2. Buat program untuk melakukan rotasi kanan terhadap pohon AVL dan uji dengan data
3. Buat program untuk menguji apakah sebuah pohon merupakan AVL !
4. Buat program untuk menghapus sebuah node dalam AVL Tree !






41


Praktikum-8 : Graph

Sebuah graph G adalah pasangan g=(V,E), dimana V adalah himpunan titik tak kosong
terbatas, yang dinamakan vertex dari G, dan E V x V. Elemen dari E adalah pasangan
elemen dari V. E disebut himpunan edge.
Misalkan graph sebagai berikut :









Pada gambar diatas V={1,2,3,4,5} dan E={(1,2),(1,4),(2,5),(4,5),(3,4),(3,1)}
Untuk menyatakan adjacency matrix dapat digunakan matrik dua dimensi. Contoh matrik
adjacency graph diatas adalah:

















Adjacency graph dapat juga dinyatakan dengan array dan single linked list sebagai
berikut :









42


Program Java untuk implementasi graph dengan array dan single linked list sebagai
berikut :

1 public class Graph
2 { private pNodeOneChild [] Node;
3 private int SumNode=5;
4
5 public Graph(){
6 Node = new pNodeOneChild[SumNode];
7 for(int i=0;i<SumNode;i++){
8 Node[i]=null;
9 }
10 }
11
12 public void AddAdjacency(int head,int adj){
13 pNodeOneChild n = new pNodeOneChild();
14 n.data=adj;
15 n.next=Node[head];
16 Node[head]=n;
17 }
18
19 public void printGraph(){
20 for(int i=0;i<SumNode;i++){
21 System.out.print("[" + i + "]");
22 pNodeOneChild n=Node[i];
23 while (n!=null){
24 System.out.print("->" + n.data);
25 n=n.next;
26 }
27 System.out.println("");
28 }
29 }
30
31 public static void main( String [ ] args )
32 { Graph g=new Graph();
33 g.AddAdjacency(0,3);
34 g.AddAdjacency(0,1);
35 g.AddAdjacency(1,4);
36 g.AddAdjacency(1,2);
37 g.AddAdjacency(2,4);
38 g.AddAdjacency(2,1);
39 g.AddAdjacency(4,3);
40 g.printGraph();
41 }
42
43 public class pNodeOneChild{
44 int data;
45 pNodeOneChild next;
43


46 }
47 }

Output program adalah :
[0]->1->3
[1]->2->4
[2]->1->4
[3]
[4]->3

Process completed.

Praktikum :
1. Buat prosedur untuk mengetahui apakah sebuah graph terhubung ?
2. Rubah struktur data diatas sehingga setiap edge memuat nilai selain 1, misalkan
menyatakan jarak atau cost.
3. Buat prosedur untuk mengetahui minimal spanning tree !


Hash
Ide dasar metode ini adalah tempat penyimpanan item berupa array terbatas dan
indek penyimpanan untuk sebuah item ditentukan oleh fungsi hash. Fungsi hash
mentransformasi sebuah item kedalam indek sesuai dengan ukuran array yang telah di
buat. h(k) U {0,1,2,,m-1} dimana m adalah ukuran array. Sifat-sifat yang
diharapkan dari h(k) adalah mudah dalam komputasi dan menghasilkan kunci distribus
yang uniform sepanjang (0,1,2,,m-1), diharapkan h(k1) h(k2) apabila k1 k2 (tidak
terjadi kolisi).

Macam-macam fungs Hash
Division Remainder Method

Bentuk fungsi : h(k) = k mod m, dimana m adalah ukuran tabel
Pilhan yang bagus untuk m adalah bilangan prima

Praktikum :
1. Buat program fungsi hash diatas, dan hitung prosentasi terjadinya kolisi
2. Menurut pendapat anda, bagaimana fungsi hash apabila kunci bukan merupakan
bilangan integer, misalkan terdapat pertanyaan dimana alamat satrio. Pertanyaan
tersebut kemunkinan bisa dijawab dengan alamat[satrio] adalah surabaya. Buat
program implementasi-nya.




Selamat Mengerjakan, Semoga sukses

Anda mungkin juga menyukai