STACK TUMPUKAN Fajrizal Stack Tumpukan dapat diartikan sbg
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 : D Top C B A Bottom • 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 )
• Example : Kondisi awal Stack 1 4 Pop ( S ) B A 2 5 A 3 Push ( S, A ) C Push ( S, C ) B Push ( S, B ) A Pop ( S ) A 6 D Push ( S, D ) C Push ( S, C ) B Push ( S, B ) 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 Max. Elemen =255; type Tumpukan = record Isi : array[1. . Max. Elemen] of string; atas : 0. . Max. Elemen end; var T : Tumpukan;
• Operasi PUSH : 1 procedure PUSH ( var T : Tumpukan; X : string ); begin T. Atas : =T. Atas + 1; T. Isi[T. Atas] : = X end; 2 procedure PUSH ( var T : Tumpukan; X : string ); begin if T. Atas = Max. Elemen then writeln ( ‘ TUMPUKAN SUDAH PENUH ‘ ) else begin T. Atas : =T. Atas + 1; T. Isi[T. Atas] : = X end;
• Operasi POP : 1 2 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;
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 ungkapan 2 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 benar 2 terhindar dari kesalahan. • Contoh : ( dalam notasi infix ) DG METODE SUBSTITUSI 1. A + B x C Notasi Prefix Notasi Postfix x. BC 1 BCx 1 +A 1 2 A 1+ 2 • Latihan : 2. (A 2 + B) x (C –(D ^ E)) 3. (A x B) – ( C + D ) / ( E x ( F – G ) ) 1
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 masing 2 operator, misalnya : ^ pangkat = bernilai 3 x , / = bernilai 2 + , - = bernilai 1 ) , ( = bernilai 0 • Langkah 1 Dimulai dari I=1 sampai N, kerjakan langkah 2 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.
1. ( A + B ) x ( C – D ) N = 11 karakter Proses ke 1 2 3 4 5 6 7 8 9 10 11 Karakter dibaca ( R ) Isi Stack ( A + B ) * ( C D ) ( Karakter tercatat Notasi Postfix terbentuk A A B + AB AB+ C AB+C D * AB+CDAB+CD-* +( Kosong * (* -(* * Kosong
( K ^ ( L + M )) + ( N – O ) N = 15 karakter Proses ke 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Karakter dibaca Isi Stack ( K ^ ( L + M ) ( + ( N O ) Karakter tercatat Notasi Postfix terbentuk K K L KL M + ^ KLM +^ N O + KLM +^ NOKLM +^ NO- + ^( (^( +(^( (( Kosong + (+ -( + (+ + kosong
2. (A + B) * (C – D) ^ E N = 13 karakter Proses ke Karakter dibaca ( R ) Isi Stack 1 2 3 4 5 6 7 8 9 10 11 ( A + B ) * ( C D ) ( 12 13 ^ E Karakter tercatat Notasi Postfix terbentuk A A B + AB AB+ C AB+C D * AB+CDAB+CD-* E ^ AB+CD-*E^ +( Kosong * (* -(* * Kosong ^ Kosong
• Cara Substitusi : Infix ( A x B ) x ( C – D ) 1. A*B 2 1 3 Postfix 1. AB* 2. C-D 3. 1*2 LATIHAN : 1. 2. A+B*C–D^E (A * B) – ( C + D ) / ( E * ( F – G )) 2. CD 3. 12* 4. AB*CD-*
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 masing 2 operator, misalnya : $ pangkat = bernilai 3 x , / = bernilai 2 + , - = bernilai 1 ) , ( = bernilai 0 • Langkah 1 Dimulai dari I=N sampai 1, kerjakan langkah 2 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, pembandingan ujung kemudian R ulangi 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.
• ( A + B ) x ( C – D ) N = 11 karakter Pros Karakter es dibaca ( R ) ke 1 2 3 4 5 6 7 8 9 10 11 12 13 ) D C ( * ) B + A ( Isi Stack Karakter tercatat Isi Variabel T ( Notasi Postfix ) D D C - DC DC- B DC-B A + * DC-BA+* Notasi Prefix terbentuk ) -) Kosong * )* +)* * Kosong *+AB-CD
• SELESAIKAN : (A + B) * (C – D) ^ E A*B–(C+D)/(E*(F–G))
Proses ke Karakter dibaca ( R ) Isi Stack 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ( ( P Q ) + R ) X ( S ^ T ) ( (( 16 17 18 19 20 21 / (( U / V ) 22 23 24 + W ) Karakter tercatat Notasi Postfix terbentuk P P PQ - PQ PQ- R + PQ-R+ S PQ-R+S T ^ * PQ-R+ST^* U PQ-R+ST^*U V / / PQ-R+ST^*UV// W + PQ-R+ST^*UV//W+ -( ( KOSONG + KOSONG X (X ^(X * KOSONG / ((/ /((/ KOSONG + KOSONG
- Slides: 21