Praktikum Modul Struktur Data - E

advertisement
Modul
Praktikum
Struktur Data
Nur Cahyo Wibowo, S.Kom. M.Kom.
Doddy Ridwandono, S.Kom.
Progdi Sistem Informasi
Universitas Pembangunan Nasional “Veteran” Jawa Timur
:: MODUL PRAKTIKUM STRUKTUR DATA::
JURUSAN SISTEM INFORMASI UPN “VETERAN” JATIM
Kata Pengantar
Syukur alhamdulillah ke hadirat Allah SWT atas segala limpahan
Kekuatan-Nya sehingga dengan segala keterbatasan waktu, tenaga
dan pikiran yang dimiliki penulis, akhirnya modul praktikum ini bisa
diperbaiki dengan penyesuaian di beberapa bagiannya.
Praktikum Struktur Data adalah mata kuliah wajib di Program
Studi Sistem Informasi. Praktikum ini mensyaratkan pengambilan mata
kuliah Struktur Data terlebih dahulu. Beban praktikum sebesar satu sks
yaitu setara dengan kurang lebih 2 jam aktivitas di laboratorium.
Modul
praktikum
ini
dibuat
dengan
tujuan
untuk
mempermudah pelaksanaan praktikum. Dan lebih dari itu, diharapkan
mampu menjadi media akselerasi pemahaman serta ketrampilan/ skill
praktikan sesuai dengan kompetensi yang diharapkan.
Penulis sadar bahwa modul versi 3.1 ini masih banyak
kekurangannya. Oleh karena itu saran dan masukan sangatlah
diharapkan untuk meningkatkan kualitas. Tak lupa penulis ucapkan
terima kasih banyak kepada semua pihak atas bantuannya dalam
menyusun modul praktikum ini.
Surabaya, Maret 2016
Tim Penulis
i
:: MODUL PRAKTIKUM STRUKTUR DATA::
JURUSAN SISTEM INFORMASI UPN “VETERAN” JATIM
DAFTAR ISI:
Kata Pengantar ............................................................................... i
Daftar Isi ............................................................................................................ ii
Tujuan Instruksional Khusus............................................................................. iii
Komposisi Penilaian ......................................................................................... iii
Prosedur Pelaksanaan ..................................................................................... iii
Modul 1 : Fungsi Rekursif .................................................................................. 1
Modul 2 : Array/Larik. ........................................................................................ 3
Modul 3 : Class .................................................................................................. 6
Modul 4 : Sorting/Pengurutan .......................................................................... 17
Modul 5 : Searching/Pencarian........................................................................ 19
Modul 6 : Linked List........................................................................................ 21
Modul 7 : Stack/Tumpukan .............................................................................. 25
Modul 8 : Queue/Antrian .................................................................................. 31
ii
:: MODUL PRAKTIKUM STRUKTUR DATA::
JURUSAN SISTEM INFORMASI UPN “VETERAN” JATIM
Tujuan Instruksional Khusus:
Mahasiswa mampu menganalisa studi kasus yang diberikan
dan kemudian mampu membuat solusi pemrograman dengan
menggunakan algoritma dan struktur data yang tepat.
Aturan Penilaian
:
Tugas Pendahuluan
Keberhasilan Program
Laporan Resmi
Kedisiplinan
: 30 %
: 40 %
: 20 %
: 10 %
Prosedur Pelaksanaan
:
1. Praktikan yang sudah melakukan pretest berhak untuk
mengikuti praktikum di laboratorium sesuai jadwal yang telah
ditetapkan. Praktikan akan didampingi oleh 2 (dua) orang
asisten dalam setiap sesinya. Instruktur berhak memberikan
penilaian untuk poin Kedisiplinan praktikan selama jalannya
praktikum.
2. Praktikan yang sudah menyelesaikan tugas praktikumnya
lebih awal dari waktu yang disediakan bisa mengajukan
permintaan demo program ke asisten dan setelah itu boleh
meninggalkan tempat. Tetapi jika waktu yang disedikan telah
habis maka demo program dilaksanakan saat itu juga tanpa
ada perpanjangan waktu. Kemudian asisten akan
memasukkan nilai untuk poin Keberhasilan Program.
3. Praktikan mengumpulkan laporan resmi yang berisi tugas
pendahuluan ditambah dengan source code dan analisa
program ke asisten selambat-lambatnya 1 (satu) pekan pada
saat praktikum berikutnya. Asisten akan memberikan penilaian
untuk poin Laporan Resmi.
4. Jika ada praktikan yang tidak dapat mengikuti kegiatan
praktikum karena sakit, maka harus menyerahkan surat
keterangan yang jelas kepada dosen penanggung jawab
praktikum pada hari itu.
iii
:: MODUL PRAKTIKUM STRUKTUR DATA::
JURUSAN SISTEM INFORMASI UPN “VETERAN” JAWA TIMUR
:: MODUL 1 ::
FUNGSI REKURSIF
DASAR TEORI
Rekursif adalah salah satu teknik dasar pemrograman. Pada prinsipnya metode
rekursif adalah sebuah rutin progrram yang memanggil dirinya sendiri. Banyak
masalah dalam pemrograman yang dapat diselesaikan dengan metode ini.
Salah satu contoh kasus rekursif yang sering dijumpai adalah bilangan n! ( = n
faktorial). Dimana telah diketahui bahwa:
n! = n x (n – 1) x (n – 2) x (n – 3) x … x 1
Contoh: 5!
=5x4x3x2x1
= 120
Maka proses rekursifnya adalah sebagai berikut:
= 5 x 4!
 4! dijabarkan
