510 likes | 1.33k Views
STACK. Topik. Pengertian stack Operasi pada stack Implementasi stack dengan array Implementasi stack dengan linked list. Stack (Tumpukan). “Benda yang terakhir masuk ke dalam stack akan menjadi yang pertama keluar dari stack. Ilustrasi Stack.
E N D
Topik • Pengertian stack • Operasi pada stack • Implementasi stack dengan array • Implementasi stack dengan linked list
Stack (Tumpukan) “Benda yang terakhir masuk ke dalam stack akan menjadi yang pertamakeluar dari stack
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 elemen Televisi menjadi elemen terbawah dari tumpukan. Dan jika dilakukan pengambilan elemen dari tumpukan, maka secara otomatis akan terambil elemen teratas, yaitu Compo. penambahan pengambilan Compo Compo VCD Compo VCD VCD VCD VCD TV TV TV TV TV TV TV
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 array maupun linked list.
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 pointerTOP akan menunjuk pada element yang paling atas (yang paling akhir ditambahkan) pada stack. pop, top push Stack
Proses Operasi Stack • Contoh lain adalahadasekumpulanperintah stack yaitu push(5), push(7), pop, push(3), pop, pop. Jikadijalankan, maka yang akanterjadiadalah : -1 -1
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 index element paling akhir masuk.
Operasi pada Stack • Deklarasi • Inisialisasi • Cek kosong • Cek penuh • Penambahan • Pengambilan • Pengaksesan
(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 pointer top
Deklarasi Stack dengan Array • Pembuatan class contoh : 2. Pembuatan variabel top : int top; • Pembuatan variabel untuk menampung panjang array : int array_size; (mendeklarasikan variabel bernama array_size dengan tipe integer) 4. Pembuatan variabel Array : int tumpukan[]; (mendeklarasikan variabel array bernama tumpukan dengan tipe integer)
(2) Inisialisasi • Merupakan proses pemberian nilai awal. • Pada Array : • 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) • Pemberian nilai awal pada variabel top=-1. int 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 mengembalikan nilai true jika stack kosong dan false jika sebaliknya.
(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 true jika stack penuh dan false jika sebaliknya.
(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 : • Pada array : top di-decrement
(5) Operasi POP...........(lanjutan) • Langkah-langkah : • 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). • Data dari element paling belakang akan menjadi return value (nilai yang dikembalikan). • Pergeseran posisi top.
Program Pop (Array) • Untuk menggunakan StackException() harus disertakan import package dari java.util.*
(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. • Pada array : top akan di-increment.
(6) Operasi PUSH...........(lanjutan) • Langkah-langkah : • Penambahan element baru pada bagian belakang stack. • Pergeseran posisi top. • Khusus untuk array, terlebih dahulu harus dicek kondisi stack penuh dengan memanggil method isFull(). Jika nilai yang dikembalikan true maka bisa ditampilkan pesan kesalahan atau dilakukan resizing array.
(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 penghapusan data yang ada hanya pengaksesan (pengembalian data saja).
Contoh Penerapan Stack • Konversi Desimal ke Biner • Notasi Polish • Menara Hanoi • Rat In a Maze
Notasi Polish (1) • Menggubah notasi infix menjadi notasi postfix. • Contoh : A+B (infix) AB+ (postfix)
Algoritma • Misal : Q =ekspresimatematika yang ditulisdalamnotasi infix P =penampungekspresimatematikadalamnotasi postfix
Algoritma • Push tanda “(“ ke stack dantambahkantanda “)” di sentinel di Q. • Scan Q darikirikekanan, kemudianulangilangkah c s.d f untuksetiapelemen Q sampai stack Q kosong. • Jika yang discanadalah operand, makatambahkanke P • Jika yang discanadalah “(“ maka push ke stack • Jika yang discanadalah “)” maka pop isi stack sampaiditemukantanda “(“, kemudiantambahkanke P sedangkantanda “(“ tidakdisertakanke P. • Jika yang discanadalah operator, maka : - Jikaelemen paling atasdari stack adalah operator yang mempunyai tingkatansamaataulebihtinggidari operator yang discan, maka pop operator tsb dantambahkanke P. - Push operator tersebutke stack. • Keluar
Contoh Q = A + ( B * C - ( D / E ^ F ) * G ) * H
Penyelesaian Q = A + ( B * C - ( D / E ^ F ) * G ) * H >>setelah ditambahkan tanda “)” pada notasi sehingga terdapat 20 simbolsbb :
Penyelesaian • Hasil akhir : Dari prosesdiatasdidapatkannotasi postfixQ = ABC*DEF^/G*-H*+
Notasi Polish (2) • Menghitung ekspresi matematika yang disusun dalam notasi postfix. • Contoh : 2,5,* (postfix) Hasil : 10
Algoritma • Misal : P adalahekspresimatematika yang ditulisdalamnotasi postfix. variable value sebagaipenampunghasilakhir.
Algoritma • Tambahkantanda “)” pada sentinel di P • Scan P darikirikekanan, ulangilangkah c dan d untuksetiapelemen P sampaiditemukan sentinel. • Jika yang discanadalah operand, maka push ke stack. • Jika yang discanadalah operator (sebut opr1), maka • Pop 1 buahelementeratasdari stack, simpandalam variable var1. • Pop 1 buahelementeratasdari stack, simpandalam variable var2. • Hitung variable (var2 opr1 var1), simpanhasildi variable hitung. • Push variable hitungke stack. • Pop isi stack dansimpandi variable value. • Keluar.
Contoh Kasus • P = 5, 2, 6, +, *, 12, 4, /, -
Penyelesaian • P = 5, 2, 6, +, *, 12, 4, /, - • Tambahkantanda “)”pada sentinel P sehinggaP = 5, 2, 6, +, *, 12, 4, /, -, ) Didapatkan 10 simbolyaitu :
Penyelesaian Hasil : Didapatkan Bilangan 37
Latihan 1. Ubah notasi infix berikut ke dalam bentuk notasi postfix : A+((B*C/D)-(E^F)) M*(N^O)/P-(Q+R) (R*S+T)^U/(V-W+X)
Latihan 2. Hitung ekspresi matematika berikut yang disusun dalam bentuk postfix : • 2,2,3,+,*,3,2,-,* • B,2,^, 4, –, a, *, c, *, 2, a, *, /, p, q, *, a, b, +, /, +