A. DEFINISI MASALAH
Contoh:
Gambar 7.1 Keluaran program
Hasil dari prefix *+12-34 adalah -3
3. Kembangkan program di atas dengan membuat stack yang berisi Object sehingga
isi Stack dapat diisi dengan object buku yang telah dibuat pada praktikum
sebelumnya. Terapkan kedua jenis stack, baik yang array maupun single linked
list!
B. SOURCE CODE
Buku.java
1 public class Buku {
4 public Buku(){
5 }
21 }
Stack.java
1 public class Stack {
5 public Stack(int n) {
6 top = -1;
7 size = n;
8 data = new Object[size];
9 }
36 }
StackLinkedList.java
1 import java.util.EmptyStackException;
2 class Node {
5 Node(Object data) {
6 this.data = data;
7 }
8 Node(Buku data) {
9 this.data = data;
10 }
11 }
14 public StackLinkedList() {
15 head = tail = top = null;
16 }
68 }
Main.java
1 import java.util.Scanner;
2 public class Main {
Buku.java
1 Deklarasi class dengan nama Buku
2 Deklarasi variabel privat bernama judul dan kategori dengan tipe data String
3 Deklarasi variabel privat bernama harga dan denda dengan tipe data double
4 Deklarasi constructor Buku tanpa menggunakan parameter
5 Proses menutup constructor
6 Deklarasi constructor Buku dengan parameter variabel judul dengan tipe data
String
7 Inisialisasi variabel judul dengan dirinya sendiri menggunakan keyword this
8 Proses menutup constructor
9 Proses deklarasi method getJudul
10 Proses mengembalikan nilai variabel judul
11 Proses menutup method getJudul
12 Proses deklarasi method getKategori
13 Proses mengembalikan nilai variabel kategori
14 Proses menutup method getKategori
15 Proses deklarasi method getHarga
16 Proses mengembalikan nilai variabel harga
17 Proses menutup method getHarga
18 Proses deklarasi method getDenda
19 Proses mengembalikan nilai variabel denda
20 Proses menutup method getDenda
21 Proses menutup class
Stack.java
1 Deklarasi class dengan nama Stack
2–4 Deklarasi variabel private size dan top dengan tipe data integer serta Array
of Object dengan nama data
5–9 Deklarasi constructor dengan parameter n yang bertipe data integer,
didalamnya terdapat inisialisasi variabel top dengan nilai -1, variabel size
sama dengan n, dan array data dengan panjang sama dengan size
10 – 12 Deklarasi method boolean dengan nama isPalindrome yang akan
mengembalikan nilai true
13 – 15 Deklarasi method isFull yang digunakan untuk mengecek penuh tidaknya
stack dengan syarat yaitu apabila variabel top bernilai sama dengan
variabel size dikurangi satu maka akan mengembalikan nilai true dan jika
tidak memenuhi syarat tersebut maka bernilai false
16 – 18 Deklarasi method isEmpty yang digunakan untuk mengecek kosong
tidaknya stack dengan syarat yaitu apabila variabel top bernilai sama
dengan -1 maka akan mengembalikan nilai true dan jika tidak memenuhi
syarat tersebut maka bernilai false
19 – 23 Deklarasi method void dengan nama push yang berparameter Object dt
didalamnya terdapat seleksi if dengan syarat jika tidak memenuhi method
isFull maka akan terjadi inisialisasi array data indeks ke ++top sama
dengan dt. Method ini digunakan untuk melakukan penambahan data pada
Stack.
24 – 35 Deklarasi method void dengan nama pop yang didalamnya terdapat dua
seleksi if untuk menginisialisasi variabel hasil sama dengan array data
indeks ke top-- dan untuk mengembalikan hasil pemanggilan method
getJudul oleh object hasil serta seleksi else untuk mengembalikan variabel
hasil
36 Proses menutup class Stack
StackLinkedList.java
1 Proses impor EmptyStackException dari library java
2 - 11 Proses deklarasi class Node yang didalamnya terdapat intansiasi objek
data dari class buku, deklarasi variabel next serta terdapat dua constructor
yang masing masing digunakan untuk menginisialisasi variabel data
bertipe data object dan variabel data bertipe data Buku
12 Deklarasi class dengan nama StackLinkedList
13 Inisialisasi variabel head, tail, top yang bertipe data Node
14 - 16 Deklarasi constructor yang didalamnya terdapat inisialisasi variabel head,
tail, dan top sama dengan null
17 – 19 Deklarasi method boolean dengan nama isEmpty yang digunakan untuk
mengembalikan nilai true/false dengan kondisi top sama dengan null
20 – 32 Deklarasi method pop yang didalamnya terdapat seleksi if untuk
melakukan throw EmptyStackException, inisialisasi object dataPop,
pemanggilan method remove last, seleksi if untuk mengembalikan nilai
dari pemanggilan method getJudul oleh variabel dataPop dan seleksi else
untuk mengembalikan nilai dari variable dataPop
33 – 47 Deklarasi method removeLast yang didalamnya terdapat inisialisasi
variabel temp, seleksi if dengan syarat tidak memenuhi method isEmpty
dan didalamnya lagi terdapat seleksi if dengan syarat jika tail sama dengan
head maka nilai head dan tail adalah null, dan seleksi else yang
didalamnya terdapat perulangan while dan inisialisasi variabel temp.next,
tail, dan temp
48 - 51 Deklarasi method push dengan parameter variabel dt yang didalamnya
terdapat pemanggilan method addLast dengan parameter variabel dt dan
inisialisasi variabel top sama dengan tail
52 – 60 Deklarasi method addLast dengan parameter variabel dt yang didalamnya
terdapat instansiasi newNode, seleksi if dengan syarat jika memenuhi
kondisi dalam method isEmpty maka nilai variabel head dan tail sama
dengan variabel newNode, dan seleksi else yang berisi inisialisasi variabel
tail.next dan tail
61 - 67 Deklarasi method peek yang didalamnya terdapat seleksi if untuk
mengembalikan nilai dari hasil pemanggilan method getJudul oleh
variabel top.data dan seleksi else untuk mengembalikan nilai dari variabel
top.data
68 Proses menutup class StackLinkedList
Main.java
1 Proses impor Scanner untuk inputan
2 Deklarasi class dengan nama Main
3 - 13 Deklarasi method static Integer dengan nama getPrioritas yang
berparameter variabel a, didalamnya terdapat seleksi if else untuk
menentukan prioritas operan seperti operan ‘+’ dan ‘-‘ akan
mengembalikan nilai 1, operan ‘*’ dan ‘/’ akan mengembalikan nilai 2,
operan ‘^’ akan mengembalikan nilai 3 dan operator lainya akan
mengembalikan nilai 0
14 - 17 Deklarasi method static boolean dengan nama isOperator dan memiliki
parameter variabel c yang akan mengembalikan nilai true/false
berdasarkan kondisi variabel c merupakan operator(‘+’, ‘-‘, ‘*’, ‘/’, ‘^’,
‘)’, ‘(‘ ) atau tidak
18 - 46 Deklarasi method String dengan nama prefix berparameter variabel a yang
digunakan untuk merubah notasi infix menjadi notasi prefix dengan cara
membalikkan urutan dari notasi infix dan akan mencetak operator terlebih
dahulu sesuai dengan hirarkinya diikuti dengan operandnya
47 - 71 Deklarasi method String dengan nama postfix berparameter variabel a
yang digunakan untuk merubah notasi infix menjadi postfix dengan cara
mencetak operan terlebih dahulu baru diikuti dengan operatornya
72 - 106 Dekalrasi method hitungPostfix yang digunakan untuk menghitung hasil
operasi postfix dengan cara merubahnya dari tipe data String menjadi tipe
data double dan selanjutnya akan melakukan operasi matematika sesuai
dengan operatornya pada seleksi switch, method ini akan mengembalikan
variabel hasil sebagai hasil akhir perhitungan operasi tersebut yang bertipe
data double
107 Deklarasi method main
108 Instansiasi Scanner dengan nama in
109 – 114 Proses pengerjaan tugas nomor 1 dengan cara memasukkan inputan
operasi, setelah itu akan menampilkan notasi infix, prefix serta notasi
postfix dari operasi yang telah diinputkan
115 - 116 Proses pengerjaan tugas nomor 2 dengan menampilkan hasil perhitungan
notasi postfix dari operasi hasil inputan menggunakan method
hitungPostfix
117 – 125 Proses pengerjaan tugas nomor 3 dengan cara menginstansiasi Stack yang
menggunakan array dengan nama stAr yang merupakan stack bertipe data
double, setelah itu dilakukan proses pemanggilan method push untuk
memasukkan data pada stack tersebut dengan nilai 5,8, 7 dan selanjutnya
dilakukan deklarasi perulangan while dengan syarat stack stAr tidak
kosong maka akan dilakukan pencetakan isi stack stAr tersebut dengan
menggunakan method pop
126 – 133 Proses pengerjaan tugas nomor 3 dengan cara menginstansiasi Stack yang
menggunakan array dengan nama stArBuku yang merupakan stack bertipe
data Buku, setelah itu dilakukan proses pemanggilan method push untuk
memasukkan data pada stack tersebut dengan nilai “PHP”, “Basis Data”,
“Sistem Operasi” dan selanjutnya dilakukan deklarasi perulangan while
dengan syarat stack stArBuku tidak kosong maka akan dilakukan
pencetakan isi stack stArBuku tersebut dengan menggunakan method pop
134 – 141 Proses pengerjaan tugas nomor 3 dengan cara menginstansiasi Stack yang
menggunakan linked list dengan nama stLL yang merupakan stack bertipe
data double, setelah itu dilakukan proses pemanggilan method push untuk
memasukkan data pada stack tersebut dengan nilai 50, 25, 0 dan
selanjutnya dilakukan deklarasi perulangan while dengan syarat stack
stLL tidak kosong maka akan dilakukan pencetakan isi stack stLL tersebut
dengan menggunakan method pop
142 - 150 Proses pengerjaan tugas nomor 3 dengan cara menginstansiasi Stack yang
menggunakan linked list dengan nama stLLBuku yang merupakan stack
bertipe data Buku, setelah itu dilakukan proses pemanggilan method push
untuk memasukkan data pada stack tersebut dengan nilai “Java”,
“Algoritma dan STD”, “C++”, setelah itu dilakukakn pemanggilan
method peek oleh stack stLLBuku dan selanjutnya dilakukan deklarasi
perulangan while dengan syarat stack stLLBuku tidak kosong maka akan
dilakukan pencetakan isi stack stLLBuku tersebut dengan menggunakan
method pop
151 Proses menutup method main
152 Proses menutup class Main
D. SCREENSHOT PROGRAM
E. KESIMPULAN
1. Stack atau dalam bahasa indonesia dikenal sebagai tumpukan adalah salah satu
konsep struktur data yang menggunakan prinsip LIFO ( Last In First Out ) yang
berarti data yang paling terakhir masuk akan menjadi data yang keluar terlebih
dahulu.
2. Berdasarkan penyusunnya stack dibagi menjadi dua jenis yaitu stack yang tersusun
dari array dan stack yang tersusun dari linked list ( Bisa berupa single maupun
double linked list ). Perbedaan dari kedua jenis stack tersebut adalah pada stack
yang menggunakan linked list terdapat berbagai method khusus seperti method
addLast dan addFirst yang sama fungsinya seperti method push serta method
removeLast dan removeFirst yang sama fungsinya dengan method pop. Sedangkan
pada stack yang menggunakan array tidak terdapat method – method khusus seperti
yang dimiliki pada linked list, stack yang menggunakan array hanya bergantung
pada indeks saja dan memiliki method push yang memiliki fungsi untuk menambah
data pada array tersebut agar terlihat lebih dinamis.
3. Terdapat 5 (lima) method utama yang ada pada Stack yaitu, method Push, Pop,
Peek. isEmpty, dan isFull. Berikut penjelasanya :
Push() : Digunakan untuk menambahkan suatu data pada Stack
Pop() : Digunakan untuk mengambil data pada top dari sebuah Stack
Peek() : Digunakan untuk melihat data pada top dari sebuah Stack
isEmpty() : Digunakan untuk mengecek kosong tidaknya suatu Stack
isFull() : Digunakan untuk mengecek penuh tidaknya suatu Stack
4. Stack dapat digunakan untuk memecahkan berbagai macam masalah yang ada di
kehidupan sehari – hari, seperti pada tugas di atas stack dapat digunakan untuk
mengubah suatu notasi infix menjadi prefix dan postfix dengan cara menyimpan
operator kedalam stack tersebut dan mencetak operand nya, setelah itu operator
tersebut akan dicetak berdasarkan hirarkinya atau jika ada tanda tutup kurung “)”.
Selain itu stack juga dapat digunakan untuk merubah bilangan desimal menjadi
biner dengan cara melakukan operasi modulo dari suatu nilai dengan angka 2 dan
sisa yang dihasilkan akan di masukkan ke stack dan hal itu diulang terus hingga
nilai dari bilangan tersebut mencapai 0.