= 5 x 4 x 3!
 3! dijabarkan
= 5 x 4 x 3 x 2!
 2! dijabarkan
= 5 x 4 x 3 x 2 x 1! ; berhenti sampai di sini, karena 1! = 0! = 1
Contoh dalam Program Java:
private static long factorial(int n)
{
if (n == 1)
return 1;
else
return n * factorial(n-1);
}
catatan: program faktorial juga bisa diselesaikan dengan perulangan biasa.
1|Page
SOAL LATIHAN:
1. Buatlah program untuk melakukan operasi penjumlahan, pengurangan,
perkalian antara beberapa bilangan yang difaktorialkan.
contoh :
bil 1 = 4  difaktorialkan hasil 1 = 24
bil 2 = 3  difaktorialkan hasil 2 = 6
hasil 1 & hasil 2 dilakukan operasi matematika (bisa penjumlahan,
pengurangan atau perkalian)
jumlah  hasil = 30
kurang  hasil = 18
kali  hasil = 144
2. Buatlah program untuk mengetahui suku ke-n dari deret fibonacci  0, 1, 1, 2,
3, 5, 8, 13, 21, 34, dst.
contoh :
input  suku bilangan (misal dimasukkan angka 7)
output  suku bilangan ke-7 (maka akan muncul di layar monitor angka 8)
3. Buatlah program untuk melakukan operasi perkalian 2 bilangan natural.
contoh :
bil 1 = 3
bil 2 = 4
hasil = 3 + 3 + 3 + 3 = 12 (maka akan muncul di layar monitor angka 12)
4. Buatlah program untuk melakukan penjumlahan pada sebuah deret bilangan.
Kemudian akan menampilkan hasil akhir berupa perkalian tiap bilangan hasil
penjumlahan.
contoh :
Input: bil 1 = 3  hasil 1= 1 + 2 + 3 = 6
Input: bil 2 = 2  hasil 2 = 1 + 2 = 3
Output: hasil akhir = 6 * 3 = 18 (muncul angka 18 di layar monitor)
5. Buatlah program menara hanoi dengan piringan maks. 10
2|Page
:: MODUL PRAKTIKUM STRUKTUR DATA::
JURUSAN SISTEM INFORMASI UPN “VETERAN” JAWA TIMUR
:: MODUL 2 ::
ARRAY/ LARIK
DASAR TEORI
Array/ larik didefinisikan sebagai himpunan elemen-elemen data yang homogen/
sejenis dan berurutan. Homogen berarti semua elemen di dalam array tersebut
mempunyai tipe data yang sama. Array bisa bertipe/ berjenis integer (int), char,
float dan sebagainya. Sedangkan berurutan berarti bahwa masing-masing elemen
di dalam array tersebut bisa dibaca/ diakses berdasarkan nomer indeks yang
dimilikinya. Ada istilah lower bound (batas bawah) dan upper bound (batas atas).
Lower bound array dalam bahasa Java adalah 0. Range adalah jumlah elemen
yang dimiliki, yaitu sama dengan upper – lower + 1. Misalkan ada array yang
upper bound-nya 99 maka array tersebut akan memiliki sejumlah: 99 – 0 + 1 = 100
elemen.
Elemen
int
int
int
int
…
int
Indeks
0
1
2
3
…
99
Tipe data
Contoh potongan source code untuk inisialisasi array dengan nilai awal 0:
…;
Int[] angka = new int angka[100];
for (i = 0; i < 100; i++)
angka[i] = 0;
…;
Contoh potongan source code untuk mengisi array dengan nilai dari user:
int[] numbers = new int[100];
for (int i = 0; i < 3; i++)
{
System.out.print("Angka:");
numbers[i] = sc.nextInt();
3|Page
System.out.println(numbers[i]);
}
Array bisa kita definisikan lebih dari satu dimensi. Contohnya adalah sebagai
berikut:
double[][] sales = new double[3][5];
Ini berarti bahwa variabel angka terdiri dari 3 baris array berurutan yang masingmasing baris array tersebut mempunyai 5 elemen yang juga tersusun berurutan.
kolom 0
kolom 1
kolom 2
Kolom 3
kolom 4
baris 0
[0][0]
[0][1]
[0][2]
[0][3]
[0][4]
baris 1
[1][0]
[1][1]
[1][2]
[1][3]
[1][4]
baris 2
[2][0]
[2][1]
[2][2]
[2][3]
[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.
Array dapat pula didefinisikan multidimensional/ banyak dimensi tergantung
kebutuhan sistem program yang akan dibuat. Misal:
int[][][] threeD = new int[3][3][3]; //membentuk struktur data 3
dimensi. Sumbu x, y dan z
4|Page
:: MODUL PRAKTIKUM STRUKTUR DATA::
JURUSAN SISTEM INFORMASI UPN “VETERAN” JAWA TIMUR
SOAL LATIHAN
1. Buatlah program yang mempunyai menu untuk:
a. Menggabungkan 2 buah array berdimensi satu
b. Melakukan insert array ke dalam array pada indeks tertentu
c. Menemukan substring dalam sebuah string (= array of char)
2. Deklarasikan satu array untuk menyimpan nilai mean, median dan modus dari
sekumpulan data (minimal 10 data)
Contoh :
a. input
= array data
b. output
= array mean, median, modus
3. Buat operasi penjumlahan untuk matriks 5 X 5.
4. Buat operasi pengurangan untuk matriks 7 X 7.
5. Buat operasi inverse matriks.
6. Buat operasi transpose matriks.
7. Buat program yang menampilkan jumlah dari masing-masing baris pada
double array berukuran 5 X 3 dengan nama table.
8. Identifikasikan error pada statement C sebagai berikut:
int x[8], i;
for (i=0;i<=8;++i)
x[i]=i;
kapankah error akan terdeteksi?
9. Buatlah program untuk melakukan evaluasi cuaca sebuah daerah setiap hari,
pekan maupun bulan selama satu tahun. Cuaca bisa cerah, berawan maupun
hujan. Untuk memudahkan tentukan terlebih dahulu asumsi kriteria nilai untuk
masing-masing kondisi cerah, berawan dan hujan.
5|Page
:: MODUL 3 ::
CLASS
A. Pengenalan Dasar Class
Class merupakan prototype yang mendefinisikan variable-variabel dan methodmethod secara umum.
Pendeklarasian Class secara umum :
class nama_class{
tipe_data nama_variable;
Method (parameter){
//implementasi method
}
}
Contoh pembuatan class
kotak.java
public class kotak {
float panjang;
float lebar;
public static double hitungLuas(float p, float l){
double luas;
luas = p * l;
return luas;
}
public static void main(String[] args){
System.out.println(hitungLuas(10,12));
}
}
6|Page
:: MODUL PRAKTIKUM STRUKTUR DATA::
JURUSAN SISTEM INFORMASI UPN “VETERAN” JAWA TIMUR
Hasil tampilannya
120.0
Dari contoh diatas class yang dibuat adalah class kotak.
B. Objek
Pada dasarnya semua benda yang ada di dunia nyata dapat dianggap sebagai
semuah Objek. Contoh : rumah, sekolah, dosen, mahasiswa, dll.
Cara membuat objek :
nama_class nama_objek = new nama_class( )
Contoh membuat objek
public class buku {
String pengarang;
String judul;
public void cetak(String param1, String param2){
System.out.println("Pengarang :"+param1);
System.out.println("Judul :"+param2);
}
public static void main(String[] args){
buku a = new buku(); // cara membuat class buku
a.cetak("Rahmad Hakim S.", "Mastering Java");
}
}
Hasil tampilannya
Pengarang : Rahmad Hakim S.
Judul : Mastering Java
Dari contoh diatas objek yang dibuat adalah a dari class buku.
Perintah NEW digunakan untuk menentukan referensi berupa alamat memori
yang akan digunakan untuk menyimpan objek.
7|Page
Class
Karyawan
Keuangan
Merketing
Produksi
Objek
C. Method / Metode / Fungsi
Method merupakan kerja atau fungsi yang dapat dilakukan oleh objek.
Cara mendeklarasikan method
modifier return_tipe nama_method ( parameter ){
//methode body
}
Contoh penggunaan method
public class buku {
String pengarang;
String judul;
public void cetak(String param1, String param2){
System.out.println("Pengarang :"+param1);
System.out.println("Judul :"+param2);
}
public static void main(String[] args){
buku a = new buku(); // cara membuat class buku
a.cetak("Rahmad Hakim S.", "Mastering Java");
}
}
Dari contoh diatas method yang dibuat yaitu cetak dengan paramater param1 dan
param2
8|Page
:: MODUL PRAKTIKUM STRUKTUR DATA::
JURUSAN SISTEM INFORMASI UPN “VETERAN” JAWA TIMUR
Method Getter dan Setter
Getter merupakan 2 sejoli yang saling melengkapi. Getter sering disebut
sebagai accessor sedangkan Setter disebut dengan mutator. Getter dan Setter ini
merupakan implementasi dari encapsulasi.
Getter merupakan method yang digunakan untuk mengambil nilai variable
pada suatu class.
Setter merupakan method yang digunakan untuk mengubah nilai variable.
Kedua method tersebut menggunakan acces modifier public sedangkan
untuk variable yang digunakan menggunakan acces modifier private.
Contoh penggunaan Getter dan Setter
public class orang {
private String nama;
public String getNama(){
return nama;
}
public void setNama(String name){
this.nama=name;
}
}
Method Overloading
Java mengizinkan lebih dari satu method dengan nama yang sama dalam
satu class. Inilah yang dikenal dengan nama method overloading.
Contoh penggunaan
public class buku {
String pengarang;
String judul;
public void setNilai(String param1){
judul = param1;
9|Page
pengarang = "tidak Ada";
}
public void setNilai(String param1, String param2){
judul = param1;
pengarang = param2;
}
public void cetak(){
if(judul==null && pengarang==null)return;
System.out.println("Judul : "+judul+", Pengarang : "+pengarang);
}
public static void main(String[] args){
buku a = new buku();
buku b = new buku();
a.setNilai("Buku Aneh");
b.setNilai("Mastering Java","Rahmad Hakim S." );
a.cetak();
b.cetak();
}
}
Hasil tampilan
Judul : Buku Aneh, Pengarang : tidak Ada
Judul : Mastering Java, Pengarang : Rahmad
Hakim S.
Method Overriding
Jika dalam suatu subclass kita mendefinisikan sebuah method yang sama dengan
yang dimiliki oleh superclass, maka method yang kita buat dalam subclass
tersebut dikaakan meng-override superclassnya. Sehingga jika kita memanggil
method tersebut dari instance subclass yang dibuat, maka method milik subclasslah yang akan dipanggil, bukan lagi method milik superclass.
Contoh penggunaan
public class X {
10 | P a g e
:: MODUL PRAKTIKUM STRUKTUR DATA::
JURUSAN SISTEM INFORMASI UPN “VETERAN” JAWA TIMUR
public void cetak(){
System.out.println("Method milik class A di panggil...");
}
}
public class Y extends X{
@Override
public void cetak(){
System.out.println("Method milik class B di panggil...");
}
}
public class demoriding {
public static void main(String[] args){
Y ab = new Y();
ab.cetak();
}
}
Hasil tampilan
Method milik class B di panggil...
D. Accses Modifier
Acces modifier digunakan untuk mengatur pengaksesan. Gunanya agar data dan
motode dara suatu class tidak selalu bisa diakses secara bebas.
Public
Public di sini mengandung arti bahwa siapapun dapat mengakses member
ini, baik code yang ada di dalam class itu sendiri ataupun yang berada di luar
class.
Private
11 | P a g e
Member yang dideklarasikan sebagai private hanya dapat digunakan oleh
internal member dari class itu saja. Tidak ada code satu pun dari luar class
tersebut yang diizinkan mengakses/mengubah nilai member tersebut.
Protected
Member yang dideklarasikan menggunakan access specifier ini hanya
dapat diakses oleh member clas itu sendiri, member dari class turunannya dan
member class lain yang berada dalam package yang sama.
E. Pewarisan
Pada dasarnya kita melakukan pewarisan untuk membuat class baru (subclass)
yang masing masing memiliki sifat class dari mana ia diturunkan (superclass).
Untuk iru java menyediakan keyword extends yang dapt dipakai pada waktu kita
deklarasikan class.
Contoh
class A {
int x;
int y;
void tampilkanNilaixy(){
System.out.println("NIlai x : "+x+" , y "+y);
}
}
class B extends A{
int z;
void tampilanjumlah(){
System.out.println("Jumlah : "+(x+y+z));
}
}
class demo{
public static void main(String[] args){
A superOB = new A();
B subOB = new B();
System.out.println("Superclass");
superOB.x=10;
12 | P a g e
:: MODUL PRAKTIKUM STRUKTUR DATA::
JURUSAN SISTEM INFORMASI UPN “VETERAN” JAWA TIMUR
superOB.y=20;
superOB.tampilkanNilaixy();
System.out.println("Subclass");
subOB.x=5;
subOB.y=4;
subOB.tampilkanNilaixy();
subOB.z=50;
ubOB.tampilanjumlah();
}
}
Hasil tampilan
Superclass
NIlai x : 10 , y 20
Subclass
NIlai x : 5 , y 4
Jumlah : 59
Implementasi pewarisan pada Class
Agar membuat suatu class mewarisi sifat dari class lainnya, digunakan kata kunci
extends.
Super Class
Subclass
Karyawan
Karyawan Tetap
Karyawan Lepas
Contoh
public class karyawan {
public String nama;
public String alamat;
public int nip;
public void koordinasi(){
System.out.println("Berkoordinasi dengan " +nama+" "+nip);
13 | P a g e
}
}
public class karyawanTetap extends karyawan{
public float gaji;
public float bonus;
public float hitungGajiTotal(){
System.out.println("Hitung gaji totaal " +nama);
return (gaji+bonus);
}
}
public class demoKaryawan {
public static void main(String[] args){
System.out.println("Membuat objek karyawan");
karyawan rizal = new karyawan();
rizal.nama = "Awaluddin Rizal";
rizal.alamat = "Gresik";
rizal.nip = 12345;
System.out.println("Nama : "+rizal.nama+" , Alamat : "+rizal.alamat);
System.out.println("--------------------------");
System.out.println("Membuat objek karyawan tetap");
karyawanTetap aku = new karyawanTetap();
aku.nama = "Hanafi";
aku.alamat = "Surabaya";
aku.nip = 98765;
aku.gaji = 1000000;
aku.bonus = 100000;
System.out.println("Nama : "+aku.nama+" , Alamat : "+aku.alamat);
System.out.println("Gaji : "+aku.hitungGajiTotal());
}
}
Hasil Tampilan
Membuat objek karyawan
Nama : Awaluddin Rizal , Alamat : Gresik
-------------------------Membuat objek karyawan tetap
Nama : Hanafi , Alamat : Surabaya
Hitung gaji totaal Hanafi
Gaji : 1100000.0
14 | P a g e
:: MODUL PRAKTIKUM STRUKTUR DATA::
JURUSAN SISTEM INFORMASI UPN “VETERAN” JAWA TIMUR
F. Interface
Interface merupakan unit program yang berisi deklarasi method dan konstanta
yang diperlukan.
Deskripsi dari desain awal hanya memiliki konstanta dan method tanpa
implementasi. Dengan interface dimungkinkan suatu implemntasi multiple
inheritance.
Cara mendeklarasikan interface
modifier interface nama_interface{
//implementasi interface
}
Mengimplementasikan interface
modifier nama_class extends super_class implements
nama_interface{
//implementations
}
Contoh
public interface NamaListerner {
public void onChange(NamaModel model);
}
public class NamaView extends javax.swing.JFrame implements NamaListerner{
//implementasi
}
SOAL LATIHAN:
15 | P a g e
Berdasarkan
gambar
bagan
dibawah,
buatlah
program
Java
yang
mengimplementasikan konsep OOP.
Motor
Vehicle
Truck
Car
Motorcycle
Race
Car
16 | P a g e
:: MODUL PRAKTIKUM STRUKTUR DATA::
JURUSAN SISTEM INFORMASI UPN “VETERAN” JAWA TIMUR
:: MODUL 4 ::
SORTING/ PENGURUTAN
DASAR TEORI
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 namanama 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, pointer , 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 elemen-elemen lainnya. Proses
tersebut diulang terus sampai semua elemen terakses.
Contoh:
int[] sorting = new int[6];
for (int i = 0; i < 6; i++)
sorting[i] = (int)(Math.random() * 100) + 1;
Arrays.sort(sorting);
for (int i = 0; i < 6; i++)
{
System.out.print(sorting[i]);
}
17 | P a g e
SOAL LATIHAN
1. Diketahui sebuah deretan angka sebagai berikut:
2, 8, 4, 3, 5, 1, 9, 7, 6
a. Simulasikan sorting dengan algoritma Bubble Sort
b. Simulasikan sorting dengan algoritma Selection Sort
c. Simulasikan sorting dengan algoritma Insertion 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:
a. Kerjakan dengan metode Bubble Sort.
b. Kerjakan dengan metode Straight Selection Sort.
c. Kerjakan dengan metode Insertion Sort.
*Buatlah terlebih dahulu subrutin/ fungsi untuk melakukan input data. Algoritma
bisa dicari di buku referensi atau di internet (pakai search engine).
18 | P a g e
:: MODUL PRAKTIKUM STRUKTUR DATA::
JURUSAN SISTEM INFORMASI UPN “VETERAN” JAWA TIMUR
:: MODUL 5 ::
SEARCHING/ PENCARIAN
DASAR TEORI
Algoritma pencarian adalah algoritma yang menerima argumen/ parameter a dan
kemudian mencoba untuk menemukan sebuah record yang key-nya adalah a di
dalam sebuah tabel/ himpunan data.
Bentuk algoritma pencarian yang paling sederhana adalah sequential search/
pencarian berurutan. Algoritma ini mampu diterapkan pada sebuah tabel data baik
yang berupa sebuah array ataupun linked list. Misal, k adalah sebuah array
dengan n elemen/ keys, k(0) sampai dengan k(n – 1). Sedangkan key adalah
argumen/ parameter pencariannya. Maka algoritmanya adalah:
for ( i = 0; i < n; i++ )
if ( key == k(i) )
return(i);
return(-1);
Misal akan dicari data angka 79. Maka proses pencariannya adalah seperti di
bawah ini:
i=0
20
i=1
32
37
45
79
i=2
20
32
37
45
79
32
37
45
79
i=3
32
37
45
79
i=4
20
20
20
ketemu
32
37
45
79
STOP!
Visualisasi searching
19 | P a g e
Algoritma tersebut akan melakukan pengecekan untuk setiap key secara bergiliran
sampai ditemukannya kecocokan dengan argumen. Indeks key yang cocok akan
dikembalikan oleh fungsi. Tetapi jika tidak ditemukan kecocokan maka nilai –1
akan dikembalikan oleh fungsi.
Contoh dengan Java:
public class Searching
{
public static void main(String[] args)
{
int [] myArray = {21,52,6,1,32,76,32};
for(int i=0;i<myArray.length;i++)
if(myArray[i]==76)
System.out.println("Ketemu Oi!!");
}
}
SOAL LATIHAN
1. Buatlah program untuk mensimulasikan searching pada sebuah deretan angka
dengan menggunakan algoritma Binary Search.
2. CV “Sejahtera Selalu” bergerak dalam pengadaan motor nasional beroda dua
merek “Kilat”. Pihak manajemen membutuhkan sebuah program yang bisa
melakukan pencarian barang berdasar menu data yang dipilih. Data yang
dimiliki berisi kode barang, tipe CC mesin, harga jual, dan jumlah stoknya.
Tugas: Kerjakan dengan metode Binary Search.
*Buatlah terlebih dahulu subrutin/ fungsi untuk melakukan input data.
20 | P a g e
:: MODUL PRAKTIKUM STRUKTUR DATA::
JURUSAN SISTEM INFORMASI UPN “VETERAN” JAWA TIMUR
:: MODUL 6 ::
LINKED LIST
DASAR TEORI
Dalam beberapa modul sebelumnya tipe struktur data Array digunakan untuk
menyimpan data dalam indeks yang terurut. Ada kelemahan/kekurangan jika
Array digunakan sebagai media penyimpanan. Dimana panjang dari data harus
telah ditentukan terlebih dahulu. Ada cara lain yang dapat digunakan untuk
mengatasi kekurangan tersebut.
Dalam modul ini akan dijelaskan materi mengenai linked list. Yang merupakan
salah struktur data yang dapat kita pilih untuk meyimpan data dengan jumlah node
yang fleksibel.
Linked list dalam bentuknya yang paling sederhana adalah sekumpulan nodes
yang terhubung menjadi satu yang membentuk untaian. Masing masing node
menyimpan data dan “alamat” yang akan menghubungkan node tersebut dengan
node sesudahnya (next node)
Contoh dalam java:
1 Node
start = new Node(22);
= new Node(33);
3 start.next.next = new Node(44);
4 start.next.next.next = new Node(55);
5 start.next.next.next.next = new Node(66);
2 start.next
Contoh inisialisasi, pengisian dan pencetakan data dalam linked list jika menggunakan
looping:
public class TestNode
{
public static void main(String[] args)
{
Node start = new Node(22);
Node p = start;
21 | P a g e
for (int i = 1; i < 5; i++)
{
p = p.next = new Node(22 + 11*i);
}
for (p = start; p != null; p = p.next)
{
System.out.println(p.data);
}
}
}
class Node
{
int data;
Node next;
Node(int data) {
this.data = data;
}
}
SOAL LATIHAN
1. Linked List adalah array dinamis. Dikatakan dinamis karena ukurannya bisa
berubah-ubah sesuai besar data yang disimpan. Elemen yang kosong bisa
dihapus untuk mengurangi ukuran. Struktur data Linked List merupakan
gabungan antara struct dan pointer.
Tugas:
a. Deklarasikan struktur data sebuah NODE yang mempunyai elemen
informasi NPM dan Nama.
b. Buatlah subrutin untuk melakukan penambahan NODE baru di dalam
Linked List.
c. Buatlah subrutin untuk menghapus NODE dalam sebuah Linked List.
Bisa berdasar nilainya maupun indeks/ urutannya.
*Linked List yang digunakan adalah Single Linked List.
3. Sama dengan nomer 1, tetapi gunakanlah Double Linked List.
4. Sama dengan nomer 1, tetapi gunakan Circular Single Linked List.
5. Sama dengan nomer 1, tetapi gunakan Circular Double Linked List.
6. 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
22 | P a g e
:: MODUL PRAKTIKUM STRUKTUR DATA::
JURUSAN SISTEM INFORMASI UPN “VETERAN” JAWA TIMUR
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]

