0% menganggap dokumen ini bermanfaat (0 suara)
202 tayangan51 halaman

Modul Struktur Data 2016 1-7

Modul ini membahas konsep-konsep dasar pemrograman berorientasi objek (OOP) seperti class, objek, enkapsulasi, inheritance, dan polimorfisme dalam bahasa pemrograman Java beserta contoh kodenya.
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
202 tayangan51 halaman

Modul Struktur Data 2016 1-7

Modul ini membahas konsep-konsep dasar pemrograman berorientasi objek (OOP) seperti class, objek, enkapsulasi, inheritance, dan polimorfisme dalam bahasa pemrograman Java beserta contoh kodenya.
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 51

:: MODUL PRAKTIKUM STRUKTUR DATA ::

PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

:: MODUL 1 ::

KONSEP OOP DI JAVA


1.1 Konsep OOP Secara Umum
Konsep OOP (Object Oriented Programming) merupakan teknik
pemrograman yang memandang segalanya dalam bentuk objek.
Setiap objek dapat memiliki atribut dan method. Atribut objek
merupakan sifat atau keterangan dari objek tersebut. Sedangkan
method merupakan cara untuk memodifikasi atribut pada objek.
Beberapa fitur penting dalam OOP adalah sebagai berikut:
1. Konsep class dan objek (analogi: TV dan remote control). TV
sebagai class dan remote control sebagai objek. Suara, warna,
dan channel pada TV dapat diatur dengan mengakses menu
tertentu pada remote control.
2. Pemanggilan method dari class (analogi: memilih 1 menu pada
remote control, misal mengecilkan suara TV)
3. Enkapsulasi/ penyembunyian detail (analogi: proses elektronika
rumit untuk mengecilkan suara TV tidak perlu kita ketahui. Cukup
dengan mengakses method untuk mengecilkan suara yang
terdapat pada remote control)
4. Inheritance/ pewarisan: class dapat memiliki keturunan dan
mewariskan beberapa sifat dan method kepada keturunannya.
Selain itu, keturunan juga dapat memiliki sifat dan method yang
unik, yang tidak dimiliki oleh orangtuanya.
5. Polymorphism (poly: banyak, morph: bentuk) pada method, yakni
beberapa method dapat memiliki nama yang sama, tetapi
menerima parameter yang berbeda-beda, dan melakukan
pekerjaan yang berbeda pula.

1.2 Konsep OOP di dalam Java


Untuk dapat menguasai pemrograman Java, harus mengerti
dengan baik konsep pemrograman berorientasi objek, karena Java
merupakan bahasa pemrograman berorientasi objek. Pada bagian ini
akan dibahas konsep-konsep penting dalam pemrograman
berorientasi objek, sehingga diharapkan akan lebih mudah dalam
mempelajari bahasa Java.
1

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

1. Objek
Semua benda yang ada di dunia nyata dapat dianggap sebagai
sebuah objek. Pada dasarnya ada dua karakteristik utama pada
sebuah objek, yaitu :
Setiap objek memiliki atribut sebagai status yang kemudian
disebut sebagai state.
Setiap objek memiliki tingkah laku yang kemudian disebut
sebagai behaviour.
Contoh sederhananya adalah : objek sepeda
Sepeda memiliki atribut (state) : pedal, roda, jeruji, dan warna.
Sepeda memiliki tingkah laku (behaviour) : kecepatannya menaik,
kecepatannya menurun, dan perpindahan gigi sepeda.
Dalam pengembangan perangkat lunak berorientasi objek, objek
dalam perangkat lunak akan menyimpan state-nya dalam variabel dan
menyimpan informasi tingkah laku (behaviour) dalam method-method
atau fungsi-fungsi/prosedur.
2. Class
Class berbeda dengan objek. Class merupakan prototipe yang
mendefinisikan variabel-variabel dan method-method secara umum.
Sedangkan objek pada sisi yang lain merupakan instansiasi dari suatu
kelas.
Contoh program Class:
class Buku {
String pengarang;
String judul;
void Isi(String isi1,String isi2) {
judul = isi1;
pengarang = isi2;
}
void CetakKeLayar() {
if(judul==null && pengarang==null)
return;
System.out.println("Judul
:
",pengarang : "+pengarang);
}

"+judul+

}
2

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

class Karangan {
public static void main(String[] args) {
Buku a,b,c,d;
a = b = c = d = new Buku();
a.Isi("Pemrograman Java","Asep Herman Suyanto");
a.CetakKeLayar();
b.Isi(null,null);
b.CetakKeLayar();
c.Isi(null,"Johan Prasetyo Hendriyanto");
c.CetakKeLayar();
d.Isi("Pemrograman Web",null);
d.CetakKeLayar();
}
}

3. Enkapsulasi
Dalam sebuah objek yang mengandung variabel-variabel dan
method-method, dapat ditentukan hak akses pada sebuah variabel
atau method dari objek. Pembungkusan variabel dan method dalam
sebuah objek dalam bagian yang terlindungi inilah yang disebut
dengan enkapsulasi.
Manfaat dari proses enkapsulasi adalah:
Modularitas
Kode sumber dari sebuah objek dapat dikelola secara
independen dari kode sumber objek yang lain.
Information Hiding
Karena kita dapat menentukan hak akses sebuah
variabel/method dari objek, dengan demikian kita bisa
menyembunyikan informasi yang tidak perlu diketahui objek
lain.
4. Inheritance
Class dapat didefinisikan dari referensi class lain yang telah
terdefinisi. Inheritance merupakan pewarisan atribut dan method pada
sebuah class yang diperoleh dari class yang telah terdefinisi tersebut.
Setiap subclass akan mewarisi state (variabel-variabel) dan behaviour
(method-method) dari superclass-nya. Subclass kemudian dapat
menambahkan state dan behaviour baru yang spesifik dan dapat pula
memodifikasi (override) state dan behaviour yang diturunkan oleh
superclass-nya.
3

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

Keuntungan dari inheritance adalah :


Subclass menyediakan state/ behaviour yang spesifik yang
membedakannya dengan superclass.
Programmer Java dapat mendefinisikan superclass khusus yang
bersifat generik, yang disebut abstract class, untuk
mendefinisikan class dengan behaviour dan state secara
umum.
Istilah dalam inheritance yang perlu diperhatikan :
Extends
Keyword ini harus kita tambahkan pada definisi class yang
menjadi subclass.
Superclass
Superclass digunakan untuk menunjukkan hirarki class yang
berarti class dasar dari subclass/class anak.
Subclass
Subclass adalah class anak atau turunan secara hirarki dari
superclass.
Super
Keyword ini digunakan untuk memanggil konstruktor dari
superclass atau menjadi variabel yang mengacu pada
superclass.
Methode Overriding
Pendefinisian ulang method yang sama pada subclass. Dalam
inheritance, method overriding berbeda dengan method
overloading. Kalau method overriding adalah mendefinisikan
kembali method yang sama, baik nama method maupun
signature atau parameter yang diperlukan dalam subclass,
kalau method overloading adalah mendefinisikan method yang
memiliki nama yang sama, tetapi dengan signature yang
berbeda dalam definisi class yang sama.
Contoh program Inheritance:
class A {
int x;
int y;
void TampilkanNilaixy()
System.out.println("Nilai x : "+x+", y : "+y);
}
}
4

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

class B extends A {
int z
void TampilkanJumlah() {
//subclass dapat mengakses member dari superclass
System.out.println("Jumlah : " + (x+y+z));
}
}
class Inheritance {
public static void main(String[] args) {
A VarsuperOb = new A();
B VarsubOb
= new B();
System.out.println("SuperClass");
VarsuperOb.x = 10;
VarsuperOb.y = 20;
VarsuperOb.TampilkanNilaixy();
System.out.println("SubClass");
//member superclass dapat diakses dari subclass nya
VarsubOb.x = 5;
VarsubOb.y = 4;
VarsubOb.TampilkanNilaixy();
System.out.println("SubClass Jumlah");
//member tambahan yang hanya ada dalam subclass
VarsubOb.z = 30;
VarsubOb.TampilkanJumlah();
System.out.println("SubClass");
VarsubOb.x = 15
VarsubOb.y = 14;
VarsubOb.TampilkanNilaixy();
System.out.println("SuperClass");
VarsuperOb.x = 10;
VarsuperOb.y = 20;
VarsuperOb.TampilkanNilaixy();
System.out.println("SubClass Jumlah");
VarsubOb.z = 60;
VarsubOb.TampilkanJumlah();
}
}

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

