Modul ke: 05 Desi Fakultas FASILKOM ALGORITMA DAN STRUKTUR DATA OLEH : Ramayanti, S.Kom, MT Program Studi Teknik Informatika
APLIKASI SINGLE STACK Infix, Postfix, Prefix
Operand & Operator A * ( B + C ) Operand A, B, C Operator Operasi *, + Kelompok (, )
INFIX, POSTFIX, PREFIX INFIX POSTFIX PREFIX IN dalam Operatornya didalam 2 operand Ex. A+B Aritmatika sehari-hari POST sesudah Operator berada sesudah 2 operand Ex : AB+ PRE Sebelum Operatornya ada sebelum 2 operan Ex : +AB Bahasa pemrograman Infix postfix / prefix
INFIX, POSTFIX, PREFIX INFIX POSTFIX PREFIX A+B A+B+C A+B*C (A+B)*C A+B+C*D A+(B+C)*D AB+ AB+C+ ABC*+ AB+C* AB+CD*+ ABC+D*+ +AB ++ABC +A*BC *+ABC ++AB*CD +A*+BCD
Contoh A B+C*(D^E/(F-G)+H)-I Maks karakter : 25 Konversi ke POSTFIX Array A A - B + C * ( D ^ E / ( F - G ) + H ) - I \0 \0 \0 \0
STEP Siapkan Stack S[25] Telusuri isi array A ditemui \0 Jika Operand Cetak Jika kurung bua ( PUSH ke stack Jika Operator periksa Stack kosong TOP = -1 atau S*TOP+= ( Push Operator ke Stack Stack ada isinya (TOP >-1), isi stack paling atas S[TOP] bukan (, maka isi stack = operator pemeriksaan. Bandingkan nilai operator yang ada di stack dengan operator baru dibaca Operator di stack >= operator baru POP terus menerus dan cetak sampai ditemui ( atau operator nilainya lebih rendah dari operator baru atau isi stack habis PUSH Operator Baru
STEP Jika nilai operator baru > operator stack PUSH ke stack Jika isi stack ) POP isi stack satu persatu, sampai ditemui isi stack ( keluarkan ( dari stack. Demikian seterusnya sampai isi array = \0
Contoh A+(B+C)*D A + ( B + C ) * D \0 \0 \0 \0 \0 \0 No Kar dibaca Keterangan Isi Stack Hasil Cetak 0 A Operand A dicetak Masih kosong 1 + PUSH stack kosong + A 2 ( ( PUSH +( A 3 B Operand B dicetak +( AB 4 + + PUSH +(+ AB 5 C Operand C dicetak +(+ ABC 6 ) Cetak isi stack terbuag ) + ABC+ 7 * * PUSH * > + +* ABC+ 8 D Operand D dicetak +* ABC+D 9 \0 POP dan cetak semua isi stack Kosong ABC+D*+ A
Contoh A - B + C * ( D ^ E / ( F - G ) + H ) - I \0 \0 \0 \0 No Kar dibaca Keterangan Isi Stack Hasil Cetak 0 A Operand A dicetak Masih kosong 1 - PUSH stack kosong - A 2 B Operand B cetak - AB 3 + Periksa : - <= + - POP CETAK dan + PUSH A + AB- 4 C Operand C cetak + AB-C 5 * * PUSH * > + +* AB-C 6 ( ( PUSH +*( AB-C 7 D Operand D cetak +*( AB-CD 8 ^ ^ PUSH, karena S[TOP] = ( +*(^ AB-CD
DOUBLE STACK
Definisi Stack Ganda 2 stack dalam 1 array Stack1 dan Stack2 ALGORTIMA LIFO Stack1 dasar Nilai indeks terkecil Stack2 dasar Nilai indeks terbesar
Double Stack Stack1 Stack2 S[] -1 0 1 2 3 4 5 6 7 8 9 a a a b b b Nama Array : S[] TOP1 2 7 TOP2 TOP1 TOP2 X
KONSEP DOUBLE STACK
Proses Double Stack Konsep LIFO 5 proses Awal Inisialisasi PUSH PUSH1 STACK1 PUSH2 STACK2 POP POP1 STACK1 POP2 STACK2
Proses AWAL (Inisialisasi) Menyiapkan indeks penunjuk stack pertama kali TOP1 = -1 TOP2 = n Stack1 Stack2 S[] -1 0 1 2 3 4 5 6 7 8 9 10 TOP1-1 10 TOP1 TOP2 X TOP2
Proses PUSH1 Algoritma Periksa Stack penuh / tidak if (Top2 TOP1 > 1) Jika TRUE isi stack Operasi PUSH Top1 = Top1 + 1; S[Top1]=X;
Proses PUSH1 CONTOH Stack1 Isi X = 25 di PUSH ke Stack1 Stack2 S[] -1 0 1 2 3 4 5 6 7 8 9 25 10 TOP1-1 0 10 25 TOP1 TOP2 X TOP2 Stack bisa diisi? if (Top2 TOP1 > 1) if (10-(-1) > 1) Top1 = Top1+1 = -1+1 = 0 S[Top] = X
Proses PUSH2 Algoritma Periksa Stack penuh / tidak if (Top2 TOP1 > 1) Jika TRUE isi stack Operasi PUSH Top2 = Top2-1; S[Top2]=X;
Proses PUSH2 CONTOH Stack1 Isi X = 10 di PUSH ke Stack2 Stack2 S[] -1 0 1 2 3 4 5 6 7 8 9 25 10 10 TOP1 10 9 10 TOP2 X Stack bisa diisi? if (Top2 TOP1 > 1) 0 TOP1 if (10-0) > 1) if (10>1) TRUE Top2 = Top2-1 = 10-1=9 S[Top] = X S[9] = 10 TOP2
Proses POP1 Algoritma Periksa Stack ada isi atau tidak if (Top1 > -1) Jika TRUE ambil isi stack Operasi POP X=S[Top1]; Top1=Top1-1
Proses POP1 CONTOH Hapus 25 Stack1 Stack1 Stack2 S[] -1 0 1 2 3 4 5 6 7 8 9 25 10 10 TOP1-1 0 TOP1 Stack bisa dihapus? if (Top1 > -1) if (0 >- 1) TRUE 9 25 TOP2 X TOP2 X=S[Top1]; X=S[0]=25 Top1=Top1-1 Top1=0-1=-1
Proses POP2 Algoritma Periksa Stack ada isi atau tidak if (Top2 < n) Jika TRUE ambil isi stack Operasi POP X=S[Top2]; Top2=Top2+1
Proses POP2 CONTOH Hapus 10 Stack2 Stack1 Stack2 S[] -1 0 1 2 3 4 5 6 7 8 9 10 10 TOP1-1 TOP1 Stack bisa dihapus? if (Top2 < n) if (9 < 10) TRUE 910 10 TOP2 X TOP2 X=S[Top2]; X=S[9]=10 Top2=Top2+1 Top2=9+1=10
Contoh Sebutkan ciri-ciri untuk kondisi stack berikut: Semua lokasi penuh untuk stack 1 Semua lokasi penuh untuk stack 2 Misal n = 20, top 1 = 5, top 2 = 15, berapa lokasi yang masih bisa diisi?
HOME WORK Ada 2 buah stack SA int SA[20] dan SB int SB[20], dengan kondisi awal kosong. Penunjuk data paling atas untuk SA TOPA dan SB TOPB. Terdapat 10 data dengan urutan sebagai berikut: 12, 17, 5, 10, 15, 7, 25, 11, 22, 19 SOAL : Buat Algoritma dan gambarkan (ilustrasi stack) untuk menginput 10 data diatas satu per satu sesuai urutan dan menyimpannya kedalam stack SA sedemikian rupa sehingga isi stack SA urut nilai menaik. CATT : stack SB dapat digunakan jika perlu
Terima Kasih Desi Ramayanti, S.Kom, MT