Algoritma dan Struktur Data Pertemuan 12 Penggunaan Stack
Penggunaan Stack Matching Balancing Parenthesis Mengevaluasi ekspresi postfix Mengubah Infix ke postfix
Matching Balancing Parenthesis Apakah pasangan ‘(‘ dan ‘)’ pada kode berikut sudah sesuai? Tunjukkan pasangan ‘)’ dari setiap ‘(’ sum((attribut - repmat(particleElements, 1, size(attribut, 2))).^2 .* repmat(weight', 1, size(attribut, 2)), 1);
Matching Balancing Parenthesis Memeriksa sintaks yang terdiri atas ‘(‘ dan ‘)’. Sebuah ‘(‘ harus berpasangan dengan ‘)’, jika tidak maka illegal. ( )( ), ( ( ( ) ) ), ( ( ( ) ) ( ) ) legal ( ( ) (, ) ( ) ( ilegal Apakah menghitung banyaknya ‘(‘ dan ‘)’ cukup?
Matching Balancing Parenthesis Insights sintaks dibaca dari kiri ke kanan. Sebuah ‘)’ dicocokkan dengan ‘(‘ sebelah kiri terdekat yang tidak memiliki pasangan Contoh : ( ( ( ) ) ( ) )
Matching Balancing Parenthesis Misalnya kita memiliki sebuah ‘)’. Bagaimana kita mengetahui ‘(’ sebelah kiri terdekat dan belum punya pasangan?
Matching Balancing Parenthesis Jika ekspresi dibaca dari kiri ke kanan, MOST RECENTLY UNMATCHED ‘(’ is cancelled dengan ‘)’. Bagaimana menyimpan MOST RECENTLY READ (LAST) ‘(’ ? (Masalah : masih banyak ‘(’ yang menunggu pasangan. Struktur data apa yang dapat mencatat item ‘(‘ terakhir yang tidak memiliki pasangan ? Stack LIFO structure
Matching Balancing Parenthesis Ketika menemui ‘(‘, push ke stack stack. Ketika menemui ‘)’, pop ‘(‘ dari stack stack. ‘(‘ berpasangan dengan ‘)’. Bagaimana jika stack empty ketika menemui ‘)’? Bagaimana jika seluruh ekspresi selesai dibaca namun stack tidak kosong?
Mengubah Infix ke Postfix Infix expression Misalnya Sebuah persamaan hanya memiliki ‘*’ dan ‘+’. ‘*’ memiliki higher precedence dari ‘+’. 5+2+3 = 10, 1+2*4=9, etc. Persamaan juga dapat memiliki parenthesis, i.e., (1+2)*4=12 (1+2*5+1)*3=36. (1+2*(5+1))*3=39.
Mengubah Infix ke Postfix Postfix expression 1 3 + 1 2 4 * + 1 2 + 4 * 6 5 2 3 + 8 * + 3 + * Tidak ada ‘(‘, ‘)’ pada ekspresi postfix. Untuk mengevaluasi postfix kita membutuhkan stack.
Mengubah Infix ke Postfix Mengevaluasi postfix expression. Baca persamaan dari kiri ke kanan. Ketika bertemu bilangan, push ke stack. Ketika bertemu operator, pop dua bilangan dari stack. Hasilnya di push kembali ke stack.
Mengubah Infix ke Postfix Example : 6 5 2 3 + 8 * + 3 + *
Infix to Postfix Expressions Bagaimana mengubah infix expression ke postfix expression? Gunakan stack. Baca infix expression dari kiri ke kanan. Ketika bertemu operand (bilangan), ditulis. Jika bertemu operator, pop stack (dan tuliskan hasil popnya) sampai operator yang memiliki lower precedence atau ‘(‘ berada di top stack. Kemudian push operator tersebut ke stack.
Infix to Postfix Expressions Bagaimana mengubah infix expression ke postfix expression? Gunakan stack. Baca infix expression dari kiri ke kanan. Jika bertemu ‘(‘, push ke stack. Jika bertemu ‘)‘, pop stack dan tuliskan hasilnya sampai bertemu ‘(’. Kemudian poplah ‘(’ (jangan ditulis). Jika ekspresi telah berakhir, pop stack (dan tulis hasilnya) hingga stack kosong.
Infix to Postfix Expressions Example : (1+2*(5+1))*3 postfix expression 1 2 5 1 + * + 3 *