Waktu kedatangan

Waktu keberangkatan
7. Buatlah program untuk melakukan manipulasi string, tiap karakter satu node.
Pengguna bisa memasukkan string apapun, dan bisa melakukan beberapa
operasi manipulasi string sebagai berikut :
a. Memeriksa apakah string merupakan string yang jika dibolak balik
memilki arti yang sama, misal : malam  malam : OK.
b. Membalik sebuah string, misal : praktikum algoritma dan struktur data 
atad rutkurts nad amtirogla mukitkarp : OK.
c. menyisipkan string di karakter ke-x, misal : aku informatika, masukkan
pada karakter ke-5, kata 'mahasiswa '  aku mahasiswa informatika :
OK.
d. 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.
8. Buatlah database siswa yang mengikuti praktikum dengan struktur data
sebagai berikut:

ID Siswa

Nama Siswa

Kelas

Jadwal Praktikum

Jumlah Modul yang telah diselesaikan
modul [8]
23 | P a g e
//berisi hari dan jam
//jumlah modul yang harus diselesaikan adalah 8
untuk modul berupa linked list lagi yang berisi :

statePengerjaanModul

noModul

Nilai Modul

AsistenModul

Absensi
//kehadiran pada saat praktikum
Fungsi-fungsi yang ada :

insert siswa praktikum baru.

