Topik
•
Pengertian stack
•
Operasi pada stack
•
Implementasi stack dengan array
Stack (Tumpukan)
“Benda yang terakhir masuk ke dalam stack akan menjadi yang pertama keluar
Ilustrasi Stack
• Karena Compo ditumpuk di posisi terakhir, maka Compo
akan menjadi elemen teratas dalam tumpukan. Sebaliknya, karena Televisi ditumpuk pada saat pertama kali, maka
Pengertian
• Stack (tumpukan) adalah struktur data
dimana proses pengambilan dan
penambahan element dilakukan pada satu ujung yang sama.
• Stack mengikuti konsep LIFO.
• LIFO (Last In First Out) : elemen yang
terakhir kali masuk akan menjadi elemen yang pertama kali keluar.
• Stack dapat dibuat dengan menggunakan
PUSH, POP dan TOP
• Operasi dasar pada stack adalah : pop dan push. – Push : proses menambah item pada stack.
– Pop : proses mengambil item pada stack.
• Pop dan push sama-sama dilakukan pada item yang
terakhir kali ditambahkan pada stack.
• Sedangkan pointer TOP akan menunjuk pada element
yang paling atas (yang paling akhir ditambahkan) pada stack.
Stack
Proses Operasi Stack
• Contoh lain adalah ada sekumpulan perintah stack
yaitu push(5), push(7), pop, push(3), pop, pop. Jika dijalankan, maka yang akan terjadi adalah :
Pointer Top
•
Digunakan untuk menunjuk element
paling akhir yang dimasukkan kedalam
stack.
•
Jika top tidak menunjuk pada element
manapun hal ini menunjukkan bahwa
stack dalam kondisi kosong (empty).
•
Pada
array
: top akan menyimpan
Operasi pada Stack
1. Deklarasi
2. Inisialisasi
3. Cek kosong
4. Cek penuh
(1) Deklarasi
•
Proses yang harus dilakukan pertama
kali adalah deklarasi/menyiapkan
tempat.
•
Langkah yang harus dilakukan adalah :
– Deklarasi class
– Deklarasi struktur data (menggunakan
array atau linked list)
Deklarasi Stack dengan Array
1. Pembuatan class contoh :
2. Pembuatan variabel top :
int top;
3. Pembuatan variabel untuk menampung panjang array :
int array_size;
(mendeklarasikan variabel bernama array_size dengan tipe integer)
4. Pembuatan variabel Array :
int tumpukan[];
(2) Inisialisasi
•
Merupakan proses pemberian nilai awal.
•
Pada
Array
:
1. Pembentukan obyek array beserta ukurannya.
tumpukan = new int[10];
(pembentukan obyek array yang memiliki 10 element, dan alamat obyek akan disimpan pada variabel bernama
tumpukan)
2. Pemberian nilai awal pada variabel top=-1.
(3) Cek Kosong
•
Operasi yang digunakan untuk
mengecek kondisi stack dalam
keadaan kosong.
•
Caranya : melihat nilai top. Jika nilainya
sama seperti ketika inisialisasi berarti
stack dalam kondisi kosong (top =-1
atau top=null).
•
Operasi ini harus dapat
(4) Cek Penuh
• Operasi yang hanya dapat diterapkan pada
stack yang menggunakan array.
• Operasi ini digunakan untuk mengecek kondisi
stack dalam keadaan penuh.
• Caranya : melihat nilai top. Jika nilai top sudah
menunjuk n-1 (dimana n adalah ukuran array) maka dapat diindikasikan stack sudah dalam kondisi penuh.
• Operasi ini harus dapat mengembalikan nilai
(5) Operasi POP
• Pop adalah proses pengambilan data pada
stack.
• Ketika pop terjadi, element pada stack akan
berkurang, yaitu element yang paling akhir ditambahkan.
• Sehingga posisi pointer top juga akan
bergeser :
(5) Operasi POP...
(lanjutan)
• Langkah-langkah :
1. Pengecekan stack dalam kondisi kosong dengan memanggil method isEmpty(). Jika nilai yang
dikembalikan true maka pop tidak bisa dilakukan (penangkapan error oleh exception handling). Jika nilai yang dikembalikan false maka akan dilakukan langkah berikutnya (langkah 2 dan 3).
2. Data dari element paling belakang akan menjadi return value (nilai yang dikembalikan).
Program Pop (Array)
• Untuk menggunakan StackException() harus
(6) Operasi Push
• Push adalah proses penambahan element
pada stack.
• Ketika push terjadi, element pada stack
akan bertambah 1.
• Posisi pointer top akan bergeser menunjuk
pada element baru yang ditambahkan.
(6) Operasi PUSH...
(lanjutan)
•
Langkah-langkah :
1. Penambahan element baru pada bagian belakang stack.
2. Pergeseran posisi top.
• Khusus untuk array, terlebih dahulu harus
dicek kondisi stack penuh dengan
(7) Operasi peek
•
Peek adalah proses
pengaksesan
element yang ditunjuk oleh top(yaitu
element yang terakhir kali
ditambahkan).
•
Operasi ini berbeda dengan pop
karena tidak disertai dengan
Contoh Penerapan Stack
•
Konversi Desimal ke Biner
•
Notasi Polish
•
Menara Hanoi
Notasi Polish (1)
•
Menggubah notasi infix menjadi notasi
postfix.
•
Contoh :
A+B (infix)
Algoritma
•
Misal :
Q = ekspresi matematika yang ditulis
dalam notasi infix
Algoritma
1. Push tanda “(“ ke stack dan tambahkan tanda “)” di sentinel di Q.
2. Scan Q dari kiri ke kanan, kemudian ulangi langkah c s.d f untuk setiap elemen Q sampai stack Q kosong.
3. Jika yang discan adalah operand, maka tambahkan ke P 4. Jika yang discan adalah “(“ maka push ke stack
5. Jika yang discan adalah “)” maka pop isi stack sampai
ditemukan tanda “(“, kemudian tambahkan ke P sedangkan tanda “(“ tidak disertakanke P.
6. Jika yang discan adalah operator, maka :
- Jika elemen paling atas dari stack adalah operator yang
mempunyai tingkatan sama atau lebih tinggi dari operator yang discan, maka pop operator tsb dan tambahkan ke P.
Contoh
Penyelesaian
Q = A + ( B * C - ( D / E ^ F ) * G ) * H
Penyelesaian
•
Hasil akhir :
Dari proses di atas didapatkan notasi
Notasi Polish (2)
•
Menghitung ekspresi matematika yang
disusun dalam notasi postfix.
•
Contoh :
Algoritma
• Misal :
Algoritma
1.Tambahkan tanda “)” pada sentinel di P
2.Scan P dari kiri ke kanan, ulangi langkah c dan d untuk setiap elemen P sampai ditemukan sentinel. 3.Jika yang discan adalah operand, maka push ke
stack.
4.Jika yang discan adalah operator (sebut opr1), maka Pop 1 buah elemen teratas dari stack, simpan dalam variable var1. Pop 1 buah elemen teratas dari stack, simpan dalam variable var2. Hitung variable (var2 opr1 var1), simpan hasil di variable hitung. Push variable hitung ke stack.
Contoh Kasus
Penyelesaian
• P = 5, 2, 6, +, *, 12, 4, /,
-• Tambahkan tanda “)”pada sentinel P
sehingga
P = 5, 2, 6, +, *, 12, 4, /,
-,
)
Penyelesaian
Hasil :
Operator Priority
^
Pangkat, akar/, *
Pembagian,perkalian
+, -
Penambahan,Latihan
1. Ubah notasi infix berikut ke dalam
bentuk notasi postfix :
Latihan
2. Hitung ekspresi matematika berikut
yang disusun dalam bentuk postfix :
• 2,2,3,+,*,3,2,-,*