You are on page 1of 8

TUGAS PRAKTIKUM ALGORITMA DAN STRUKTUR DATA “STACK DAN QUEUE”

NAMA NIM KELOMPOK NAMA ASISTEN

: MUH. HIDAYATULLAH : H11110282 : 1 MATH : 1. SUGIARTO COKROWIBOWO 2. SUPRI BIN HJ. AMIR 3. ZULFAJAR 4. NUR RAHMAH 5. SANTUO 6. MUH. SADNO 7. SAPRINA MAMASE

LABORATORIUM KOMPUTASI JURUSAN MATEMATIKA FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM UNIVERSITAS HASANUDDIN MAKASSAR 2011

Infix, Postfix dan Prefix
Dalam struktur data yang banyak dipelajari, kita ketahui adanya 3 notasi operasi yang dilakukan untuk suatu operasi aritmatika, yaitu prefix, infix, dan postfix. Notasi terbentuk dari operand dan operator. Operand adalah data atau nilai yang membantu dalam proses sedangkan operator adalah fungsi yang digunakan dalam proses.

Contoh : A+B*C 2+3*5 Keterangan : A, B, C, 2, 3, 5 adalah operand +, * adalah operator

Level/hirarkhi dari operator adalah sebagai berikut: 1. ^ (pangkat) 2. * (kali) atau / (bagi) 3. + (jumlah) atau – (kurang)

Seperti yang telah dibahas di awal, diketahui notasi pada struktur data terdiri atas 3 macam, yaitu :

1. Prefix : +XY Prefix yaitu notasi yang terbentuk atas operator dengan operand, dimana operator berada didepan operand. Contoh : A + B * C (Infix), maka notasi prefixnya adalah +A*BC

Pemecahannya : A + B * C

Diketahui ada 3 operand yaitu : A, B, C, dan 2 operator yaitu : +, *. Proses dimulai dengan melihat dari hirarkhi operator. Contoh diatas operator yang tertinggi adalah * kemudian +.

Tanda * diapit oleh dua operand yaitu B dan C yaitu B * C , prefixnya dengan menggabungkan operand dan memindahkan operator kedepan dari operand,sehingga fungsi B * C, notasi prefixnya menjadi *BC. Sehingga hasil sementara dari notasi prefix adalah A + *BC.

Selanjutnya mencari prefix untuk operator yang berikutnya, yaitu +, cara yang dilakukan sama seperti di atas, operator +, diapit oleh 2 operand, yaitu A dan *BC, gabungkan operand, sehingga menjadi A*BC, lalu pindahkan operator kedepan operand, sehingga hasil akhir menjadi + A * B C.

2. Infix : X+Y Infix yaitu notasi yang terbentuk atas operator dengan operand, dimana operator berada diantara operand. Notasi ini hanya dikenal oleh manusia dan selalu digunakan dalam perhitungan aritmatika. Contoh : A+B*C (A+B)*C A–(B+C)*D^E

3. Postfix : XY+ Postfix yaitu notasi yang terbentuk atas operator dengan operand, dimana operator berada dibelakang operand. Notasi ini hanya dikenal oleh processor dan dipahami dalam ALU. Contoh : A + B * C (Infix), maka notasi postfixnya adalah ABC*+

Pemecahannya : A + B * C

Diketahui ada 3 operand yaitu : A, B, C, dan 2 operator yaitu : +, *. Proses dimulai dengan melihat dari hirarkhi operator. Contoh diatas operator yang tertinggi adalah * kemudian +.

Tanda * diapit oleh dua operand yaitu B dan C yaitu B * C , postfixnya dengan menggabungkan operand B dan C menjadi BC lalu memindahkan operator ke belakang operand C, sehingga fungsi B * C, notasi postfixnya menjadi BC*. Sehingga hasil sementara dari notasi postfix adalah A + BC*.

Selanjutnya mencari postfix untuk operator yang berikutnya, yaitu +, cara yang dilakukan sama seperti di atas, operator +, diapit oleh 2 operand, yaitu A dan BC*, gabungkan operand tersebut, sehingga menjadi ABC*, lalu pindahkan operator + ke belakang operand ABC*, sehingga hasil akhir menjadi ABC*+. Dari 3 macam struktur data diatas, kita dapat melihat bahwa operan terjadi dalam urutan yang sama, dan hanya operator yang dipindahkan untuk menjaga makna yang benar. (Hal ini sangat penting bagi operator asimetris seperti pengurangan dan pembagian: A - B tidak berarti sama dengan B - A , yang pertama adalah setara dengan A B - atau - A B , yang kedua untuk B A atau - B A ). Contoh: Infiks Postfix Prefix Catatan kalikan A dan B, membagi C dengan D, menambahkan hasil.