edit data praktikum siswa.

lihat data seluruh siswa yang mengikuti praktikum.

lihat detail siswa dengan modulnya.
24 | P a g e
:: MODUL PRAKTIKUM STRUKTUR DATA::
JURUSAN SISTEM INFORMASI UPN “VETERAN” JAWA TIMUR
:: MODUL 7 ::
STACK/ TUMPUKAN
DASAR TEORI
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.
POP( )
PUSH( )
F
E
D
BOTTOM
C
TOP
B
A
Stack
Deklarasi stack bisa diimplementasikan dengan menggunakan array maupun
dengan menggunakan linked list. Stack adalah linked list dengan jenis LIFO/ Last
In Fisrt 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.
25 | P a g e
Contoh Dalam Java:
import java.util.ArrayDeque;
import java.util.Deque;
public class TestStringStack {
public static void main(String[] args) {
Deque<String> stack = new ArrayDeque<String>();
stack.push("Elemen 1");
stack.push("Elemen 2");
stack.push("Elemen 3");
stack.push("Elemen 4");
System.out.println(stack);
System.out.println("stack.peek(): " + stack.peek());
System.out.println("stack.pop(): " + stack.pop());
System.out.println(stack);
System.out.println("stack.pop(): " + stack.pop());
System.out.println(stack);
System.out.println("stack.push(\"Elemen 5\"): ");
stack.push("Elemen 5");
System.out.println(stack);
}
}
Output:
[Elemen 4, Elemen 3, Elemen 2, Elemen 1]
stack.peek(): Elemen 4
stack.pop(): Elemen 4
[Elemen 3, Elemen 2, Elemen 1]
stack.pop(): Elemen 3
[Elemen 2, Elemen 1]
stack.push("Elemen 5"):
[Elemen 5, Elemen 2, Elemen 1]
SOAL LATIHAN
1. Buatlah program yang mengimplementasikan fungsi PUSH dan POP serta
SHOW_ALL pada struktur data STACK dengan menggunakan:
a. Array
b. Linked List
2. 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.
26 | P a g e
:: MODUL PRAKTIKUM STRUKTUR DATA::
JURUSAN SISTEM INFORMASI UPN “VETERAN” JAWA TIMUR
3. Buatlah program untuk mengevaluasi hasil operasi sebuah persamaan
matematis dalam format POSTFIX tanpa kurung yang dimasukkan oleh user.
Gunakanlah struktur data tipe STACK.
4. Buatlah program untuk mengkonversi persamaan matematis format INFIX ke
dalam format POSTFIX. Gunakanlah tipe struktur data STACK.
5. 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
AB
CB
AC
BA
BC
AC
6. POSTFIX INTERPRETER
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
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.
27 | P a g e
postfix
yang
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.
7. 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 :
Input : 3 buah karakter yaitu a, b, c (dipisahkan oleh tanda koma)
Output: Jumlah permutasi : 6
Macam permutasi : abc, acb, bac, bca, cab, cba
8. POSTFIX CALCULATOR
28 | P a g e
:: MODUL PRAKTIKUM STRUKTUR DATA::
JURUSAN SISTEM INFORMASI UPN “VETERAN” JAWA TIMUR
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
9. 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
10. 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
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
11. PALINDROME IDENTIFIER
29 | P a g e
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
30 | P a g e
:: MODUL PRAKTIKUM STRUKTUR DATA::
JURUSAN SISTEM INFORMASI UPN “VETERAN” JAWA TIMUR
:: MODUL 8 ::
QUEUE/ ANTRIAN
DASAR TEORI
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( )
A
B
C
D
E
Queue
Front
Back
Contoh dalam java:
import java.util.ArrayDeque;
import java.util.Queue;
public class TestStringQueue {
public static void main(String[] args) {
Queue<String> queue = new ArrayDeque<String>();
queue.add("Elemen 1");
queue.add("Elemen 2");
queue.add("Elemen 3");
queue.add("Elemen 4");
System.out.println(queue);
System.out.println("queue.element(): " + queue.element());
System.out.println("queue.remove(): " + queue.remove());
System.out.println(queue);
System.out.println("queue.remove(): " + queue.remove());
System.out.println(queue);
31 | P a g e
System.out.println("queue.add(\"Elemen 5\"): ");
queue.add("Elemen 5");
System.out.println(queue);
System.out.println("queue.remove(): " + queue.remove());
System.out.println(queue);
}
}
Output:
[Elemen 1, Elemen 2, Elemen 3, Elemen 4]
queue.element(): Elemen 1
queue.remove(): Elemen 1
[Elemen 2, Elemen 3, Elemen 4]
queue.remove(): Elemen 2
[Elemen 3, Elemen 4]
queue.add("Elemen 5"):
[Elemen 3, Elemen 4, Elemen 5]
queue.remove(): Elemen 3
[Elemen 4, Elemen 5]
SOAL LATIHAN
1. Buatlah program yang mengimplementasikan fungsi INSERT dan REMOVE
serta SHOW_ALL pada struktur data QUEUE dengan menggunakan Array.
a. One Way Queue
b. Circular Queue
2. Sama dengan nomer satu, tetapi gunakan struktur data Linked List.
3. Buatlah program untuk menampilkan proses simulasi kinerja CPU sebuah
komputer dalam menangani proses-proses transaksi yang 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.
4. 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.
32 | P a g e
Download