5. Polimorfisme
Kata polimorfisme yang berarti satu objek dengan banyak bentuk
yang berbeda, adalah konsep sederhana dalam bahasa
pemrograman berorientasi objek yang berarti kemampuan dari suatu
variabel referensi objek untuk memiliki aksi berbeda bila method yang
sama dipanggil, dimana aksi method tergantung dari tipe objeknya.
Kondisi yang harus dipenuhi supaya polimorfisme dapat
diimplementasikan adalah:
Method yang dipanggil harus melalui variabel dari basis class
atau superclass.
Method yang dipanggil harus juga menjadi method dari basis
class.
Signature method harus sama baik pada superclass maupun
subclass.
Method access attribute pada subclass tidak boleh lebih terbatas
dari basis class.
Contoh program Polimorfisme:
abstract class Bentuk {
int panjang;
protected int lebar;
public String getBentuk() {
return "Bentuk Dasar";
}
public abstract int hitungLuas();
}
class BujurSangkar extends Bentuk {
public BujurSangkar(int panjang1, int lebar1) {
this.panjang = panjang1;
this.lebar = lebar1;
}
public String getBentuk() {
return "Bentuk Bujur Sangkar";
}
public int hitungLuas() {
return panjang*lebar;
}
}

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

class SegiTiga extends Bentuk {


public SegiTiga(int panjang2, int lebar2) {
this.panjang = panjang2;
this.lebar = lebar2;
}
public int hitungLuas() {
return this.panjang*this.lebar/2;
}
}
class Polimorfisme {
public static void cetakLuasBentuk(Bentuk btk) {
System.out.println(btk.getBentuk()+"
dengan
"+btk.hitungLuas());
}
public static void main(String[] args) {
BujurSangkar bs = new BujurSangkar(10,20);
BujurSangkar bs1 = new BujurSangkar(10,20);
SegiTiga st = new SegiTiga(5,10);
SegiTiga st1 = new SegiTiga(50,100);
cetakLuasBentuk(bs);
cetakLuasBentuk(bs1);
cetakLuasBentuk(st);
cetakLuasBentuk(st1);
}
}

luas

Latihan
1. Selesaikan permasalahan berikut:
Buat class bernama Counter untuk menginstansiasi objek
yang mensimulasikan proses penghitungan. Class Counter
memiliki 1 atribut (instance variable) bernama count. Method
yang dimiliki oleh class Counter adalah:
initialize, tanpa parameter, yang digunakan untuk
menginisialisasi variable count dengan nilai 0.
getCount, tanpa parameter, yang digunakan untuk
mengembalikan nilai yang tersimpan di variable count.
reset, tanpa parameter, yang digunakan untuk
mengeset nilai variable count menjadi 0.
increment, tanpa parameter, yang digunakan untuk
menaikkan nilai variable count dengan 1.
7

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

decrement, tanpa parameter, yang digunakan untuk


menurunkan nilai variable count dengan 1. Jika

nilainya menjadi negatif (kurang dari 0), maka reset


nilainya menjadi 0.
Buat file script Java untuk menggunakan class Counter di atas:
Buat 1 objek dari class Counter (beri nama c1).
Panggil method increment dua kali dan method
decrement satu kali pada objek c1.
Panggil method getCount pada c1.
Buat lagi 1 buah objek dari class Counter (beri nama
c2).
Panggil method increment tiga kali dan method
decrement satu kali pada objek c2.
Panggil method getCount pada c1 dan c2.
Apa kesimpulan yang Anda dapatkan?
2. Selesaikan permasalahan berikut:
Sebuah sistem penjualan buku akan dibuat untuk mencatat
jumlah buku yang sudah terjual. Sebuah class bernama Buku
diperlukan dalam sistem ini. Class Buku memiliki 2 instance
variabel: nama dan harga. Method yang dimiliki oleh class
Buku adalah sebagai berikut:
initialize, dengan 2 parameter (n dan h), yang
digunakan untuk menginisialisasi atribut nama dengan
n dan harga dengan h.
getBuku, tanpa parameter, yang digunakan untuk
mengembalikan atribut nama dari buku.
getHarga, tanpa parameter, yang digunakan untuk
mengembalikan atribut harga dari buku.
setBuku, dengan 1 parameter (n), yang digunakan
untuk mengeset atribut nama dengan n.
setHarga, dengan 1 parameter (h), yang digunakan
untuk mengeset atribut harga dengan h.
toString, tanpa parameter, yang digunakan untuk
mencetak kalimat di layar dalam bentuk: <nama>
memiliki harga <harga>, di mana <nama> dan
<harga> adalah dua instance variabel dari class Buku.
Buat file script Java untuk menggunakan class Buku di atas:
8

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

Buat 3 objek dari class Buku (beri nama b1, b2, dan
b3). Untuk masing-masing objek buku tersebut,
inisialisasikan pasangan nama dan harganya (Anda
yang tentukan sendiri).
Panggil method toString pada ketiga objek buku
yang sudah Anda buat.
Cobalah bermain-main dengan method setBuku,
setHarga, dan toString untuk mengubah nama buku
dan harganya. Lakukan pada ketiga objek yang sudah
Anda buat. Apa kesimpulan yang Anda dapatkan?

3. Selesaikan permasalahan berikut:


Buat sebuah class Java yang bernama Durasi yang memiliki
2 atribut (instance attribute): menit dan detik serta memiliki
method-method seperti berikut:
initialize(m,d): berfungsi untuk mengeset atribut
menit dengan m dan atribut detik dengan d.
toString(): berfungsi untuk mengembalikan nilai
atribut menit dan detik dalam bentuk String: mm:dd.
Contoh: untuk nilai menit=3 dan detik=5, maka
hasilnya adalah 3:05. Perhatikan bahwa jika nilai detik
kurang dari 10, maka harus ada awalan 0 pada nilai
detiknya.
Buat sebuah file script Java yang melakukan hal-hal berikut:
Membuat sebuah objek baru dari class Durasi dengan
memberikan nilai awal 4 untuk menit dan 2 untuk
detik.
Panggil method toString() pada objek tersebut.
Buat objek baru lagi dari class Durasi dengan
memberikan nilai awal 7 untuk menit dan 12 untuk
detik.
Panggil method toString() pada objek tersebut.

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

:: MODUL 2 ::
ARRAY/ LARIK
Array adalah sekumpulan data yang memiliki tipe yang sama,
variabel yang sama dan tiap data dibedakan dengan indeks dalam
array tersebut. Indeks dari tiap array dimulai dengan indeks ke-0. Jadi
jika suatu array memiliki berisi 5 buah data maka indeks maksimal dari
array tersebut adalah 4. Manfaat dari array adalah untuk mengurangi
jumlah variabel yang digunakan. Array dapat berbentuk dimensi satu,
dua, tiga dan seterusnya tergantung kebutuhan dari pengguna.
0
100

1
200

2
300

3
400

4
500

Gambar 2.1 Contoh Array


2.1 Membuat dan Menginisialisasi Array
Untuk menggunakan array di program, terlebih dahulu harus
mendeklarasikan variabel dengan tipe acuan yang mengacu ke array.
Array adalah obyek. Semua obyek di Java menempati ruang memori.
Semua obyek di Java dibuat (dikonstruksi) dengan menggunakan
kata kunci new. Untuk membuat obyek array, terlebih dahulu harus
ditentukan tipe data atau tipe acuan beserta jumlah elemen array.
Proses pendeklarasian dan pembuatan array, dapat dilakukan
dengan dua tahap. Pertama, Anda dapat mendeklarasikan variabel
yang mengacu ke obyek array dan kedua membuat obyek array.
Untuk mendeklarasikan variabel yang mengacu ke obyek array, perlu
ditentukan tipe data atau tipe acuan untuk elemen array.
Berikut ini adalah sintak pendeklarasian variabel yang mengacu ke
obyek array:
tipe-data[] nama-variabel; atau
tipe-data nama-variabel[];

contoh:
double[] arrayC; atau double arrayC[];

Setelah mendeklarasikan variabel yang mengacu ke obyek array,


obyek array kemudian dibuat sebagaimana sintak berikut ini:
nama-variabel = new tipe-data[jumlah-elemen];

10

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

contoh:
arrayC = new double[6];

Proses pendeklarasian dan pembuatan array, juga dapat dilakukan


dalam satu tahap. Berikut ini adalah sintak untuk mendeklarasikan
dan membuat sebuah obyek array sekaligus:
tipe_data[] nm_variabel = new tipe_data[jml_elemen];

atau
tipe_data nm_variabel[] = new tipe_data[jml_elemen];

contoh:
int[] arrayA = new int[15]; atau
int arrayA[] = new int[15];

Pernyataan di atas melakukan tiga tugas sekaligus yaitu


mendeklarasikan variabel arrayA yang mengacu ke obyek array,
membuat array yang memiliki 15 elemen dengan tipe int, dan memberi
variabel arrayA acuan (reference) ke objek array.
Pendeklarasian variabel array secara otomatis juga bisa dilakukan
seperti berikut:
int [] angka = {2, 3, 4, 5, 6, 7};

2.2 Mengakses Data pada Array


Data pada array dapat diakses dengan mengakses indeksnya
langsung.
Contoh program Array:
public class ArrayTest {
public static void main(String[] args) {
int[] kumpulanInt = new int[4];
kumpulanInt[0]
kumpulanInt[1]
kumpulanInt[2]
kumpulanInt[3]

=
=
=
=

121;
2324;
300;
343;

System.out.println(isi kumpulanInt indeks ke-1


adalah + kumpulanInt[1]);
}
}

11

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

2.3 Array Dua Dimensi


Array bisa kita definisikan lebih dari satu dimensi. Contohnya
adalah sebagai berikut untuk dua dimensi:
int [][] arrayKu = new int [3][5];

Ini berarti bahwa variabel arrayKu terdiri dari 3 baris array berurutan
yang masing-masing baris array tersebut mempunyai 5 elemen yang
juga tersusun berurutan.

baris 0
baris 1
baris 2

kolom 0
[0][0]
[1][0]
[2][0]

kolom 1
[0][1]
[1][1]
[2][1]

kolom 2
[0][2]
[1][2]
[2][2]

Kolom 3
[0][3]
[1][3]
[2][3]

kolom 4
[0][4]
[1][4]
[2][4]

indeks = [baris][kolom]

Array 2 dimensi sangat bermanfaat untuk mengimplementasikan


struktur data berdimensi 2, misalnya adalah matrik, papan catur, peta
sebuah daerah, atau simulasi suatu perusahaan dengan m
cabangnya dimana setiap cabang menjual n jenis barang.
Contoh program array 2 dimensi:
class ArrayDua {
public static void main (String[] args) {
int [][] angka = new int [2][3];
int k = 1;
for (int i = 0; i<2; i++) {
for (int j = 0; j<3; j++) {
angka [i][j] = k*10;
System.out.println(angka[i][j]);
if (j<2) System.out.print( );
k++;
}
System.out.println();
}
}
}

12

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

2.4 Array Multi Dimensi


Array dapat pula didefinisikan multidimensional/ banyak dimensi
tergantung kebutuhan sistem program yang akan dibuat. Array
multidimensi diimplementasikan sebagai array yang terletak di dalam
array. Array multidimensi dideklarasikan dengan menambahkan
jumlah tanda kurung setelah nama array. Sebagai contoh:
int[][] twoD = new int[512][128];
//Elemen 512x128 dari integer array
char[][][] threeD = new char[8][16][24];
//Elemen 8x16x24 dari char array
String[][] dogs = {{ "terry", "brown" }, { "Kristin",
"white" }, { "toby", "gray"}, { "fido", "black"} };
//String array 4 baris x 2 kolom

Untuk mengakses sebuah elemen di dalam array multidimensi,


sama saja dengan mengakses array satu dimensi. Misalnya saja,
untuk mengakses elemen pertama dari baris pertama di dalam array
dogs, kita akan menulis:
System.out.print(dogs[0][0]);

2.5 Panjang Array


Untuk mengetahui berapa banyak elemen di dalam sebuah array,
dapat menggunakan atribut length dari array. Atribut ini akan
mengembalikan ukuran dari array itu sendiri. Sebagai contoh:
arrayName.length
Contoh program panjang array:
public class ArraySample {
public static void main( String[] args ) {
int[] ages = new int[100];
for( int i=0; i<ages.length; i++ ) {
System.out.print( ages[i] );
}
}
}

13

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

Latihan
1. Deklarasikan satu array untuk menyimpan nilai mean, median dan
modus dari sekumpulan data (minimal 10 data)!
Contoh:
input = array data
output = array mean, median, modus
2. Buat operasi inverse matriks 3x3.
3. Buat operasi transpose matriks 3x2.
4. Buatlah program untuk melakukan evaluasi cuaca sebuah daerah
setiap hari, pekan maupun bulan selama satu tahun.
Parameternya dapat berupa suhu, kecepatan angin, dan tingkat
kelembaban. Program ini dapat menghasilkan nilai rata-rata dari
tiap parameter cuaca tersebut.

14

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

:: MODUL 3 ::
LINKED LIST
Linked List (Daftar Berkait) adalah suatu simpul (node) yang
dikaitkan dengan simpul yang lain dalam suatu urutan yang tertentu.
Suatu simpul dapat berbentuk suatu struktur (struct). Setiap simpul
memiliki dua kelompok elemen yaitu elemen data dan elemen pointer.
Suatu simpul harus mempunyai satu atau lebih elemen struktur yang
berupa pointer. Elemen struktur yang berupa pointer ini disebut
dengan kait (link).
3.1 Single Linked List
Single Linked List adalah linked list dimana setiap node hanya
menunjuk node selanjutnya (hanya memiliki satu elemen pointer).
Simpul

Elemen Data

Pointer

Simpul
Elemen Data

Pointer

Simpul

List
Elemen Data

NULL

3.2 Double Linked List


Double Linked List adalah linked list dimana setiap node dapat
menunjuk node sebelum dan node setelah (memiliki 2 elemen
pointer).
Simpul
NULL

Elemen
Data

Pointer
2
Simpul

List

Pointer
1

Elemen
Data

Pointer
2

Simpul
Pointer
1

Elemen
Data

NULL

15

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

3.3 Circular Linked List


Circular linked list dapat diimplementasikan dalam bentuk single
linked list dan double linked list. Circular single linked list adalah linked
list dimana node terakhir menunjuk node pertama. Sedangkan
Circular double linked list, node terakhir menunjuk node pertama dan
node pertama menunjuk node terakhir.
Berikut adalah contoh class SimpleSingleLinkedList (SimpleSLL).
Single Linked List ini memiliki dua atribut: @head untuk menunjuk pada
node pertama dan @tail untuk menunjuk pada node terakhir.
import java.util.*;
public class LP3 {
String nama;
String asal_kota;
LP3 next;
public void input(){
Scanner in= new Scanner(System.in);
System.out.print("masukan nama :");
nama= in.nextLine();
System.out.print("masukan asal kota :");
asal_kota= in.nextLine();
}
public void view(){
System.out.println("\n\nnama :"+nama);
System.out.println("asal kota :"+asal_kota);
}
}
class test {
LP3 kepala,buntut;
public void input(){
LP3 rak=new LP3();
rak.input();
if(kepala==null){
kepala=rak;
buntut=rak;
}
else{
buntut.next=rak;
buntut=rak;
16

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

}
}
public void view(){
LP3 tampil=kepala;
while(tampil!=null){
tampil.view();
tampil=tampil.next;
}
}
public void delete(String nama){
LP3 dat = kepala;
LP3 sbdat = buntut;
while (!dat.nama.equals(nama)) {
if (dat.next == null) {
System.out.println("Maaf data tidak ada");
return;
}
sbdat = dat;
dat = dat.next;
}
if (dat == sbdat) {
kepala = kepala.next;
} else if (dat == buntut) {
sbdat.next = null;
buntut = sbdat;
} else {
sbdat.next = dat.next;
}
System.out.println("Data berhasil dihapus");
}
void update(String nama) {
LP3 dat = kepala;
if(kepala == null){
System.out.println("maaf data tidak ada");
return;
}
while (!dat.nama.equals(nama)) {
if (dat.next == null) {
System.out.println("Maaf data tidak ada");
return;
}
dat = dat.next;
17

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

}
dat.input();
}
public static void main(String[] args) {
test tis=new test();
Scanner in=new Scanner (System.in);
int menu=1;
while(menu!=0){
System.out.println("\nMenu :");
System.out.println("1. Input");
System.out.println("2. View");
System.out.println("3. update");
System.out.println("4. delete");
System.out.println("5. Exit");
System.out.print("\nMasukkan menu : ");
menu=in.nextInt();
if (menu==1){
tis.input();
}
else if(menu==2){
tis.view();
}
else if(menu==3){
System.out.print("Masukkan nama data yang update :
");
String up = in.next();
tis.update(up);
}
else if(menu==4){
System.out.print("Masukkan nama data yang delete :
");
String del = in.next();
tis.delete(del);
}else if(menu==5){
menu=0;
System.out.println("EXIT");
}
else{
System.out.println("menu tidak ada");
}
}
}
18

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

Latihan
1. Gunakan implementasi Single Linked List yang sudah diberikan di
atas. Tugas Anda:
Buatlah sebuah program yang menggunakan Single Linked
List untuk menyimpan elemen informasi mahasiswa berupa
NPM dan Nama. (Petunjuk: Anda dapat menggunakan Struct).
Masukkan beberapa data mahasiswa ke dalam linked list dan
tampilkan hasilnya.
Coba hapus beberapa data mahasiswa dari linked list dan
tampilkan hasilnya.
2. Modifikasi implementasi Single Linked List pada contoh di atas
dengan menambahkan method untuk menyisipkan data baru di
depan/bagian head (prepend).
3. Modifikasi implementasi Single Linked List pada contoh di atas
dengan menambahkan method untuk menghapus data di
depan/bagian head.
4. Modifikasi implementasi Single Linked List pada contoh di atas
menjadi Double Linked List. Tugas Anda:
Modifikasi method untuk menambahkan NODE baru ke dalam
linked list.
Modifikasi method untuk menghapus sebuah NODE dari
linked list.
5. Sama dengan nomor 2, tetapi modifikasikan contoh menjadi
Circular Single Linked List.
6. Sama dengan nomor 2, tetapi modifikasikan contoh menjadi
Circular Double Linked List.
7. Buatlah sebuah program simulasi: Nasabah yang tiba di Bank.
Ketika seorang nasabah sampai di bank, kemudian mereka
mengambil tempat pada antrian nasabah, menunggu dipanggil
oleh kasir (teller). Pihak bank bermaksud melakukan survei waktu
rata-rata yang dihabiskan seorang nasabah di antrian. Untuk itu,
seorang nasabah yang datang diberi tiket yang mencatat waktu
kedatangan, tiket ini diberikan kepada teller bank ketika si
nasabah telah mencapai antrian paling depan atau telah dipanggil
oleh teller. Setiap node pada antrian harus memiliki informasi
berikut ini :
ID Nasabah [a sequential number]
19

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

Waktu kedatangan
Waktu keberangkatan
8. Buatlah program untuk melakukan manipulasi string, tiap karakter
satu node. Pengguna bisa memasukkan string apapun, dan bisa
melakukan beberapa operasi manipulasi string sebagai berikut :
Memeriksa apakah string merupakan string yang jika dibolak
balik memilki arti yang sama, misal : malam malam : OK.
Membalik sebuah string, misal : praktikum algoritma dan
struktur data atad rutkurts nad amtirogla mukitkarp : OK.
Menyisipkan string di karakter ke-x, misal : aku informatika,
masukkan pada karakter ke-5, kata 'mahasiswa ' aku
mahasiswa informatika : OK.
Mencari sub string, misal : aku kua aku senang pemrograman,
cari substring aku, hasilnya = 2 : OK.
Secara umum list ini harus memiliki fungsi-fungsi berikut : tambah
satu karakter di belakang, hapus paling belakang, hapus paling
depan, cetak list, dan hapus list. Untuk mempermudah buatlah
dengan double linked list.
9. Buatlah database siswa yang mengikuti praktikum dengan struktur
data sebagai berikut:
ID Siswa
Nama Siswa
Kelas
Jadwal Praktikum //berisi hari dan jam
Jumlah Modul yang telah diselesaikan modul [8]
//jumlah
modul yang harus diselesaikan adalah 8
untuk elemen data modul berupa linked list lagi yang berisi :
o State Pengerjaan Modul
o No Modul
o Nilai Modul
o Asisten Modul
o Absensi
//kehadiran pada saat praktikum
Method-method yang harus ada :
insert siswa praktikum baru.
edit data praktikum siswa.
lihat data seluruh siswa yang mengikuti praktikum.
lihat detail siswa dengan modulnya.

20

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

21

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

:: MODUL 4 ::
STACK/ TUMPUKAN
Salah satu konsep yang sangat bermanfaat dalam ilmu komputer
adalah stack. Stack adalah koleksi item/ data yang terurut dimana item
baru akan dimasukkan atau item lama akan dihapus melalui satu
ujung/ jalan, dikenal dengan nama top dari stack. Stack bersifat
dinamis, artinya item/ data yang tidak terpakai bisa dihapus.
PUSH( )

BOTTOM

F
E
D
C
B
A
Stack

TOP

Deklarasi stack bisa diimplementasikan dengan menggunakan


array maupun dengan menggunakan linked list. Stack adalah linked
list dengan jenis LIFO/ Last In First Out, artinya data/ item yang paling
akhir masuk maka akan dikeluarkan terlebih dahulu. Dan sebaliknya,
data yang paling awal masuk maka akan dikeluarkan paling akhir.
Fungsi-fungsi standar dalam stack adalah fungsi pop() dan push().
Fungsi pop() untuk mengambil data/ item dari sebuah stack.
Sedangkan fungsi push() untuk memasukkan item baru ke dalam
sebuah stack.
Berikut adalah contoh implementasi stack sederhana dalam Java
yang memiliki 4 method untuk inisialisasi, push, pop, dan view Stack.
package Infix;
import java.util.Scanner;
import java.util.Stack;
public class infix {
String infixExp = "";
String postfixExp = "";
Stack<Character> s = new Stack<Character>();
public void setInfixExp(String infixExp) {
this.infixExp = infixExp;
22

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

}
public boolean isOperator(char ch) {
if (ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch
== '^') {
return true;
}
return false;
}
public int degreeOp(char op) {
if (op == '+' || op == '-') {
return 1;
} else if (op == '*' || op == '/') {
return 2;
} else if (op == '^') {
return 3;
} else {
return 0;
}
}
public String toPostfix() {
char ch;
for (int i = 0; i < infixExp.length(); i++) {
ch = infixExp.charAt(i);
if (isOperator(ch)) {
if (s.isEmpty() || degreeOp(ch) >
degreeOp(s.peek())) { //perbandingan derajat relasi
s.push(ch);
} else {
postfixExp += s.pop();
do {
if (s.isEmpty() || degreeOp(ch) >
degreeOp(s.peek())) {
break;
} else {
//System.out.println(ch);
postfixExp += s.pop();
}
} while (degreeOp(ch) <= degreeOp(s.peek()));
//perbandingan derajat relasi
s.push(ch);
}
} else if (ch == ')') {
do {
23

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

postfixExp += s.pop();
} while (s.peek() != '(');
s.pop();
} else if (ch == '(') {
s.push(ch);
} else {
postfixExp += ch;
}
}
if (!s.isEmpty()) {
do {
postfixExp += s.pop();
} while (!s.isEmpty());
}
return postfixExp;
}
}
class TestInfixToPostfix {
public static void main(String[] args) {
infix itp = new infix();
String infix;
Scanner keyIn = new Scanner(System.in);
//(a+b)/((c-d)*e^f)
//(A+B)/((C-D)*E^F)
System.out.print("Infix Expression : ");
infix = keyIn.nextLine();
itp.setInfixExp(infix);
System.out.println("Postfix Expression : " +
itp.toPostfix());
}}

24

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

package TP4;
import java.util.Scanner;
import java.util.Stack;
public class TP4 {
static Stack S = new Stack();
static Scanner in = new Scanner(System.in);
static String a,dibalik = "";
static int max_st;
static String top ;
static void pushh(Stack S, String a){
a = (String) S.push(a);
}
static void popp(Stack S, String a ){
a = (String) S.pop();
System.out.println("stack: " + S);
}
public static void main(String[] args) {
System.out.print("Masukkan Max_Stack : ");
max_st=in.nextInt();
for (int i = 0; i < max_st; i++) {
System.out.print("PUSH -> ");
a=in.next();
pushh(S, a);
}
System.out.println(S);
System.out.println("POP
=
y
/
anykeys=stop");
while(!a.equals("n")){
System.out.print("POP -> ");
a=in.next();
if (a.equals("y") && !S.isEmpty()) {
popp(S, a);
}else{
System.out.println("apa
stack
"+S.isEmpty());
break;
}
System.out.println("apa stack kosong?
"+S.isEmpty());
if (S.isEmpty()) {
System.out.println("stop");
kosong?

25

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

break;
}
}
}}

Latihan
Dengan menggunakan contoh class Stack di atas, kerjakan soal no 1
sampai 10. Anda mungkin perlu melakukan modifikasi terhadap class
Stack.
1. Buatlah program untuk menerima masukan berupa sebuah
persamaan matematis bertanda kurung dan kemudian melakukan
pengecekan apakah pemakaian tanda kurungnya sudah tepat
ataukah belum. Jika belum tepat maka tunjukkan letak
kesalahannya ada di mana. Gunakanlah tipe struktur data STACK.
2. Buatlah program untuk mengevaluasi hasil operasi sebuah
persamaan matematis dalam format POSTFIX tanpa kurung yang
dimasukkan oleh user. Gunakanlah struktur data tipe STACK.
3. Buatlah program untuk mengkonversi persamaan matematis
format INFIX ke dalam format POSTFIX. Gunakanlah tipe struktur
data STACK.
4. TOWER OF HANOI
Buatlah
sebuah
program
Menara
Hanoi
yang
mengimplementasikan stuktur data stack dengan menggunakan
linked list, tanpa menerapkan rekursi di dalamnya. Input program
berupa jumlah piringan (discs), outputnya berupa langkah-langkah
perpindahan piringan dari menara asal ke menara tujuan.
Contoh : Ilustrasikan perpindahan piringan dari menara asal (A)
ke menara tujuan (C) dengan bantuan menara bantu (B) yang
terletak di antara menara A dan C.
Input
: 3 piringan
Output : A C
AB
CB
AC
BA
BC
AC
5. POSTFIX INTERPRETER
26

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

Asumsikan sebuah mesin yang mempunyai register tunggal dan 6


instruksi. Tulis program yang menerima sebuah ekspresi postfix
berisi karakter operand tunggal dan diikuti operator (+, -, *, /).
Output program berupa serangkaian instruksi untuk mengevaluasi
ekspresi postfix yang dimasukkan dan meninggalkan hasil
akhirnya pada register.
Keenam instruksi yang digunakan yaitu:
PUT untuk menempatkan operand ke register.
GET
untuk menempatkan isi register ke variable A.
ADD untuk menambahkan isi variable A ke dalam register.
SUB untuk mengurangi isi register dengan variable A.
MUL untuk mengalikan isi dari register dengan variable A.
DIV untuk membagi isi dari register dengan variable A.
Catatan: Gunakan variable TEMP_n sebagai temporary variable.
Contoh :
Input
: ekspresi postfix ABC*+DE-/
Output :
PUT B
MUL C
GET
TEMP_1
PUT A
ADD TEMP_1
GET TEMP_2
PUT D
SUB
E
GET TEMP_3
PUT TEMP_2
DIV TEMP_3
GET TEMP_4
Petunjuk : Asumsikan register sebagai stack. Struktur data yang
dipakai boleh menggunakan stack dengan array maupun stack
dengan linked list.
6. PERMUTATION
Tulislah program yang mampu menghitung jumlah permutasi
beserta macamnya dari sekumpulan karakter tunggal yang
diinputkan user. Program harus mengimplementasi-kan struktur
data stack dengan menggunakan linked list.
Contoh :
27

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

Input : 3 buah karakter yaitu a, b, c (dipisahkan oleh tanda


koma)
Output: Jumlah permutasi : 6
Macam permutasi : abc, acb, bac, bca, cab, cba
7. POSTFIX CALCULATOR
Tulislah program yang mampu menampilkan hasil akhir
penghitungan dimana user menginputkan ekspresi postfix yang
berisi operand berupa karakter tunggal beserta operator (+, -, *,
/,^). Program harus mengimplementasikan struktur data stack
dengan menggunakan array.
Contoh:
Input
: ekspresi postfix : 32+4*51-/
Output : hasil akhir = 5
8. INFIX TO PREFIX
Tulislah program yang mampu mengubah ekspresi infix yang
berisi operand berupa karakter tunggal beserta operator (+, -, *, /)
menjadi ekspresi prefix. Perhatikan tingkatan prioritas (priority
level) antar operand. Misal tanda * memiliki prioritas yang lebih
tinggi dibandingkan tanda + dan -. Untuk memberikan prioritas
pada
operasi
antara
dua
buah
operand
dengan
mengesampingkan priority level yang sudah ada, gunakan tanda
kurung
buka
dan
kurung
tutup.
Program
harus
mengimplementasikan struktur data stack dengan menggunakan
linked list.
Contoh :
Input
: ekspresi infix: (A+B)*C
Output : ekspresi prefix: *+ABC
9. DELIMITER CHECKER
Tulislah program yang mampu melakukan pengecekan terhadap
sebuah string yang di dalamnya mengandung satu atau beberapa
pasang tanda delimiter yaitu tanda kurung biasa buka dan tutup (
), tanda kurung kurawal buka dan tutup { }, serta tanda kurung
siku buka dan tutup [ ]. Program mengeluarkan pernyataan
Benar jika struktur string sudah benar dan sebaliknya
mengeluarkan pernyataan Salah jika struktur string salah (ada
tanda delimiter yang tidak mempunyai pasangan). Program harus
28

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

mengimplementasikan struktur data stack dengan menggunakan


array.
Contoh:
Input : a{bc[d]e}f(g)
Output : BENAR
Input : a{bc[d}e]f(g)
Output : SALAH
10. PALINDROME IDENTIFIER
Palindrome adalah kata yang menghasilkan bunyi ucapan yang
sama jika dibaca dari depan maupun dari belakang. Tulislah
program untuk memeriksa apakah sebuah kata termasuk
palindrome atau bukan. Program harus mengimplementasikan
struktur data stack dengan menggunakan linked list.
Contoh:
Input : katak
Output : PALINDROME
Input : palapa
Output : BUKAN PALINDROME

29

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

:: MODUL 5 ::
QUEUE/ ANTRIAN
Selain stack, konsep struktur yang juga sering dipakai dalam ilmu
computer adalah queue/ antrian. Sama dengan stack, struktur data
queue dikembangkan dari struktur data Linked List ataupun Array.
Yang membedakan queue dengan stack adalah mode
pengaksesan data/ itemnya. Queue dikenal dengan istilah FIFO, First
In First Out. Konsep tersebut berarti bahwa item data yang pertama
kali masuk ke dalam antrian/ queue maka item data tersebutlah yang
akan dikeluarkan pertama kali. Dan sebaliknya jika sebuah item data
masuk ke dalam antrian yang terakhir kali, maka item tersebut akan
keluar juga paling akhir.
Remove( )

Insert( )

Queue
A

Front

Back

Berikut contoh implementasi class Queue sederhana yang memiliki


lima method:.
package queue;
public class MyFirstQueue {
private int ukuran;
private int[] antrian;
private int top, down;
public MyFirstQueue (int size){
//ukuran mencatat jumlah elemen pada queue
ukuran=size;
antrian =new int[ukuran];
top=-1;
down=0;
}

30

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

public void enqueue(int data){


//sebelum memasukkan data, cek queue penuh atau
tidak
if (top==ukuran-1){
System.out.println("Queue penuh. Enqueue
dibatalkan");
}
else {
System.out.println("Enqueue..."+data);
//letakkan data pada queue
antrian[++top]=data;
}
}
public int dequeue(){
//sebelum mengambil data, cek queue kosong atau
tidak
if (top==-1) {
System.out.println("queue kosong. dequeue
dibatalkan.");
return -1;
}
else {
System.out.println("Dequeue....");
//ambil isi queue pada posisi terdepan,
tambahkan indeks
//down, dan simpan ke variabel result
int result=antrian[down++];
//kembalikan hasil result
return result;
}
}
//Method untuk tampilkan data dalam queue
public void view(){
System.out.println("Menampilkan isi queue mulai
posisi terdepan");
//looping pada queue mulai posisi terdepan
sampai terbelakang
for (int i=down;i<=top;i++){
System.out.println(antrian[i]);
}
}

31

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

//Main program untuk mengisi dan mengecek Stack


public static void main(String[] args){
MyFirstQueue mfq=new MyFirstQueue(3);
mfq.enqueue(2);
mfq.enqueue(1);
mfq.enqueue(7);
mfq.view();
System.out.println("Data yang dikeluarkan:
"+mfq.dequeue());
mfq.view();
}
}

package TP4;
import java.util.Scanner;
public class TP4 {
private String data[][];
private int size;
private int last;
public TP4(int n) {
data = new String[n][3];
size = n;
last = -1;
}
public boolean isFull() {
return last == (size - 1) ? true : false;
}
public boolean isEmpty() {
return last == -1 ? true : false;
}
public void enQueue(String meja, String makanan, String
minuman) {
if (!isFull()) {
int id = ++last;
data[id][0] = meja;
32

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

data[id][1] = makanan;
data[id][2] = minuman;
} else {
System.out.println("Maaf, data penuh");
}
}
public void deQueue() {
if (!isEmpty()) {
System.out.println("Data terhapus");
for (int i = 0; i < last; i++) {
data[i][0] = data[i + 1][0];
data[i][1] = data[i + 1][1];
data[i][2] = data[i + 1][2];
}
data[last][0] = "";
data[last][1] = "";
data[last][2] = "";
last--;
} else {
System.out.println("Empty !");
}
}
public void cetak(String kom) {
System.out.println(kom);
System.out.println("Antrian "+" | "+ "Meja "
| " + "Makanan"
+"
| "+ "Minuman"
+"
|");
for (int i = 0; i <= last; i++) {
System.out.println(
i+1 +"\t"
+"|"+
data[i][0] +"\t"+ " | " + data[i][1]+"\t"+"
| "+
data[i][2]+"\t"+"
|");
}
}

+ "

public static void main(String[] args) {


Scanner in= new Scanner(System.in);
System.out.print("Masukkan Jumlah Queue : ");
TP4 que = new TP4(in.nextInt());
int menu=0,pilih;
while(menu==0){

33

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

System.out.print("Menu\n1.EnQueue\n2.DeQueue\n3.Print\n4.Exit
\n"
+ "Pilihan: ");
pilih=in.nextInt();
switch (pilih) {
case 1:
in.nextLine();
System.out.print("Masukkan No. Meja : ");
String meja = in.nextLine();
System.out.print("Masukkan Makanan : ");
String makanan = in.nextLine();
System.out.print("Masukkan Minuman : ");
String minuman = in.nextLine();
que.enQueue(meja, makanan, minuman);
System.out.println();
break;
case 2:
que.deQueue();
System.out.println();
break;
case 3:
que.cetak("Cetak");
System.out.println();
break;
case 4:
System.exit(0);
default:
System.out.println("Tidak ada pada
pilihan");
break;
}
}
}
}

Latihan
Dengan menggunakan contoh class Queue di atas, kerjakan soal no
1 dan 2. Anda mungkin perlu melakukan modifikasi terhadap class
Queue.
1. Buatlah program untuk menampilkan proses simulasi kinerja CPU
sebuah komputer dalam menangani proses-proses transaksi yang
34

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

terjadi. Setiap transaksi memiliki kode nomer, tingkat prioritas,


waktu masuk/ datang di antrian serta waktu yang dibutuhkan untuk
menyelesaikannya. Ada counter/ penanda untuk menghitung
waktu yang berjalan. Hitungan counter akan merefresh kondisi
antrian. Kondisi antrian ditampilkan di layar monitor. Input
transaksi bisa manual atau otomatis. Gunakan tipe struktur data
QUEUE.
2. PT. Ikhlas menyediakan jasa parkir bagi kendaraan yang
berkunjung di sebuah pasar rakyat. Pihak manajemen
menginginkan simulasi proses masuk - keluarnya mobil dengan
menggunakan struktur data Stack maupun Queue.

35

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

:: MODUL 6 ::
BINARY TREE DAN BINARY SEARCH TREE
1.1 Tree (Pohon)
Jika Stack dan Queue merupakan Tipe Data Abstrak yang bersifat
linier (tersusun berurutan), maka Tree adalah Tipe Data Abstrak yang
bersifat hirarki (bertingkat). Contoh sebuah tree adalah struktur
organisasi dalam perusahaan. President disebut root/akar dari tree
sedangkan Clerk disebut leaf/daun dari tree.

Gambar 6.1 Struktur Organisasi Perusahaan


Struktur data tree sangat bermanfaat untuk melakukan beberapa
komputasi tertentu. Misal: Kita ingin mengetahui total gaji yang
dibayarkan pada pegawai berdasarkan divisi atau departemennya.
Berdasarkan gambar 6.1, total gaji pegawai di divisi A dihitung dengan
menjumlahkan total gaji di departemen A1 dan A2, ditambah dengan
gaji Vice-President divisi A. Sedangkan total gaji pegawai di
departemen A1 merupakan jumlah dari gaji manager departemen A1
ditambah dengan 2 pegawai/clerk di bawahnya.
Untuk menghitung total keseluruhan, kita perlu menghitung seluruh
gaji pegawai, sehingga kita perlu mengunjungi semua pegawai di
dalam tree. Algoritma yang secara sistematis mengunjungi setiap item
pada tree disebut tree traversal/penelusuran tree, yang dibahas
pada poin berikutnya.
Setiap elemen pada tree disebut dengan node dan Level atau
kedalaman (depth) dari sebuah node pada tree T adalah panjang dari
path unik pada T dari root sampai ke node tersebut. Tinggi (height)
dari sebuah node adalah panjang dari path terpanjang dari node

36

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

tersebut ke leaf dan Tinggi (height) dari sebuah tree adalah tinggi dari
node root-nya.
Bentuk tree yang paling popular adalah Binary Tree, yakni tree
yang tiap node-nya memiliki maksimal 2 node di bawahnya. Binary
Tree dapat digunakan untuk merepresentasikan ekspresi matematika
dengan operator biner, seperti penjumlahan, pengurangan, perkalian,
dan pembagian.
Karakteristik dari sebuah Binary Tree:
1. Binary Tree dengan tinggi h 0 memiliki paling banyak 2 h+1 1
node internal.
2. Sebaliknya, tinggi dari binary tree dengan n node internal
setidaknya 2 + 1 1
3. Binary tree dengan tinggi h 0 memiliki paling banyak 2h daun.
4. Sebaliknya, binary tree dengan l daun, memiliki tinggi 2
1.2 Penelusuran Tree
Merupakan algoritma untuk menelusuri tree dan melakukan
sejumlah komputasi/perhitungan pada setiap node-nya. Ada dua
metode utama:
1. Penelusuran Depth-First (bersifat rekursif):
Penelusuran Pre-Order: Kunjungi root, telusuri subtree kiri,
telusuri subtree kanan
Penelusuran In-Order: Telusuri subtree kiri, kunjungi root,
telusuri subtree kanan
Penelusuran Post-Order: Telusuri subtree kiri, telusuri subtree
kanan, kunjungi root
Contoh Tree:

Gambar 6.2 Tree


Pre-Order:

In-Order:

Post-Order:

A-B-C-D-E-F-G-H-I

B-C-A-F-E-G-D-I-H

C-B-F-G-E-I-H-D-A

37

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

2. Penelusuran Breadth-First (bersifat non-rekursif):


Mengunjungi node sesuai urutan kedalamannya pada tree, dimulai
dari node pada kedalaman 0 (yakni root), lalu node pada kedalaman
1, 2, dan seterusnya. Urutan penelusuran adalah dari kiri ke kanan.
Untuk tree pada gambar 6.2, maka penelusuran Breadth-First nya
adalah: A-B-D-C-E-H-F-G-I
Berikut adalah contoh class sederhana dari sebuah Binary Tree
dengan disertai class Node sebagai class tambahannya:
public class BinaryTreeTest {
public static void main(String[] args) {
new BinaryTreeTest().run();
}
static class Node {
Node left;
Node right;
int value;
public Node(int value) {
this.value = value;
}
}
public void run() {
Node root = new Node(5);
System.out.println("Binary Tree Example");
System.out.println("Building tree with root
value " + root.value);
insert(root, 1);
insert(root, 8);
insert(root, 6);
insert(root, 3);
insert(root, 9);
System.out.println("Traversing tree in order");
printInOrder(root);
System.out.println("Traversing tree front-toback from location 7");
printFrontToBack(root, 7);
}

38

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

public void insert(Node node, int value) {


if (value < node.value) {
if (node.left != null) {
insert(node.left, value);
} else {
System.out.println(" Inserted " + value +
" to left of "
+ node.value);
node.left = new Node(value);
}
} else if (value > node.value) {
if (node.right != null) {
insert(node.right, value);
} else {
System.out.println(" Inserted " + value +
" to right of "
+ node.value);
node.right = new Node(value);
}
}
}
public void printInOrder(Node node) {
if (node != null) {
printInOrder(node.left);
System.out.println(" Traversed " +
node.value);
printInOrder(node.right);
}
}

39

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

public void printFrontToBack(Node node, int camera)


{
if (node == null)
return;
if (node.value > camera) {
printFrontToBack(node.left, camera);
System.out.println(" Traversed " +
node.value);
printFrontToBack(node.right, camera);
} else if (node.value < camera) {
printFrontToBack(node.right, camera);
System.out.println(" Traversed " +
node.value);
printFrontToBack(node.left, camera);
} else {
printFrontToBack(node.left, camera);
printFrontToBack(node.right, camera);
}
}
}
package Tupen6;
import java.util.*;
class SimpulPohon {
SimpulPohon akar;
char data;
public SimpulPohon induk;
public SimpulPohon kiri;
public SimpulPohon kanan;
public SimpulPohon(char karakter) {
this.data = karakter;
this.induk = null;
this.kiri = null;
this.kanan = null;
akar = null;
}
boolean sisip(SimpulPohon ortu, SimpulPohon
ptrBaru){
if (ptrBaru.data == ortu.data) {
return false;
}
else
40

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

if (ptrBaru.data < ortu.data)


if (ortu.kiri == null) {
ortu.kiri = ptrBaru;
ptrBaru.induk = ortu;
return true;
}
else
return sisip(ortu.kiri, ptrBaru);
else
if (ortu.kanan == null) {
ortu.kanan = ptrBaru;
ptrBaru.induk = ortu;
return true;
}
else
return sisip(ortu.kanan, ptrBaru);
}
public boolean sisip(char data) {
SimpulPohon ptrBaru = new SimpulPohon(data);
if (akar == null) {
akar = ptrBaru;
return true;
}
else
return sisip(akar, ptrBaru);
}
SimpulPohon cari(SimpulPohon akar, char data) {
if (akar == null)
return null;
else
if (data == akar.data)
return akar;
else
if (data < akar.data)
return cari(akar.kiri, data);
else
return cari(akar.kanan, data);
}
public boolean cari(char data) {
if (cari(akar, data) == null)
return false;
else
return true;
}
41

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

String inOrder(SimpulPohon ptrSimpul) {


String hasil = "";
if (ptrSimpul != null) {
if (ptrSimpul.kiri != null)
hasil = hasil + inOrder(ptrSimpul.kiri);
hasil = hasil + ptrSimpul.data;
if (ptrSimpul.kanan != null)
hasil = hasil +
inOrder(ptrSimpul.kanan);
}
else{
System.out.println("Data tidak ada");
}
return hasil;
}
public String inOrder() {
return inOrder(akar);
}
String preOrder(SimpulPohon ptrSimpul) {
String hasil = "";
if (ptrSimpul != null) {
hasil = hasil + ptrSimpul.data;
if (ptrSimpul.kiri != null)
hasil = hasil +
preOrder(ptrSimpul.kiri);
if (ptrSimpul.kanan != null)
hasil = hasil +
preOrder(ptrSimpul.kanan);
}
else{
System.out.println("Data tidak ada");
}
return hasil;
}
public String preOrder() {
return preOrder(akar);
}
String postOrder(SimpulPohon ptrSimpul) {
String hasil = "";
if (ptrSimpul != null) {
if (ptrSimpul.kiri != null)
42

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

hasil = hasil +
postOrder(ptrSimpul.kiri);
if (ptrSimpul.kanan != null)
hasil = hasil +
postOrder(ptrSimpul.kanan);
hasil = hasil + ptrSimpul.data;
}
else{
System.out.println("Data tidak ada");
}
return hasil;
}
public String postOrder() {
return postOrder(akar);
}
public boolean hapus(char data) {
SimpulPohon simpulDihapus = cari(akar, data);
if (simpulDihapus == null) {
return true;
}
if (simpulDihapus.kanan == null)
if (simpulDihapus.kiri == null) {
if (simpulDihapus == akar)
akar = null;
else
if (simpulDihapus.induk.kiri ==
simpulDihapus)
simpulDihapus.induk.kiri = null;
else
simpulDihapus.induk.kanan =
null;
}
else {
if (simpulDihapus == akar) {
akar = simpulDihapus.kiri;
akar.induk = null;
}
else {
if (simpulDihapus.induk.kiri ==
simpulDihapus) {
simpulDihapus.induk.kiri =
simpulDihapus.kiri;
43

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

simpulDihapus.kiri.induk =
simpulDihapus.induk;
}
else {
simpulDihapus.induk.kanan =
simpulDihapus.kiri;
simpulDihapus.kiri.induk =
simpulDihapus.induk;
}
}
}
else
if (simpulDihapus.kiri == null) {
if (simpulDihapus == akar) {
akar = simpulDihapus.kanan;
akar.induk = null;
}
else
if (simpulDihapus.induk.kiri ==
simpulDihapus) {
simpulDihapus.induk.kiri =
simpulDihapus.kanan;
simpulDihapus.kanan.induk =
simpulDihapus.induk;
}
else {
simpulDihapus.induk.kanan =
simpulDihapus.kanan;
simpulDihapus.kanan.induk =
simpulDihapus.induk;
}
}
else {
SimpulPohon pengganti =
simpulDihapus.kanan;
while (pengganti.kiri != null)
pengganti = pengganti.kiri;
if (pengganti.induk.kiri == pengganti) {
pengganti.induk.kiri =
pengganti.kanan;
if (pengganti.kanan != null)
pengganti.kanan.induk =
pengganti.induk;
}
44

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

else {
pengganti.induk.kanan =
pengganti.kanan;
if (pengganti.kanan != null)
pengganti.kanan.induk =
pengganti.induk;
}
simpulDihapus.data = pengganti.data;
simpulDihapus = pengganti;
}
return true;
}
public void hapusSemuaSimpul() {
akar = null;
}
public boolean kosong() {
return akar == null;
}
}
public class Tupen6 {
static SimpulPohon pohon = new SimpulPohon('0');
static Scanner in=new Scanner(System.in);
static int menu=1,pilih=1;
static String huruf;
public static void input(){
System.out.println("Masukkan Huruf");
huruf =in.next();
}
public static void menu(){
while(menu!=4){
System.out.print("Menu\n1.Input\n2.View\n3.Delete\n4.Exi
t\n");
System.out.println("Masukkan menu: ");
menu =in.nextInt();
switch(menu){
case 1:
input();
for (int i = 0; i < huruf.length(); i++) {
if (pohon.sisip(huruf.charAt(i)) ==
false)
System.out.println("Data " +
huruf.charAt(i) +" sudah ada");
else
45

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

System.out.println("Data " +
huruf.charAt(i) +" disimpan");
}
break;
case 2:
menu2();
break;
case 3:
System.out.println("Masukkan data yang
dihapus: ");
char del =in.next().charAt(0);
if (pohon.kosong())
System.out.println("Pohon kosong");
else
pohon.hapus(del);
break;
case 4:
System.out.println("Terimah Kasih");
System.exit(0);
break;
default :
System.out.println("Pilih kembali");
break;
}}}
public static void menu2(){
while(pilih!=0){
System.out.print("Menu\n1.PreOreder\n2.inOrder\n3.postOr
der\n4.Exit\n");
System.out.println("Masukkan pilihan");
pilih =in.nextInt();
switch(pilih){
case 1:
System.out.println("PreOrder: " +
pohon.preOrder());
break;
case 2:
System.out.println("InOrder: " +
pohon.inOrder());
break;
case 3:
System.out.println("PostOrder: " +
pohon.postOrder());
break;
46

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

default:
menu();
break;
} }}
public static void main(String[] args) {
menu();
}}

Latihan
1. Pelajari class BinaryTreeTest di atas serta Jelaskan ada
berapa method dan method apa saja yang dimiliki oleh class
tersebut?
2. Tambahkan method delete untuk menghapus node dari tree!
3. Modifikasi method printInOrder untuk membuat method
printPreOrder dan printPostOrder!

47

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

:: MODUL 7 ::
SORTING/PENGURUTAN
Konsep sebuah himpunan elemen/ data yang terurut mempunyai
pengaruh yang cukup penting dalam kehidupan sehari-hari. Sebagai
contoh adalah proses pencarian sebuah nomer telepon di buku
alamat. Faktanya adalah bahwa nama-nama di dalam buku tersebut
telah ditulis urut berdasar alphabet. Contoh lain, ketika seseorang
mencari sebuah buku di perpustakaan. Karena buku sudah diberi
kode dan menempati lokasi tertentu berdasar urutan maka buku
tersebut dapat ditemukan dalam waktu yang relatif dapat diperkirakan.
Jadi secara umum, sebuah himpunan elemen disimpan terurut untuk
mempermudah dalam membuat laporan atau untuk membuat akses
mesin ke data lebih efisien.
Proses
sorting
dilakukan
dengan
teknik
perulangan
dikombinasikan dengan pemakaian tipe data yang memungkinkan
proses pengurutan (data mampu diakses secara sekuensial),
misalnya array, array of struct, linked list, dan sebagainya. Sebelum
melakukan sorting maka harus ditentukan terlebih dahulu field key
(kunci) yang akan dipakai sebagai acuan. Selanjutnya dilakukan loop
untuk membandingkan nilai sebuah elemen dengan nilai elemenelemen lainnya. Proses tersebut diulang terus sampai semua elemen
terakses.
Record 1
Record 2
Record 3
Record 4
Record 5
Key
1
2
3
4
5

Other
fields
WWW
FFF
YYY
AAA
GGG

Urut berdasar nomor

Key
4
2
1
5
3

Other fields
AAA
FFF
WWW
GGG
YYY

Original file

Key
Sorted file

AAA
FFF
GGG
WWW
YYY

Other
fields
4
2
5
1
3

Urut berdasar huruf

48

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

Latihan
1. Diketahui sebuah deretan angka sebagai berikut:
2, 8, 4, 3, 5, 1, 9, 7, 6
Simulasikan sorting dengan algoritma Bubble Sort
Simulasikan sorting dengan algoritma Selection Sort
Simulasikan sorting dengan algoritma Insertion Sort
Simulasikan sorting dengan algoritma Merge Sort
Simulasikan sorting dengan algoritma Quick Sort
Simulasikan sorting dengan algoritma Heap Sort
Catatan: Simulasi berarti menampilkan perubahan deretan
angka mulai dari awal sampai terurut secara tahap demi tahap.
2. PT Maju Sejahtera yang bergerak dalam bidang konveksi
memiliki data karyawan yang berisi data NIK (Nomor Induk
Karyawan), Nama, Tempat dan Tanggal Lahir, Alamat, dan Jenis
Kelamin. Pihak manajemen menginginkan data seluruh karyawan
tersebut bisa diketahui (ditampilkan di layar monitor) secara urut
berdasarkan NIK, Nama, Alamat maupun Jenis Kelaminnya
sesuai menu pengurutan yang dipilih.
Tugas:
Kerjakan dengan metode Bubble Sort.
Kerjakan dengan metode Straight Selection Sort.
Kerjakan dengan metode Insertion Sort.
Catatan: Buatlah terlebih dahulu method untuk melakukan
input data. Algoritma bisa dicari di buku referensi atau di
internet (pakai search engine). Untuk menyimpan data
karyawan, Anda dapat menggunakan tipe data Struct yang
disediakan oleh Ruby.

49

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

DAFTAR PUSTAKA
Preiss, Bruno R., Data Structures and Algorithms with ObjectOriented Design Patterns in Ruby, 2004.

50

:: MODUL PRAKTIKUM STRUKTUR DATA ::


PROGRAM STUDI TEKNIK INFORMATIKA UPN VETERAN JAWA TIMUR

JADWAL PELAKSANAAN PRAKTIKUM


Minggu
ke-

Tanggal

Kegiatan

19 23 September 2016

2
3
4
5
6
7
8
9
10
12

26 30 September 2016
3 7 Oktober 2016
10 21 Oktober 2016
24 28 Oktober 2016
31 Oktober 4 Nopember 2016
7 11 Nopember 2016
14 18 Nopember 2016
21 25 Nopember 2016
28 Nopember 2 Desember 2016
5 9 Desember 2015

Daftar ulang dan briefing/


pengarahan praktikum
Modul 1
Modul 2
Minggu UTS
Modul 3
Modul 4
Modul 5
Modul 6
Modul 7
Final Project
Rekapitulasi Nilai Akhir

51

Anda mungkin juga menyukai