230 likes | 647 Views
STACK ( TUMPUKAN ). Fajrizal. Stack ( Tumpukan ) dapat diartikan sbg : Suatu kumpulan data yang seolah-olah ada data yg diletakkan diatas data yg lain, yg bisa menyisipkan ( menambah ) data serta mengambil ( menghapus data ). Cara penggambaran stack : Operasi yg dpt dilakukan dalam stack :
E N D
STACK ( TUMPUKAN ) Fajrizal
Stack ( Tumpukan ) dapat diartikan sbg : Suatu kumpulan data yang seolah-olah ada data yg diletakkan diatas data yg lain, yg bisa menyisipkan ( menambah ) data serta mengambil ( menghapus data ). • Cara penggambaran stack : • Operasi yg dpt dilakukan dalam stack : 1. Menyisipkan / menambahkan data pd ujung atas stack push 2. Menghapus / mengeluarkan data dr ujung atas stack pop • Prinsip kerja stack adalah LIFO ( Last In First Out ) Top D C B Bottom A
Pop ( S ) Kondisi awal Stack • Example : 4 1 B A 2 5 Pop ( S ) Push ( S, A ) A A Push ( S, D ) D C Push ( S, C ) C Push ( S, C ) 3 6 B B Push ( S, B ) Push ( S, B ) A A
Latihan : Gambarkan keadaan stack utk operasi berikut ( diasumsikan keadaan awal stack kosong ), stack dapat menampung max 4 elemen berupa data NIM. a. Tambahkan 2 no NIM ke dalam stack yaitu ( 0631521001 & 0631521002 ) b. keluarkan 1 elemen dari stack c. Tambahkan 3 elemen berikutnya ke dalam stack dg data (0631521003 & 0631521004 & 0631521005 )
Penyajian awal Stack : Dalam Pascal dikenal type data terstruktur yg disebut ARRAY (LARIK). Dapat digunakan u menyajikan sebuah tumpukan. Tapi penyajian dg mengg. ARRAY adalah kurang tepat karena banyaknya elemen dalam array adalah statis. Sedangkan dalam tumpukan, banyaknya elemen dapat bervariasi ( dinamis ). Meskipun demikian, ARRAY dapat digunakan u menyajikan sebuah tumpukan dg anggapan bahwa banyaknya elemen max dari tumpukan tsb tidak akan melebihi batas max banyaknya elemen dalam array. • Pada saat ukuran tumpukan = ukuran array, jika ditambahkan data baru akan menyebabkan “OVERFLOW”. • Dengan demikian perlu adanya data tambahan u mencatat posisi ujung atas tumpukan.
Dengan kebutuhan ini, penyajian tumpukan dapat dilakukan dengan menggunakan type data terstruktur yang lain yaitu RECORD ( Rekaman ) yg terdiri dari 2 field : - Field 1 Digunakan u menyimpan elemen tumpukan yg bertype array - Field 2 Digunakan u mencatat posisi atas ujung tumpukan. Deklarasi STACK secara umum : const MaxElemen =255; type Tumpukan = record Isi : array[1..MaxElemen] of string; atas : 0..MaxElemen end; var T : Tumpukan;
Operasi PUSH : procedure PUSH ( var T : Tumpukan; X : string ); begin T.Atas :=T.Atas + 1; T.Isi[T.Atas] := X end; procedure PUSH ( var T : Tumpukan; X : string ); begin if T.Atas = MaxElemen then writeln ( ‘ TUMPUKAN SUDAH PENUH ‘ ) else begin T.Atas :=T.Atas + 1; T.Isi[T.Atas] := X end end; 1 2
Operasi POP : procedure POP ( var T : Tumpukan); begin T.Atas :=T.Atas - 1 end; procedure POP ( var T : Tumpukan); begin if T.Atas = 0 then writeln ( ‘ TUMPUKAN SUDAH KOSONG ‘ ) else begin T.Atas :=T.Atas - 1 end end; 1 2
PENULISAN UNGKAPAN NUMERIS DALAM STACK • Salah satu aplikasi STACK adalah untuk menulis ungkapan dengan menggunakan notasi tertentu. • Cara penulisan ungkapan dapat dilakukan dengan menggunakan : 1. Notasi INFIX Operator diletakkan diantara 2 operand ex : A+B dimana A,B sbg operand dan + sbg operator 2. Notasi PREFIX ( POLISH ) Operator diletakkan sebelum 2 operand disajikan ex : +AB 3. Notasi POSTFIX ( SUFFIX ) operator diletakkan setelah 2 operand disajikan ex : AB+
Dalam penulisan ungkapan, khususnya ungkapan numeris seringkali digunakan tanda kurung u mengelompokkan bagian mana yg harus dikerjakan lebih dahulu. • Dalam ungkapan2 yg rumit, pemakaian tanda kurung ini tidak bisa dihindari. • “ Semakin rumit ungkapan maka semakin banyak dibutuhkan tanda kurung “. • Hal ini membawa suatu konsekwensi bahwa penulisan tanda kurung itupun harus benar2 terhindar dari kesalahan. • Contoh : ( dalam notasi infix ) DG METODE SUBSTITUSI 1. A + B x C Notasi PrefixNotasi Postfix xBC 1 BCx 1 +A1 2 A1+ 2 • Latihan : 2. (A + B) x (C –(D ^ E)) 3. (A x B) – ( C + D ) / ( E x ( F – G ) ) 1 2
Algorithma Konversi dari Infix ke Postfix • Langkah 0 ( Awal ) - Baca ungkapan dalam notasi infix, misalnya = S - Tentukan panjang ungkapan tersebut, misalnya N karakter - Siapkan sebuah tumpukan kosong & siapkan derajad masing2 operator, misalnya : ^ pangkat = bernilai 3 x , / = bernilai 2 + , - = bernilai 1 ) , ( = bernilai 0 • Langkah 1 Dimulai dari I=1 sampai N, kerjakan langkah2 berikut a. R = S [ I ] b. Test nilai R, jika R adalah : operand : langsung ditulis kurung buka : push ke dalam tumpukan kurung tutup : pop dan tulis semua isi tumpukan sampai ujung tumpukan = ‘(‘. Pop juga tanda ‘(‘ ini, tapi tidak usah ditulis.
operator : jika tumpukan kosong, atau derajad R lebih tinggi dibanding derajad ujung tumpukan, push operator ke dalam tumpukan. Jika tidak, pop ujung tumpukan da tulis, kemudian ulangi pembandingan R ujung tumpukan. Kemudian R di push. • Langkah 2 Jika akhir notasi infix telah tercapai, dan tumpukan masih belum kosong, pop semua isi tumpukan dan tulis hasilnya.
2 1 • Cara Substitusi : Infix Postfix ( A x B ) x ( C – D ) 1. A*B 1. AB* 2. C-D 2. CD- 3. 1*2 3. 12* 4. AB*CD-* LATIHAN : • A + B * C – D ^ E • (A * B) – ( C + D ) / ( E * ( F – G )) 3
Algorithma Konversi dari Infix ke Prefix • Langkah 0 ( Awal ) - Baca ungkapan dalam notasi infix, misalnya = S - Tentukan panjang ungkapan tersebut, misalnya N karakter - Siapkan sebuah tumpukan kosong & siapkan derajad masing2 operator, misalnya : $ pangkat = bernilai 3 x , / = bernilai 2 + , - = bernilai 1 ) , ( = bernilai 0 • Langkah 1 Dimulai dari I=N sampai 1, kerjakan langkah2 berikut a. R = S [ I ] b. Test nilai R, jika R adalah : operand : langsung ditulis & simpan ke var T kurung tutup : push ke dalam tumpukan kurung buka : pop dan tulis semua isi tumpukan sampai ujung tumpukan = ‘)‘. Pop juga tanda ‘)‘ ini, tapi tidak usah ditulis.
operator : jika tumpukan kosong, atau derajad R lebih tinggi atau sama dibanding derajad ujung tumpukan, push operator ke dalam tumpukan. Jika tidak, pop ujung tumpukan dan tulis disimpan ke var T, kemudian ulangi pembandingan R ujung tumpukan. Kemudian R di push. • Langkah 2 Jika akhir notasi infix telah tercapai, dan tumpukan masih belum kosong, pop semua isi tumpukan dan tulis hasilnya, kemudian simpan ke var T. • Langkah 3 Baca data dalam variabel T, dimulai dari N sampai 1 dan tulis ke dalam notasi prefix.
SELESAIKAN : (A + B) * (C – D) ^ E A * B – ( C + D ) / ( E * ( F – G ) )