Laporan Bab 4 Algoritma dan Struktur Dat

LABORATORIUM PEMBELAJARAN ILMU KOMPUTER
FAKULTAS ILMU KOMPUTER
UNIVERSITAS BRAWIJAYA
BAB
NAMA
NIM
TANGGAL
ASISTEN

: STACK
: M SATRIA PUTRA UTAMA
: 155150207111168
: 08/10/2016
: ILHAM ROMADHONA

A. DEFINISI MASALAH
1. Buat program untuk mengkonvesi dari bilang desimal ke representasi bilangan biner
menggunakan program stack di atas.
2. Kembangkan program di atas dengan membuat stack yang berisi Object sehingga
isi Stack dapat diisi sembarang object seperti object Double, objeck Buku dan lain
sebaginya. Dengan potongan program driver sebagaimana gambar 5 dan class Buku

sebagaimna gambar 6 akan menghasilkan keluaran sebagaimana gambar 7.
Gambar 5. Driver program ADT Stack Object
public class AppStackObject {
public static void main(String[] args) {
//implementasi Stack
StackObject st = new StackObject(3);
st.push(new Double(5));
st.push(new Double(8));
st.push(new Double(7));
while (!st.isEmpty()){
System.out.println(st.pop());
}
StackObject stBuku = new StackObject(3);
stBuku.push(new Buku("Java","Anton"));
stBuku.push(new Buku("Algoritma dan
STD","Achmad"));
stBuku.push(new Buku("C++","Budi"));
while (!stBuku.isEmpty()){
System.out.println(stBuku.pop());
}

}
}

Gambar 6. Class Buku
Class Buku{
private String judul;
private String pengarang;
public Buku(String jdl, String peng){
this.judul = jdl;
this.pengarang = peng;
}
public String toString(){
return String.format("%s %s", this.judul,
this.pengarang);
}}

Gambar 6. Keluaran program
7.0
8.0
5.0

C++ Budi
Algoritma dan STD Achmad
Java Anton

B. SOURCE CODE
No.1
1
2
3

Stack.java
package asdpraktikum;
import java.util.Scanner;
public class Stack {

4

// Struktur Data

5

6
7

private int size;
private int top;
private int[] data;

8

// method

9
10
11
12
13

public Stack(int n) {
top = -1;
size = n;

data = new int[size];
}

14
15
16

public boolean isPalindrome() {
return true;
}

17
18
19
20
21

public boolean isFull() {
return top == (size - 1) ? true : false;
//if (top == size-1)return true;

//else return false;
}

22
23
24
25
26

public boolean isEmpty() {
return top == -1 ? true : false;
//if (top == -1) return true;
//else return false;
}

27
28
29
30
31

32

public void push(int dt) {
if (!isFull()) {
data[++top] = dt;
}
}
public int pop() {

33
34
35
36
37
38

}

39
40

41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59


public static void main(String[] args) {
System.out.println("========= Create by =========");
System.out.println("Nama : M SATRIA PUTRA UTAMA");
System.out.println("NIM
: 155150207111168");
System.out.println("Kelas : IF-A");
System.out.println("=============================");
Scanner input = new Scanner(System.in);
Stack st = new Stack(3);
st.push(0);
st.push(6);
st.push(7);
while (!st.isEmpty()) {
System.out.println(st.pop());
}
//app stack
//int nilai = 1234;
Stack s = new Stack(100);
System.out.println("=============================");
System.out.println("Konversi Desimal ke Biner ");

System.out.print("Masukkan Bilangan Desimal = ");
int nilai = input.nextInt();

60
61
62
63
64
65
66
67
68
69
70
71

int hasil = -999;
if (!isEmpty()) {
hasil = data[top--];
}

return hasil;

while (nilai != 0) {
int sisa = nilai % 2;
s.push(sisa);
nilai = nilai / 2;
}
System.out.print("Bilangan Biner = ");
while (!s.isEmpty()) {
System.out.print(s.pop());
}
System.out.println("\n=============================");
}
}

No.2
1
2
3
4
5
6
7
8

StackObject.java
package asdpraktikum;
public class StackObject {
private int size, top;
private Object[] data;
public StackObject(int n) {
top = -1;
size = n;

9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

data = new Object[size];
}
public boolean isFull() {
return top == (size - 1) ? true : false;
}
public boolean isEmpty() {
return top == -1 ? true : false;
}
public void push(Object dt) {
if (!isFull()) {
data[++top] = dt;
}
}
public Object pop() {
Object hasil = -999;
if (!isEmpty()) {
hasil = data[top--];
}
return hasil;
}
}

Buku.java
package asdbab4;
public class Buku {
private String judul, pengarang;
private int top, size;
private Object[] data;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

}

1
2
3

mainStackObject.java
package asdpraktikum;
public class mainStackObject {
public static void main(String[] args) {

public Buku(int n) {
top = -1;
size = n;
data = new Object[size];
}
public Buku(String judul, String pengarang) {
this.judul = judul;
this.pengarang = pengarang;
}
@Override
public String toString() {
return String.format("%s %s", this.judul, this.pengarang);
}

4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

StackObject st = new StackObject(3);
st.push(new Double(5));
st.push(new Double(8));
st.push(new Double(7));
while (!st.isEmpty()) {
System.out.println(st.pop());
}
StackObject stBuku = new StackObject(3);
stBuku.push(new Buku("Java", "Anton"));
stBuku.push(new Buku("Algoritma dan STD", "Achmad"));
stBuku.push(new Buku("C++", "Budi"));
while (!stBuku.isEmpty()) {
System.out.println(stBuku.pop());
}
}
}

C. PEMBAHASAN
No.1
Stack.java
1
Package asdpraktikum.
2
Deklarasi java util Scanner.
3
Deklarasi kelas dengan nama Stack.
4
Komentar “Struktur Data”.
5
Deklarasi variable size dengan tipe data integer bersifat private.
6
Deklarasi variable top dengan tipe data integer bersifat private.
7
Deklarasi variable data array 1 dimensi dengan tipe data integer bersifat private.
8
Komentas “Method”.
9
Deklarasi konstruktor kelas Stack dengan parameter bertipe integer.
10 Inisialisasi nilai variable top.
11 Inisialisasi nilai variable size.
12 Inisialisasi nilai panjang array data sama dengan nilai variable size.
14 Deklarasi method.
15 Perintah return untuk mengembalikan nilai true.
17 Deklarasi method.
18 Perintah return untuk mengembalikan nilai true atau false dengan syarat nilai variabel
top sama dengan nilai variabel size dikurang 1.
22 Deklarasi method.
23 Perintah return untuk mengembalikan nilai true atau false dengan syarat nilai variabel
top sama dengan nilai variabel size dikurang 1.
27 Deklarasi method void, akses modifier public dengan nama push dan parameter dt
tipe integer.
28 Perintah if dengan syarat isFull bernilai false.
29 Inisialisasi isi array data indeks ke ++ top.
32 Deklarasi method pop.
33 Inisialisasi nilai variable hasil integer.

34
35
37
39
40
41
42
43
44
45
46
47
48
49
50
51
55
56
57
58
59
60
61
62
63
65
66
67
69

Perintah if dengan syarat isEmpty bernilai false.
Inisialisasi nilai variabel hasil = isi array data indeks ke nilai variabel top kurang 1.
Perintah return untuk mengembalikan nilai variable hasil.
Deklarasi main method.
Cetak “======= Create by =======”.
Cetak “Nama : M SATRIA PUTRA UTAMA”.
Cetak “NIM : 155150207111168”.
Cetak “Kelas : IF - A”.
Cetak “======================”.
Instansiasi scanner input.
Instansiasi kelas Stack.
Objek st memanggil method push dengan parameternya 0.
Objek st memanggil method push dengan parameternya 6.
Objek st memanggil method push dengan parameternya 7.
Perulangan while.
Mencetak isi dari method pop.
Instansiasi kelas Stack dengan nama s dan parameternya 100.
Cetak “=======================”.
Cetak ”Konversi Desimal ke Biner ”.
Cetak “Masukkan Bilangan Desimal = ”.
Memasukkan nilai bertipe integer yang akan di simpan pada variable nilai.
Perulangan while dengan syarat nilai variable nilai tidak sama dengan 0.
Inisialisasi nilai variable sisa.
Objek s memanggil objek push.
Perhitungan variable nilai.
Cetak “Bilangan Biner = ”.
Perulangan while.
Mencetak isi dari method pop.
Cetak “=======================”.

No.2
StackObject.java
1
Package asdpraktikum.
2
Deklarasi kelas dengan nama StackObject.
3
Deklarasi variabel dengan nama size dan top tipe integer bersifat private.
4
Deklarasi array 1 dimensi dengan nama data tipe integer bersifat private.
6
Deklarasi konstruktor kelas StackObject dengan parameter bernama n tipe integer.
7
Inisialisasi nilai variabel top.
8
Inisialisasi nilai variabel size.
9
Inisialisasi nilai panjang array data sama dengan nilai variabel size.
11 Deklarasi method.
12 Perintah return untuk mengembalikan nilai true atau false dengan syarat nilai variabel
top sama dengan nilai variabel size dikurang 1.
14 Deklarasi method.
15 Perintah return untuk mengembalikan nilai true atau false dengan syarat nilai variabel
top sama dengan nilai variabel size dikurang 1.
17 Deklarasi method.

18
19
22
23
24
25
27

1
2
3
4
5
7
8
9
10
13
14
15
18
19
20
1
2
3
4
5
6
7
8
9
12
13
14
15
16
17

Perintah if dengan syarat isFull bernilai false.
Inisialisasi isi array data indeks ke ++ top.
Deklarasi method akses modifier public dengan nama pop tipe integer tanpa parameter.
Inisialisasi nilai variabel hasil tipe object.
Perintah if dengan syarat isEmpty bernilai false.
Inisialisasi nilai variabel hasil.
Perintah return untuk mengembalikan nilai variabel hasil.

Buku.java
Package asdpraktikum.
Deklarasi kelas dengan nama Buku.
Deklarasi variabel dengan nama judul, pengarang tipe string bersifat private.
Deklarasi variabel dengan nama size, top tipe integer bersifat private.
Deklarasi array 1 dimensi dengan nama data tipe integer bersifat private.
Deklarasi konstruktor kelas Buku dengan parameter bernama n tipe integer.
Inisialisasi nilai variabel top.
Inisialisasi nilai variabel size.
Inisialisasi nilai panjang array data sama dengan nilai variabel size.
Deklarasi konstruktor kelas Buku dengan parameter bernama judul, pengarang tipe
string.
Inisialisasi nilai variabel judul yang ada di kelas Buku sama dengan nilai variabel judul
yang ada di parameter.
Inisialisasi nilai variabel pengarang yang ada di kelas Buku sama dengan nilai variabel
pengarang yang ada di parameter.
Override.
Deklarasi method toString.
Perintah return untuk mencetak isi dari variabel judul dan pengarang.
mainStackObject.java
Package asdpraktikum.
Deklarasi kelas dengan nama AppStackObject.
Deklarasi main method untuk eksekusi program.
Instansiasi kelas StackObject dengan nama st dan parameter 3.
Objek st memanggil method push dengan parameternya 5 tipe double.
Objek st memanggil method push dengan parameternya 8 tipe double.
Objek st memanggil method push dengan parameternya 7 tipe double.
Perulangan while dengan batas method isEmpty yang dipanggil objek st bernilai false.
Mencetak isi dari method pop yang dipanggil objek st.
Instansiasi kelas StackObject dengan nama stBuku dan parameter 3.
Objek stBuku memanggil method push dengan parameternya “Java”, “Anton”.
Objek stBuku memanggil method push dengan parameternya “Algoritma dan STD”,
Achmad.
Objek stBuku memanggil method push dengan parameternya “C++”, “Budi”.
Perulangan while dengan batas method isEmpty yang dipanggil objek stBuku bernilai
false.
Perintah mencetak isi dari method pop yang dipanggil objek stBuku.

D. SCREENSHOT PROGRAM
No.1

No.2

E. KESIMPULAN
Stack adalah tumpukan dari benda, sekumpulan data yang seolah-olah diletakkan
di atas data yang lain, koleksi dari objek-objek homogen, atau suatu urutan elemen yang
elemennya dapat diambil dan ditambah hanya pada posisi akhir (top) saja. Stack dapat
diilustrasikan dengan dua buah kotak yang ditumpuk, kotak yang satu akan ditumpuk
diatas kotak yang lainnya. Jika kemudian stack 2 kotak tadi, ditambah kotak ketiga,
keempat, kelima, dan seterusnya, maka akan diperoleh sebuah stack kotak yang terdiri
dari N kotak. Stack bersifat LIFO (Last In First Out), artinya benda yang terakhir masuk
ke dalam stack akan menjadi yang pertama keluar dari stack.
Fungsi method yang ada dalam Stack :
1. Push digunakan untuk menambah item pada stack pada tumpukan paling atas.
2. Pop digunakan untuk mengambil item pada stack pada tumpukan paling atas.
3. Clear digunakan untuk mengosongkan stack. Dianggap kosong apabila puncak
stack berada pada posisi -1.
4. IsEmpty digunakan untuk mengecek apakah stack sudah kosong.
5. IsFull digunakan untuk mengecek apakah stack sudah penuh.
Perbedaan implementasi Stack menggunakan Array dengan Linked List :
1. Pada Array, pengaksesan dapat dilakukan hanya dengan memanggil inddeks nilai
yang ingin di akses. Sedangkan,

2. Pada Linked List, pengaksesan bersifat sekuensial, yaitu harus memanggil
berurutan dari node awal.
3. Pada Array memiliki sifat tidak bias diubah, kapasistasnya sudah pasti dan tidak
diubah-ubah. Sedangkan ,
4. Pada Linked List dapat ditambah kapasitasnya sesuai dengan kebutuhan.
5. Penggunaan alokasi memory yang bersifat dinamis pada Linked List jika
dibandingkan dengan Array sehingga pemborosan memori dapat dihindari.