Stuktur Data
Stuktur Data
Struktur data : cara menyimpan atau merepresentasikan data didalam komputer agar bisa
dipakai secara efisien.
Data : representasi dari fakta dunia nyata
Fakta atau keterangan tentang kenyataan yang disimpan, direkam atau direpresentasikan
dalam bentuk tulisan, suara, gambar, sinyal atau simbol.
STRUKTUR DATA
Model abstrak pengukuran waktu/ruang harus independen dari pertimbangan mesin dan
compiler apapun.
Besaran yang dipakai untuk menerangkan model abstrak pengukuran waktu/ruang ini
adalah kompleksitas algoritma
Ada dua jenis kompleksitas algoritma, antara lain
*kompleksitas waktu (Tn) dan
* kompleksitas ruang (Sn)
Ukuran masukan (n): jumlah data yang diproses oleh sebuah algoritma.
Contoh
Algoritma pengurutan 1000 elemen larik,maka n = 1000.
Algoritma perkalian 2 buah matriks berukuran 50 x 50, maka n = 50.
Dalam praktek perhitungan kompleksitas, ukuran
masukan dinyatakan sebagai variabel n saja
Contoh : Tinjau algoritma menghitung rerata sebuah larik (array), dengan algoritma sebagai
berikut:
sum 0
for i 1 to n do
sum sum + a[i]
endfor
rata_rata sum/n
Operasi yang mendasar pada algoritma adalah operasi penjumlahan elemen-elemen ai (yaitu
sumsum+a[i]) yang dilakukan sebanyak n kali.
Kompleksitas waktu: T(n) = n
LARIK (ARRAY)
Larik (Array)
*Jenis struktur data statis
*Kumpulan data tunggal dalam satu variable (homogen)
*Akses setiap data melalui nomor index (0 – n)
Jenis Larik (Array)
*1Dimensi
*2 Dimensi/Multidimensi
Defenition
Array (Larik) : bentuk struktur Data yang menampung data yang sejenis atau bertipe sama
Contoh :
Nilai 5 orang mahasiswa
100, 80, 78, 90, 75 ->> tipe integer
Harga 4 jenis barang
1000,00; 2500,00; 3000,00; 1200,00 ->> tipe
double atau real
Nilai mahasiswa dan daftar harga barang di atas dapat disimpan dalam satu variabel yaitu array
Nilai 5 orang mahasiswa
100, 80, 78, 90, 75
Nama variabel : Nilai
Banyak elemen : 5
Tipe : integer
2. Inisialisasi
Inisialisasi adalah Memberikan nilai awal pada array
2 cara :
Pada saat deklarasi
Int Nilai [5]={100, 80, 78, 90, 75};
Memberikan nilai satu persatu berdasarkan indeks array
Nilai[5]=100;
Nilai[6]=80;
Nilai[7]=78;
Nilai[8]=90;
Nilai[9]=75;
Array 2 Dimensi
Array satu dimensi adalah array yang terdiri dari baris dan kolom
Array 2 dimensi disebut juga matriks
Penerapan
Menyimpan nilai 5 orang mahasiswa yang terdiri dari nilai Tugas, UTS, UAS, berdasarkan no abesnsi
Data awal :
Matriks :
Data Matriks:
1. Deklarasi array 2D
Sebelum digunakan, array harus terlebih dahulu di deklarasikan
Bentuk Umum :
Tipe_Data Nama_Variabel [Jlh baris] [Jlh kol]
Contoh :
int nilai [3] [5];
2. Inisialisasi array 2D
Inisialisasi adalah Memberikan nilai awal pada array
2 cara :
Pada saat deklarasi
Int Nilai [3] [5]={
{100,80,70,90,100},
{75, 87,98,89, 65},
{99, 97,96,95, 99}
};
Inisialisasi adalah Memberikan nilai awal pada array
2 cara :
Memberikan nilai satu persatu berdasarkan indeks array
Nilai[0][0]=100;
Nilai[0][1]=80;
Nilai[0][2]=70;
Nilai[0][3]=90;
Nilai[0][4]=100;
........................
Nilai[2][4]=99;
CONTOH LARIK 2 DIMENSI - 1
public class Larik07 {
public static void main(String[] args) {
int array[][]= {{1,3,5},{2,4,6}};
System.out.println("Informasi Mengenai Array");
System.out.println("Jumlah Baris= " + array.length);
System.out.println("Jumlah Kolom = " + array[1].length);
System.out.println("Mencetak Isi Larik");
System.out.println(array[0][0]);
System.out.println(array[0][1]);
System.out.println(array[0][2]);
System.out.println(array[0][2]);
System.out.println(array[1][0]);
System.out.println(array[1][1]);
System.out.println(array[1][2]);
}
}
CONTOH LARIK 2 DIMENSI - 2
public class Larik08 {
public static void main(String[] args) {
int array[][]= {{1,3,5},{2,4,6}};
System.out.println("Informasi Mengenai Array");
System.out.println("Jumlah Baris= " + array.length);
System.out.println("Jumlah Kolom= " + array[1].length);
System.out.println("Mencetak Isi Larik");
for (int i=0; i<2 ;i++){
for (int j=0; j<3; j++){
System.out.println(array[i][j]);
}
}
}
}
CONTOH DUPLIKASI LARIK 2 DIMENSI
import java.util.Arrays;
public class Larik09 {
public static void main(String[] args) {
int[][] source = { {1, 2, 3, 4}, {5, 6}, {0, 2, 42, -4, 5}};
int[][] destination = new int[source.length][];
for (int i = 0; i < destination.length; ++i) {
destination[i] = new int[source[i].length];
for (int j = 0; j < destination[i].length; ++j) {
destination[i][j] = source[i][j];
}
}
System.out.println(Arrays.deepToString(destination));
}
}
CONTOH DUPLIKASI LARIK + ARRAYCOPY
import java.util.Arrays;
public class Larik10 {
public static void main(String[] args) {
int[][] source = { {1, 2, 3, 4}, {5, 6}, {0, 2, 42, -4, 5}};
int[][] destination = new int[source.length][];
for (int i = 0; i < source.length; ++i) {
destination[i] = new int[source[i].length];
System.arraycopy(source[i], 0, destination[i], 0, destination[i].length);
}
System.out.println(Arrays.deepToString(destination));
}
}
IMPLEMENTASI : PENJUMLAHAN MATRIKS
public class Larik02 {
public static void main(String[] args) {
int i, j;
int hasil[][] = new int[2][2];
int [][]matriks1 = { {2, 3}, {4, 5} };
int [][]matriks2 = { {4, 3}, {2, 7} };
System.out.println("Menampilkan elemen matriks pertama: ");
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++) {
System.out.println(matriks1[i][j]);
}
}
System.out.println("Menampilkan elemen matriks kedua: ");
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++) {
System.out.println(matriks2[i][j]);
}
}
System.out.println("Hasil penjumlahan matriks: ");
for (i = 0; i < 2; i++) {
for (j = 0; j < 2; j++) {
hasil[i][j] = matriks1[i][j] + matriks2[i][j];
System.out.println(hasil[i][j]);
//System.out.print(hasil[i][j] + "\t");
}
System.out.println();
}
}
}
Operasi Matriks
• Penjumlahan Matriks
Penjumlahan dua matriks A + B bisa dilakukan asalkan kedua matriks tersebut berukuran
sama, yaitu
• Pengurangan Matriks
Penguragan matriks memiliki konsep yang sama dengan penjumlahan. Dua buah matriks
dapat dikurangkan apabila keduanya memiliki ordo yang sama.
Hasil operasi pengurangannya adalah matriks baru yang memiliki ordo sama dengan matriks
semula, dengan elemen-elemennya terdiri dari hasil pengurangan dengan elemen-elemen pada
matriks.
• Perkalian Matriks
Diberikan dua matriks A berukuran m × n dan matriks B berukuran n × k (Baris dikali
Kolom). Perkalian matriks A dengan B adalah matriks C berukuran m × k di mana:
• Contoh
Diberikan matriks A berukuran 3 × 2 (yaitu 3 baris 2 kolom) dengan matriks B berukuran 2 ×
3 (yaitu 2 baris dan 3 kolom) beserta matriks C = A × B sebagai berikut:
FUNGSI(METHOD)
Fungsi (function) adalah kode program yang dirancang untuk menyelesaikan sebuah tugas
tertentu, dan bagian dari program utama.
Bahasa Java sebenarnya tidak dikenal istilah function, akan tetapi disebut dengan method
Fungsi dibedakan atas :
Built-In Function
Fungsi yang bawaan bahasa pemrograman. Sebagai contoh, perintah
System.out.println()
User Defined Function
Fungsi yang dibuat sendiri (sesuai kebutuhan)
KESEPAHAMAN MODULARITAS
Prosedur adalah sebutan untuk fungsi yang tidak mengembalikan nilai. Fungsi ini biasanya
ditandai dengan kata kunci void.
Fungsi adalah sebutan untuk fungsi yang mengembalikan nilai.
Method adalah fungsi yang berada di dalam Class. Sebutan ini, biasanya digunakan pada
OOP.
FORMAT FUNGSI
Kata kunci static, artinya kita membuat fungsi yang dapat dipanggil tanpa harus membuat
instansiasi objek.
TypeDataKembalian adalah tipe data dari nilai yang dikembalikan setelah fungsi dieksekusi.
namaFungsi() adalah nama fungsinya. Biasanya ditulis dengan huruf kecil di awalnya. Lalu,
kalau terdapat lebih dari satu suku kata, huruf awal di kata kedua ditulis kapital
MEMANGGIL FUNGSI
public static void main(String[] args){
namaFungsi();
}
CONTOH FUNGSI
class BelajarJava {
static void sapaan() {
System.out.println(“Fikom UMI");
}
public static void main(String args[]){
sapaan();
sapaan();
sapaan();
}
}
FORMAT FUNGSI DALAM CLASS (METHOD)
class NamaClass {
static tipeDataKembalian namaFunction() {
// Isi function disini...
return nilai;
}
public static void main(String args[]){
// Jalankan function
namaFunction()
}
}
CONTOH FUNGSI DALAM CLASS (METHOD)
class BelajarJava {
static void hitungLuasSegitiga() {
double alas = 5;
double tinggi = 7;
double luas = (alas * tinggi) / 2;
System.out.println("Luas segitiga adalah: "+luas);
}
public static void main(String args[]){
hitungLuasSegitiga();
}
}
FUNGSI DENGAN PARAMETER
class NamaClass {
static tipeDataKembalian namaFunction(tipeData param1, tipeData param2) {
// Isi fungsi disini...
// Isi fungsi disini...
return nilai;
}
public static void main(String args[]){
// Jalankan fungsi
namaFunction(arg1, arg2)=
}
}
PENJELASAN FUNGSI DENGAN PARAMETER
Parameter ditulis di antara tanda kurung (...)
Parameter harus diberikan tipe data
Bila terdapat lebih dari satu parameter, maka dipisah dengan tanda koma.
CONTOH FUNGSI DENGAN PARAMETER
class BelajarJava {
static void sapaTeman(String nama) {
System.out.println("Hai, "+nama);
}
class BelajarJava {
static void sapaTeman(String nama1, String nama2, String nama3) {
System.out.println("Hai, "+nama1+", "+nama2+", "+nama3);
}
public static void main(String args[]){
sapaTeman("Lisa", "Nova", "Putri");
}
}
CONTOH FUNGSI DENGAN PARAMETER
class BelajarJava {
static void hitungLuasSegitiga(int alas, int tinggi) {
double luas = (alas * tinggi) / 2;
System.out.println("Luas segitiga adalah: "+luas);
}
public static void main(String args[]){
hitungLuasSegitiga(5, 7);
hitungLuasSegitiga(2, 10);
hitungLuasSegitiga(191, 357);
}
}
CONTOH FUNGSI DENGAN PARAMETER - 02
class BelajarJava {
static int hargaSetelahPajak(int hargaDasar) {
return hargaDasar + (hargaDasar * 10/100);
}
public static void main(String args[]){
int hargaPulpen = 5000;
int hargaFinalPulpen = hargaSetelahPajak(hargaPulpen);
System.out.println("Harga Pulpen 1 buah Rp."+hargaFinalPulpen);
}
}
CONTOH FUNGSI DENGAN RETURN
public class BangunRuang {
public static void main(String[] args) {
int s = 12;
int luas = luasKubus(s);
System.out.println(luas);
}
// membuat fungsi luasPersegi()
static int luasPersegi(int sisi){
return sisi * sisi;
}
// membuat fungsi luasKubus()
static int luasKubus(int sisi){
// memanggil fungsi luasPersegi
return 6 * luasPersegi(sisi);
}
}
}
CONTOH FUNGSI STATIC DAN NON STATIC
public class FungsiStatic {
// Fungsi non-static
void makan(String makanan){
System.out.println("Hi!");
System.out.println("Saya sedang makan " + makanan);
}
// Fungsi static
static void minum(String minuman){
System.out.println("Saya sedang minum " + minuman);
}
// fungsi main
public static void main(String[] args) {
// pemanggilan fungsi static
minum("Kopi");
// mambuat instansiasi objek saya dari class FungsiStatic
FungsiStatic saya = new FungsiStatic();
// pemanggilan fungsi non-static
saya.makan("Nasi Goreng");
}
}
CONTOH FUNGSI VARIABEL GLOBAL DAN LOKAL
class ProgramKu{
// ini variabel global
static String nama = "Program Pertamaku";
static String version = "1.0.0";
static void help(){
// ini variabel lokal
String nama = “Fikom UMI";
// mengakses variabel global di dalam fungsi help()
System.out.println("Nama: " + nama);
System.out.println("Versi: " + version);
}
public static void main(String args[]){
// panggil fungsi help()
help();
System.out.println("Nama: " + nama);
System.out.println("Versi: " + version);
}
}
TRANSFER PARAMETER BY VALUE
Ketika pass-by-values terjadi, method membuat sebuah salinan dari nilai variable yang
dikirimkan ke method.
Walaupun demikian, method t idak dapat secara langsung memodifikasi nilai variabel
pengirimnya meskipun parameter salinannya sudah dimodifikasi nilainya di dalam method
CONTOH TRANSFER PARAMETER BY VALUE
Karena program lebih singkat dan ada beberapa kasus yang lebih mudah menggunakan
fungsi yang rekursif
Memakan memori yang lebih besar, karena setiap kali bagian dirinya dipanggil, dibutuhkan
sejumlah ruang memori tambahan.
Mengorbankan efisiensi dan kecepatan
Problem: rekursi seringkali tidak bisa “berhenti” sehingga memori akan terpakai habis dan
program bisa hang.
Saran: jika memang bisa diselesaikan dengan iterative gunakanlah iteratif!
CONTOH REKURSIF
Faktorial Bilangan
Deret Fibonacci
SENARAI TUNGGAL
(SINGLE LINKED LIST)
Struktur data yang berisi kumpulan data yang tersusun secara sekuensial, saling
bersambungan, dinamis dan terbatas adalah senarai berkait (linked list).
Suatu senarai berkait (linked list) adalah suatu simpul (node) yang dikaitkan dengan simpul
yang lain dalam suatu urutan tertentu.
Suatu simpul dapat berbentuk suatu struktur (structure) atau kelas (class)
Simpul harus mempunyai satu atau lebih elemen struktur atau class yang berisi data.
Secara teori, linked list adalah sejumlah node yang dihubungkan secara linier.
Senarai berkait lebih efisien di dalam melaksanakan penyisipan-penyisipan dan
penghapusan-penghapusan.
Senarai berkait juga menggunakan alokasi penyimpanan secara dinamis, yang merupakan
penyimpanan yang dialokasikan pada runtime
JENIS SENARAI
INSERT
Insert First : Elemen yang disisip di depan list
Insert Last : Elemen yang disisip di belakang list
Insert After/Before : Elemen yang disisip diposisi tertentu
DELETE
Delete First : Elemen yang dihapus di depan list
Delete Last : Elemen yang dihapus di belakang list
Delete After/Before : Elemen yang dihapus diposisi tertentu
PEMBUATAN SENARAI
MENGAKSES NODE
INSERT FIRST
Insert element P into List L so that P become the first element of L
INSERT LAST
Insert element P into List L so that P become the last element of L
INSERT AFTER
Insert element P into List L so that P become the next element of Prec
TAHAPAN INSERT AFTER
DELETE FIRST
Remove the first element of L
DELETE LAST
Remove the last element of L
ArrayList pada bahasa pemrograman Java, merupakan salah satu collection untuk
menampilkan daftar atau list nilai/value, yang bersifat dinamis
ArrayList kita tidak dapat menggunakan tipe data primitive, seperti int, char, boolean, float,
dsb.
Mengimport ArrayList
import java.util.ArrayList;
Membuat Objek ArrayList
ArrayList <tipedata> varname = new ArrayList();
CONTOH PROGRAM JAVA ARRAY LIST
import java.util.ArrayList;
public class sd_0300 {
public static void main(String[] args) {
ArrayList<String> animals = new ArrayList<>();
// Menambahkan elemen di Array List
animals.add("Anjing");
animals.add("Kucing");
animals.add(”Kerbau");
System.out.println("ArrayList: " + animals);
}
}
CONTOH : MENAMPILKAN ELEMEN TERTENTU
import java.util.ArrayList;
class sd_0301 {
public static void main(String[] args) {
ArrayList<String> animals = new ArrayList<>();
// add elements in the arraylist
animals.add(”Anjing");
animals.add(”Kucing");
animals.add(”Kerbau");
System.out.println("ArrayList: " + animals);
// menampilkan indeks tertentu dari arraylist
String str = animals.get(1);
System.out.print("Element di index tsb : " + str);
}
}
CONTOH : MENGGANTIKAN ELEMEN TERTENTU
import java.util.ArrayList;
class sd_0302 {
public static void main(String[] args) {
ArrayList<String> animals = new ArrayList<>();
// add elements in the arraylist
animals.add(”Anjing");
animals.add(”Kucing");
animals.add(”Kerbau");
System.out.println("ArrayList: " + animals);
// Menggantikan elemen indeks tertentu dari arraylist
animals.set(2, ”Kuda");
System.out.println(”Hasil Modifikasi ArrayList: " + animals);
}
}
CONTOH : MENGHAPUS ELEMEN TERTENTU
import java.util.ArrayList;
class sd_0303 {
public static void main(String[] args) {
ArrayList<String> animals = new ArrayList<>();
// add elements in the arraylist
animals.add(”Anjing");
animals.add(”Kucing");
animals.add(”Kerbau");
System.out.println("ArrayList: " + animals);
// Menghapus element Indeks ke - 2
String str = animals.remove(2);
System.out.println("ArrayList terbaru: " + animals);
System.out.println("Elemen yang dihapus: " + str);
}
}
CONTOH : MENERAPKAN PERULANGAN
import java.util.ArrayList;
class sd_0304 {
public static void main(String[] args) {
ArrayList<String> animals = new ArrayList<>();
// add elements in the arraylist
animals.add(”Anjing");
animals.add(”Kucing");
animals.add(”Kerbau");
System.out.println("ArrayList: " + animals);
// Perulangan Array List
System.out.println("Menampilkan dengan perulangan: ");
for (String language : animals) {
System.out.print(language);
System.out.print(", ");
}
}
}
OPERASI PADA ARRAY LIST
Tumpukan (stack) merupakan implementasi dari Struktur Data dengan konsep LIFO (Last In
First Out)
Tumpukan (Stack) adalah penyimpanan data/item dimana data/item yang diakses adalah
paling akhir yang disebut top of stack.
Item ditempatkan membentuk tumpukan
Merupakan penyimpanan data dengan konsep LIFO (Last In First Out)
OPERASI TUMPUKAN (STACK)
Stack interface mendefinisikan kumpulan operasi yang mengakses dan mengupdate hanya
satu data pada akhir list
Java Class menyimpan Stack Interface
Stack di Collection dapat diimport dengan menggunakan perintah:
import java.util.*;
atau
import java.util.Stack;
MEMBUAT TUMPUKAN (STACK)
Import java.util.Stack
Membuat Stack Interface
Stack<Type> <<var_stacks>> = new Stack<>();
varstacks : namvariabel tumpukan
// Membuat Stack tipe data Integer
Stack<Integer> stacks = new Stack<>();
// Membuat Stack tipe data String
Stack<String> stacks = new Stack<>();
OPERASI PUSH - TUMPUKAN (STACK)
import java.util.Stack;
public class SD_050 {
public static void main(String[] args) {
Stack<String> buku= new Stack<>();
buku.push("Algoritma");
buku.push("Basis Data");
buku.push("Etika");
buku.push("Kewarganegaraan");
System.out.println("Isi Tumpukan adalah " + buku);
}
}
OPERASI POP - TUMPUKAN (STACK)
import java.util.Stack;
public class SD_0501 {
public static void main(String[] args) {
Stack<String> buku= new Stack<>();
buku.push("Algoritma");
buku.push("Basis Data");
buku.push("Etika");
buku.push("Kewarganegaraan");
System.out.println("Isi Tumpukan adalah " + buku);
String element = buku.pop();
System.out.println("Elemen yang dihapus dari Tumpukan: " + element);
}
}
OPERASI PEEK - TUMPUKAN (STACK)
import java.util.Stack;
public class SD_0502 {
public static void main(String[] args) {
Stack<String> buku= new Stack<>();
buku.push("Algoritma");
buku.push("Basis Data");
buku.push("Etika");
buku.push("Kewarganegaraan");
System.out.println("Isi Tumpukan adalah " + buku);
String element = buku.peek();
System.out.println("Elemen paling atas dari Tumpukan: " + element);
}
}
OPERASI SEARCH - TUMPUKAN (STACK)
import java.util.Stack;
public class SD_0503 {
public static void main(String[] args) {
Stack<String> buku= new Stack<>();
buku.push("Algoritma");
buku.push("Basis Data");
buku.push("Etika");
buku.push("Kewarganegaraan");
System.out.println("Isi Tumpukan adalah " + buku);
int posisi = buku.search("Basis Data");
System.out.println("Posisi tertentu di Tumpukan: " + posisi);
}
}
OPERASI EMPTY - TUMPUKAN (STACK)
import java.util.Stack;
public class SD_0504 {
public static void main(String[] args) {
Stack<String> buku= new Stack<>();
buku.push("Algoritma");
buku.push("Basis Data");
buku.push("Etika");
buku.push("Kewarganegaraan");
System.out.println("Isi Tumpukan adalah " + buku);
boolean hasil = buku.empty();
System.out.println("Apakah Tumpukan kosong : " + hasil);
}
}
CONTOH TUMPUKAN (STACK)
import java.util.Stack;
public class SD_0606 {
public static void main(String[] args) {
Stack<Integer> nilai = new Stack<>();
nilai.push(10);
nilai.push(20);
nilai.push(30);
nilai.push(40);
System.out.println("Isi Tumpukan: " + nilai);
nilai.pop();
System.out.println("Data Setelah Operasi POP " + nilai);
nilai.push(50);
nilai.push(60);
nilai.push(70);
System.out.println("Data Setelah Operasi Push " + nilai);
System.out.println("Data Paling Atas :" + nilai.peek());
System.out.println("Posisi Angak 30 dalam Tumpukan " + nilai.search(30));
System.out.println("Tumpukan Kosong ? " +nilai.empty());
}
}
CONTOH TUMPUKAN (STACK)
public class SD_05 {
private int arr[];
private int top;
private int capacity;
SD_05(int size) {
arr = new int[size];
capacity = size;
top = -1;
}
CONTOH TUMPUKAN (STACK)
public void push(int x) {
if (isFull()) {
System.out.println("OverFlow\nProgram Terminated\n");
System.exit(1);
}
System.out.println(”Isikan " + x);
arr[++top] = x;
}
CONTOH TUMPUKAN (STACK)
public int pop() {
if (isEmpty()) {
System.out.println("STACK KOSONG");
System.exit(1);
}
return arr[top--];
}
public int size() {
return top + 1;
}
CONTOH TUMPUKAN (STACK)
return top == -1;
}
public Boolean isFull() {
return top == capacity - 1;
}
public void printStack() {
for (int i = 0; i <= top; i++) {
System.out.println(arr[i]);
}
}
CONTOH TUMPUKAN (STACK)
public static void main(String[] args) {
SD_06 stack = new SD_06(5);
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.pop();
System.out.println("\nsetelah mengisi stack");
stack.printStack();
}
}
POLISH NOTATION
Salah satu aplikasi STACK adalah untuk menulis ungkapan dengan menggunakan notasi
tertentu.
Cara penulisan ungkapan dapat dilakukan dengan menggunakan :
Notasi INFIX : Operator diletakkan diantara 2 operand
Cth: A+B dimana A, B sbg operand dan + sbg operator
Notasi PREFIX ( POLISH ) : Operator diletakkan sebelum 2 operand disajikan
Cth : +AB
Notasi POSTFIX ( SUFFIX ) :operator diletakkan setelah 2 operand disajikan
Cth : AB+
Latihan
Subtitusikanlah operator berikut dengan notasi prefix dan notasi postfix :
(A + B) x (C –(D ^ E))
(A x B) – ( C + D ) / ( E x ( F – G ) )
ALGORITMA KONVERSI INFIX KE POSTFIX
Langkah 0 ( Awal )
Baca ungkapan dalam notasi infix, misalnya = S
Tentukan panjang ungkapan tersebut, misalnya N karakter
Siapkan sebuah tumpukan kosong dan siapkan derajad masing-masing operator,
misalnya :
^ pangkat = bernilai 3
x , / = bernilai 2
+ , - = bernilai 1
) , ( = bernilai 0
Langkah 1
Dimulai dari I=1 sampai N, kerjakan langkah2 berikut
R=S[I]
Test nilai R, jika R adalah :
operand : langsung ditulis
kurung buka : push ke dalam tumpukan
kurung tutup : pop dan tulis semua isi tumpukan sampai ujung tumpukan = ‘(‘. Pop juga
tanda ‘(‘ ini, tapi tidak ditulis.
operator : jika tumpukan kosong, atau derajad R lebih tinggi dibanding derajad ujung
tumpukan, push operator ke dalam tumpukan. Jika tidak, pop ujung tumpukan da tulis, kemudian
ulangi pembandingan R ujung tumpukan. Kemudian R di push.
Langkah 2
Jika akhir notasi infix telah tercapai, dan tumpukan masih belum kosong, pop semua isi tumpukan
dan tulis hasilnya.
ALGORITMA KONVERSI INFIX KE POSTFIX
1. ( A + B ) x ( C – D ) N = 11 karakter
2. (A + B) * (C – D) ^ E N = 13 karakter
Cara Substitusi : Infix Postfix
(AxB)x(C–D) 1. A*B 1. AB*
2. C-D 2. CD-
3. 1*2 3. 12*
4. AB*CD-*
LATIHAN :
1. A + B * C – D ^ E
2. (A * B) – ( C + D ) / ( E * ( F – G ))
ANTRIAN
(QUEUE)
CONTOH ANTRIAN
import java.util.LinkedList;
import java.util.Queue;
public class SD_061 {
public static void main(String[] args) {
Queue<Integer> numbers = new LinkedList<>();
numbers.offer(1);
numbers.offer(2);
numbers.offer(3);
System.out.println("Antrian: " + numbers);
int accessedNumber = numbers.peek();
System.out.println("Isi Antrian: " + accessedNumber);
Sorting
Sorting is a process that organizes a collection of data into either ascending or
descending order.
Pengurutan : menyusun data agar terurut
Terurut menaik ascending
Terurut menurun Descending
Contoh Pengurutan
Mengurutkan harga dari terendah hingga tertinggi
Mengurutkan mahasiswa yang paling tinggi hingga paling rendah
Mengurutkan IPK tertinggi hingga terendah
Mengurutkan lagu berdasarkan artis, album, playlist, dll
Pencarian Sekuential adalah proses membandingkan setiap elemen Larik satu persatu secara
beruntun, dari elemen pertama sampai elemen yang dicari ditemukan
Data yang ada pada suatu array dibandingkan satu persatu dengan data yang dicari
Pencarian ini hanya melakukan pengulangan dari 1 hingga dengan jumlah data.
Pada setiap pengulangan, dibandingkan data ke-i dengan yang dicari. Bila sama, data telah
ditemukan. Bila hingga akhir pengulangan, tidak ada yang sama, berarti data tidak
ditemukan
Iterasi 1
If A[1] == 5?
Hasilnya False
PROSES SEQUENTIAL SEARCH
Iterasi 2
If A[2] == 5 ?
Hasilnya False, maka Data belum ditemukan
Iterasi 3
If A[3] == 5 ?
Hasilnya True, Maka Data ditemukan
}
INTERPOLATION SEARCH
Merupakan pencarian sebuah elemen dalam sebuah array satu dimensi dengan
menggunakan rumus interpolasi atau perkiraan secara interpolasi
Berlaku rumus interpolasi adalah
b/a = q/p
IMPLEMENTASI INTERPOLATION SEARCH
import java.util.Arrays;
public class SD_Interpolation {
public static void main(String[] args) {
int[] sourceArray {1,2,3,4,6,7,9,11,12,14,15,16,17,19,33,34,43,45,55,66,76,88};
System.out.println("Data Larik: "+Arrays.toString(sourceArray));
printline(50);
int location = find(sourceArray, 55);
if(location != -1){
System.out.println("Elemen di indeks "+(location+1));
}else {
System.out.println("Element tidak ditemukan");
}
}
IMPLEMENTASI INTERPOLATION SEARCH
public static int find(int[] intArray, int data){
int lowerBound = 0;
int upperBound = intArray.length -1;
int midPoint = -1;
int comparisons = 0;
int index = -1;
while(lowerBound <= upperBound){
System.out.println("Comparison " + (comparisons +1) ) ;
System.out.println("lowerBound : "+lowerBound
+ " , intArray[" + lowerBound+"] = "
+ intArray[lowerBound]) ;
IMPLEMENTASI INTERPOLATION SEARCH
System.out.println("upperBound : "+upperBound + " , intArray[" + upperBound+"] = " +
intArray[upperBound]) ;
comparisons++;
midPoint = lowerBound +
Math.round((float)(upperBound - lowerBound)
/ (intArray[upperBound] - intArray[lowerBound])
* (data - intArray[lowerBound]));
System.out.println("midPoint = "+midPoint);
// data found
if(intArray[midPoint] == data){
index = midPoint;
break;
}
else {
if(intArray[midPoint] < data){
lowerBound = midPoint + 1;
}
else{
upperBound = midPoint -1;
}
}
}
System.out.println("Total comparisons : " + comparisons);
return index;
}
public static void printline(int count){
for(int i=0;i <count-1;i++){
System.out.print("=");
}
System.out.println("=");
}
}