A*B+C/D AB*CD/+ +*AB/CD

A * (B + C) / D A B C + * D / / * A + B C D

tambahkan B dan C, kalikan oleh A, membagi oleh D membagi C dengan D,

A * (B + C / D) A B C D / + * * A + B / C D

tambahkan B, kalikan oleh A

Konversi antara notasi Metode ini dimulai dengan memasukkan semua kurung implisit yang menunjukkan urutan misalnya evaluasi: Infiks ( (A * B) + (C / D) ) ((A * (B + C) ) / D) (A * (B + (C / D) ) ) Postfix ( (AB *) (CD /) +) ( (A (BC +) *) D /) (A (B (CD /) +) *) Prefix (+ (* AB) (/ CD) ) (/ (* A (+ BC) ) D) (* A (+ B (/ CD) ) )

Kita dapat mengkonversi secara langsung antara bentuk-bentuk tanda kurung hanya dengan menggerakkan operator dalam kurung misalnya (X + Y) atau (X Y +) atau (+ X Y) . Ulangi langkah ini untuk semua operator dalam sebuah ekspresi, dan akhirnya menghapus tanda kurung berlebihan. Kita dapat menggunakan trik serupa untuk mengkonversi ke dan dari pohon mengurai - setiap triplet kurung operator dan dua operand (atau sub-ekspresi) sesuai dengan node dari pohon. Pohon-pohon parse sesuai adalah:
/ / \ * D / \ A + / \ B C ((A*(B+C))/D) * / \ A + / \ B / / \ C D (A*(B+(C/D)))

+ / \ / \ * / / \ / \ A B C D ((A*B)+(C/D))

*Program Java : Program Stack* Syntax
import java.util.*; public class ProgramStack { static private int ukuran; static private int [] tumpukan; static private int top; static Scanner read=new Scanner (System.in); public static void push (int j) { if (top<=2){ tumpukan[top]=j; top++;} else { pop(); push (j);} } public static void pop () { for (int i=0; i<=1; i++){ tumpukan[i]=tumpukan[i+1];} top=2; }

public static void baca() { int i = top-1; System.out.println("Isi Stack Sekarang adalah"); while (i>=0) { System.out.print (tumpukan[i]); System.out.print (" "); i--; } System.out.println (" "); } public static void main(String[] args) { tumpukan =new int [3]; int i = ukuran ; push (69); push (95); push (83); push (81); push (77); push (60);

baca();

i--; }

}

Output

*Program Java : Mengubah notasi Infix ke Prefix* Syntax
import java.util. *; import java.io.*; public class ProgramInfix_to_Prefix { static Scanner read=new Scanner (System.in); public static String[] operators = {"+","","/","*","^"}; public ProgramInfix_to_Prefix() { } private static String inputData(){ BufferedReader bfr=new BufferedReader(new InputStreamReader(System.in)); String angkaInput=null; try { angkaInput = bfr.readLine(); } catch (IOException e){ e.printStackTrace(); } return angkaInput; }

public String convert(String infix) { StringBuffer sb = new StringBuffer(infix); int index = sb.length(); String operand = ""; int steps = 0; for (int i = 0; i < sb.length(); i++) { for (int x = 0; x < operators.length; x++) {

int tempIndex = sb.indexOf(operators[x], i); if (tempIndex < index && tempIndex >= 0) { index = tempIndex; operand = operators[x]; } } if (index == sb.length()) { break; } sb.delete(index, index + operand.length() + 1); for (int x = index - 1; x >= 0; x--) { if (sb.charAt(x) == '(' && steps == 0) { sb.insert(x, operand); break; } else if (sb.charAt(x) == '(') { steps--; } else if (sb.charAt(x) == ')') { steps++; } } i = index; index = sb.length(); } return sb.toString(); } public static void main(String[] args) { System.out.println("Masukkan Operan : "); String infix = inputData(); ProgramInfix_to_Prefix ConvertInfixToPrefix = new ProgramInfix_to_Prefix(); System.out.println(ConvertInfixToPrefix.convert(infix)); } }

Output