Stack Stack adalah salah satu bentuk list dimana penghapusan dan pemasukan elemen hanya dapat dilakukan pada satu posisi yaitu di posisi akhir list. Posisi ini disebut posisi puncak / top. Elemen pada posisi ini dinyatakan dengan TOP(S)
Stack Jika Stack S = [S1,S2,S3,…,ST], maka TOP(S) adalah ST. Banyaknya elemen dalam stack pada suatu saat tertentu dinyatakan dengan NOEL(S). Operasi pada stack: PUSH : pemasukan elemen data ke dalam stack POP : penghapusan elemen data pada
Stack Stack dalam keadaan hampa. S = [ ] NOEL(S) = 0 Contoh operasi pada stack S Stack dalam keadaan hampa. S = [ ] NOEL(S) = 0 TOP(S) = tidak terdefenisi S A Dimasukkan elemen A ke dalam stack S = [A] NOEL(S) = 1 TOP(S) = A
Stack Dimasukkan elemen B ke dalam stack S = [A,B] NOEL(S) = 2 TOP(S) = B S A B C Dimasukkan elemen C ke dalam stack S = [A,B,C] NOEL(S) = 3 TOP(S) = C
Stack Dikeluarkan satu elemen dari stack S = [A,B] NOEL(S) = 2 TOP(S) = B Dimasukkan 2 elemen D dan E ke dalam stack S = [A,B,D,E] NOEL(S) = 4 TOP(S) = E S E D B A
Stack Stack dalam Bahasa COBOL 01 STACK-STRUCT. 02 S PIC 9(5) OCCURS 100 TIMES. 02 TOP-PTR PIC 9(3).
Stack Stack dalam Bahasa PASCAL Type stackstruct = record stack:array[1..100] of integer; topptr:integer; end; Var S:stackstruct;
Stack Paragraf COBOL PUSH. IF TOP-PTR<NOEL-MAX THEN COMPUTE TOP-PTR = TOP-PTR + 1 MOVE EON TO S(TOP-PTR) ELSE overflow error. POP. IF TOP-PTR > 0 THEN MOVE S(TOP-PTR) TO EOF underflow error.
Stack Procedure PUSH(data:integer); Begin Prosedur Pascal Procedure PUSH(data:integer); Begin if (s.topptr<noelmax) then begin s.topptr:=s.topptr+1; s.stack[s.topptr]:=data; end Else write(‘overflow error’); End;
Stack Procedure POP(var data:integer); Begin if (s.topptr>0) then Prosedur Pascal Procedure POP(var data:integer); Begin if (s.topptr>0) then begin data:=s.stack[s.topptr] s.topptr:=s.topptr-1; end Else write(‘underflow error’); End;
Aplikasi Stack
STACK NOTASI POSTFIX Sebuah notasi matematis ditulis sebagai berikut: ((A+B)*C/D+E^F)/G Ini dikenal dengan notasi INFIX. Dengan bantuan STACK, kita dapat mengubah notasi INFIX tersebut menjadi notasi POSTFIX.
STACK Untuk operasi menjumlah, membagi, mengurangi, mengalikan ataupun memangkatkan, operator tampil diantara kedua operand. Misalnya operator + muncul diantara operand a dan b pada operasi a + b. Pada notasi postfix, kedua operand tampil bersama di depan operator, misalnya ab+. STACK bisa dimanfaatkan untuk mengkonversi notasi infix ke dalam notasi postfix.
STACK Algoritma konversi infix ke postfix: Jika simbol adalah ‘(‘ (kurung buka), maka simbol tersebut kita push ke dalam stack. Jika simbol adalah ‘)’ (kurung tutup), maka pop semua elemen stack sampai terakhir kali simbol ‘(‘ di push. Semua elemen tersebut menjadi output kecuali tanda kurung. Jika simbol adalah operand, maka simbol tersebut langsung menjadi output.
STACK 4. Jika simbol adalah sebuah operator, maka jika TOP stack adalah operator dengan level lebih tinggi atau sama, maka elemen TOP kita pop sekaligus keluar sebagai output dilanjutkan seperti ini sampai TOP merupakan ‘(‘ atau operator dengan level lebih rendah, kemudian operator di push ke dalam stack
STACK Sehingga dari notasi infix: ((A+B)*C/D+E^F)/G Simbol yang diproses ( A + B ) * C / D E ^ F G ; TOP STACK -------> OUTPUT ^+ Sehingga dari notasi infix: ((A+B)*C/D+E^F)/G Notasi postfixnya adalah: AB+C*D/EF^+G/
STACK Latihan: Ubah notasi infix berikut menjadi notasi postfix beserta tabel langkahnya. ((A+C^(B-D)/E*(F+G)/H)) (A-B+(C/D^E)*(F-G+H)/I)*J J*A^F/(C-D+B)/E*G-(H+I)-J