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 : AC AB CB AC BA BC AC 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