Anda di halaman 1dari 9

Algoritma dan Struktur Data

JOBSHEET - 7
STACK

1. KOMPETENSI

1. Mahasiswa mampu memahami algoritma stack.


2. Mahasiswa mampu membuat dan mendeklarasikan struktur algoritma stack.
3. Mahasiswa mampu menerapkan dan mengimplementasikan algoritma stack.

2. ULASAN TEORI

Stack adalah sebuah kumpulan data dimana data yang diletakkan


di atas data yang lain. Dengan demikian stack adalah struktur data yang
menggunakan konsep LIFO (Last In First Out). Konsep LIFO adalah data
yang terakhir masuk dalam stack akan menjadi data pertama yang
dikeluarkan dari stack. Tumpukan disebut juga “Push Down Stack” yaitu
penambahan elemen baru (PUSH) dan penghapusan elemen dari
tumpukan (POP). Ilustrasi Stack dapat digambarkan seperti tumpukan CD
atau tumpukan sate. Stack merupakan suatu susunan koleksi data
dimana dapat ditambahkan dan dihapus selalu dilakukan pada bagian
akhir data, yang disebut dengan Top Of Stack. Dalam proses komputasi,
untuk meletakkan sebuah elemen pada bagian atas dari stack, maka kita
melakukan push. Dan untuk memindahkan dari tempat yang atas
tersebut, kita melakukan pop.

Operasi-operasi pada stack (Tumpukan)


Operasi yang sering diterapkan pada struktur data Stack (Tumpukan)
adalah Push dan Pop. Operasi – operasi yang dapat diterapkan adalah
sebagai berikut :
1. Push : digunakan untuk menembah item pada Stack pada Tumpukan
paling atas.
2. Pop: digunakan untuk mengambil item pada Stack pada Tumpukan
paling atas. Sebagai contoh, misalkah ada data sebagai berikut : 1 3 5 6,
maka data tersebut dapat tersimpan dalam bentuk sebagai berikut:

Gambar 7.1 Proses Push dan Pop pada Stack


Algoritma dan Struktur Data

3. clearStack: mengosongkan Tumpukan S, jika ada elemen maka semua


elemen dihapus.
4. IsEmpty: fungsi yang digunakan untuk mengecek apakah Stack sudah
kosong.
5. IsFull: fungsi yang digunakan untuk mengecek apakah Stack sudah
penuh.

Dua jenis algoritma utama pada stack adalah push dan pop, sebagai berikut :
1. Algoritma Push(Stack, Item)
1) IF MaxStk = Top THEN Overflow
2) Top = Top + 1
3) STACK[Top] = item
4) Exit
2. Algoritma Pop(Stack)
1) IF Top = 0 THEN Underflow; Exit
2) Item = Stack[Top]
3) Top = Top – 1
4) Exit

Salah satu penerapan aplikasi stack terdapat pada bidang aritmatika untuk
penulisan ekspresi matematika. Bentuk penulisan ekspresi matematika
dibagi menjadi 3 notasi utama :
1. Notasi Infix  A + B (operand, operator, operand)
2. Notasi Prefix  + A B (operator, operand, operand)
3. Notasi Postfix  A B + (operand, operand, operator)

Contoh :
Infix  (a+b)*(c-d)
Prefix  *,-,4,3,/,12,3
Postfix  4,3,-,12,3,/,*

Notasi infix adalah notasi aritmatika yang paling sering dipakai, akan tetapi
notasi posfix adalah notasi yang digunakan oleh mesin kompilasi komputer
untuk mempermudah proses pengkodean. Berikut ini adalah penjelasan
mengenai algoritma Postfix :

Algoritma PostFix(Q, P) {Q=Infix, P=Postfix}


1. Masukkan ‘(‘ ke dalam Stack dan ‘)’ ke akhir infix.
2. Telusuri Q sampai elemen yang terakhir
3. Jika menemukan Operand, maka masukkan ke P.
4. Jika menemukan ‘(‘, maka masukkan ke dalam Stack.
5. Jika menemukan operator, maka :
1) Ulangi POP(S) setiap Operator yang sama atau lebih tinggi hirarkinya
dan masukkan ke P
Algoritma dan Struktur Data

2) Masukkan operator tadi ke Stack.


6. Jika menemukan ‘)’, maka :
1) Ulangi POP(S) setiap Operator sampai menemukan ‘(‘ dan masukkan
ke dalam P.
2) Hapus ‘(‘
7. Selesai

1. LANGKAH PRAKTIKUM

Praktikum ini terdiri dari dua package dalam satu project. Package pertama
untuk praktikum 1 merupakan implementasi dari stack dasar untuk data
bertipe integer. Sedangkan praktikum bagian 2 dalam package kedua
merupakan implementasi konversi notasi infix ke postfix. Ekspresi
aritmatika dalam praktikum ini memiliki tipe String.

PRAKTIKUM 1 – Membuat Class Stack

1. Perhatikan diagram class Stack di bawah ini! Diagram class ini yang
selanjutnya akan dibuat sebagai acuan dalam membuat kode program
class Stack.
Stack
size: int
top: int
data[]: int
stack(size: int)
IsEmpty(): boolean
IsFull(): boolean
push(): void
pop(): void
tampilkan(): void
clearStack(): void
2. Deklarasikan variabel berikut pada class Stack

3. Buatlah konstruktor dengan parameter size bertipe integer

4. Buatlah method IsEmpty bertipe boolean yang digunakan untuk


mengecek stack apakah kosong
Algoritma dan Struktur Data

5. Buatlah method IsFull bertipe boolean untuk mengecek apakah isi stack
sudah penuh

6. Buatlah method push yang bertipe void untuk menambahkan isi array
dengan parameter dt yang bertipe integer

7. Buatlah method pop yang bertipe void untuk mengeluarkan isi data
didalam stack
Algoritma dan Struktur Data

8. Buatlah method tampilkan untuk menampilkan data

9. Buatlah method clearStack untuk menghapus isi stack secara keseluruhan

10. Buatlah objek baru bernama tumpuk di class TestStack dengan nilai
parameternya adalah 5

11. Lakukan pengisian data pada stack dengan dengan memanggil method
push

12. Tampilkan data yang sudah anda isikan dilangkah sebelumnya dengan
memanggil method tampilkan

13. Lakukan pemangilan method pop kemudian panggil method tampilkan


data

14. Jalankan Program!


Algoritma dan Struktur Data

PRAKTIKUM 2 – Membuat Class Postfix

1. Untuk membuat notasi Postfix pada operasi aritmatika, maka dapat


dibuat class Postfix pada package baru di project yang sama dengan
praktikum 1. Perhatikan diagram class berikut ini!

Postfix
n: int
top: int
stack[]: char
Postfix(total: int)
push(): void
pop(): void
convert(String Q): string
isOperand(char c): boolean
isOperator(char c): boolean
presedence(char c):int

2. Buatlah konstruktor Postfix seperti di bawah ini!

3. Tambahkan method push dan pop dengan tipe void sebagai berikut :
Algoritma dan Struktur Data

4. Untuk melakukan konversi Infix ke Postfix tambahkan method


convert sebagai berikut :

5. Method isOperand dan isOperator bertipe boolean ditambahkan


untuk melakukan pengecekan operator dan operand
Algoritma dan Struktur Data

6. Tambahkan method presedence yang memiliki nilai kembalian


integer

7. Buatlah suatu inputan ekspresi pada main class untuk memanggil


class Postfix sebagai berikut :

8. Jalankan Program

4. PERTANYAAN
1) Lakukan penambahan data pada program praktikum 1 di atas yaitu angka
21 dan 45, dan tampilkan datanya!
Algoritma dan Struktur Data

2) Pada praktikum 1 langkah pertama yang sudah anda lakukan mengapa


data yang bisa dimasukkan didalam stack hanya angka 21 sedangkan
angka 45 tidak bisa, jelaskan!
3) Modifikasi program pratikum 1 diatas dengan memanggil method pop()
kembali, kemudian masukkan angka 45 di dalam stack, selanjutya
cetaklah datanya juga, amati apakah yang terjadi dan jelaskan!
4) Apakah fungsi method pop() pada program diatas?
5) Modifikasilah program praktikum 1 di atas menggunakan inputan
Scanner!
6) Mengapa variabel top diatas diinisialisasi degan nilai “-1” pada 2
praktikum di atas?

atau

7) Apakah fungsi pembuatan method presedence pada praktikum 2!


8) Setelah inputan ekspresi bertipe string pada praktikum 2 dilakukan
pemanggilan fungsi trim(). Apakah kegunaanya?

9) Pada praktikum 2, jika pada ekspresi inputan terdapat tanda kurung,


maka akan otomatis dihilangkan. Bagaimanakah caranya?terdapat pada
method bagian mana cara tersebut?
10) Apabila diinputkan ekspresi selain operand dan operator pada
praktikum 2. Misalkan saja tanda “@” atau “#”. Apakah output yang
dihasilkan?Jelaskan!

5. TUGAS
1. Modifikasilah program pada praktikum yang sudah anda lakukan yang
inputannya berupa angka gantilah menjadi data kalimat.
2. Buatlah program dengan menggunakan konsep stack untuk
menginputkan sebuah kalimat kemudian outputnya adalah berupa
kalimat terbalik.

3. Buatlah suatu class sesuai praktikum 2 untuk mengembalikan notasi


postfix menjadi infix!
4. Apakah kegunaan notasi prefix dalam kehidupan sehari?
5. Buatlah slass untuk mengkonversi infix menjadi prefix!

Anda mungkin juga menyukai