Anda di halaman 1dari 13

Struktur Data

Pertemuan ke:

03 Fakultas
Sains dan Teknologi
Pemanfaatan Stack

Aditiya Hermawan, M.Kom

Program Studi Pembuka


Teknik Informatika
Daftar Pustaka

Akhir Presentasi
Manfaat Stack
• Salah satu pemanfaatan stack oleh Compiler adalah
untuk memeriksa kelengkapan kurung buka dan kurung
tutup suatu arithmetic statement.
• Contoh :
– Program yang menerim INPUT sebuah Arithmetic Statement
((A+B)*(C-D)). Kemudian periksa kurung buka dan kurung
tutup apakah saling berpasangan. Cetak BENAR bila tepat
saling berpasangan, atau cetak SALAH bila tidak tepat saling
berpasangan.

Kreativitas Membangkitkan 2
<@adt_lotu
Menu
Menu Akhiri >
Akhiri
Inovasi
s
Bila di input : Maka Cetak:
A+B*C–D/E BENAR
A + B * (C – D) / E BENAR
(A + B) * (C – D) / E BENAR
(A + B * (C – D) / E) BENAR
(A + B * (C – D) / E SALAH
(A + B) * C – D) / E SALAH
)A+B * (C – D / E SALAH

@adt_lotu Kreativitas Membangkitkan 3


< Menu
Menu Akhiri
Akhiri > Inovasi
s
Algoritma
• Telusuri karakter per karakter arithmetic statement sampai ketemu karakater NULL (‘\0’)
• Bila terbaca karakter kurung ‘(‘, maka simpan (PUSH) kurung buka tersebut ke dalam
stack.
• Bila terbaca kurung tutup ‘)‘, maka periksa isi stack.
– Bila stack ada isinya, maka keluarkan (POP) sebuah isi stack, yaitu sebuah kurung buka ‘(‘. Tapi
bila isi stack KOSONG berarti kung buka dan kurung tutup tidak berpasangan, maka cetak
perkataan “SALAH” dan proses selesai.
• Setelah semua karakter telah ditelusuri ditemui karakter NULL, maka periksa isi stack.
Bila isi stack KOSONG (Top= -1), berarti kurung buka dan kurung tutup telah tepat saling
berpasangan, maka cetak perkataan “BENAR” dan proses selesai.
• Bila isi stack masih ada (Top>-1), berari kurung buka lebih banyak dari kurung tutup
sehingga cetak perkataan “SALAH” dan proses selesai.

Kreativitas Membangkitkan 4
<@adt_lotu
Menu
Menu Akhiri >
Akhiri
Inovasi
s
Stack untuk Konversi Bentuk Arithmetic
• Dalam Operasi arithmetic terdapat istilah Operand dan
Operator.
• Bila terdapat sebuah arithmetic statement : A * (B + C)
– Maka A,B, dan C disebut Operand (yang dioperasikan)
– *, + disebut Operator (yang mengoperasikan)
– Kurung buka dan kurung tutup juga disebut operator, tapi
bukan operator yang mengoperasikan, tugasnya
menggelompokkan suatu hasil opersasi menjadi satu
kesatuan nilai. Sekaligus ikut mengatur urutan operasi.

Kreativitas Membangkitkan 5
<@adt_lotu
Menu
Menu Akhiri >
Akhiri
Inovasi
s
Notasi Arithmetic
• Terdapat 3 notasi operasi arithmetic yaitu Prefix, Infix dan Postfix.
INFIX POSTFIX PREFIX
A+B AB+ +AB
A+B+C AB+C+ ++ABC
A+B*C AB C*+ +A*BC
(A + B) * C AB+C* *+ABC
A +B + C * D AB+CD*+ ++AB*CD
A + (B + C) * D ABC+D*+ +A*+BCD

• INFIX -> Operator ada di dalam (IN) dua buah Operand


• POSTFIX -> Operator ada sesudah (Post) dua buah Operand
• PREFIX -> Operator ada sebelum (Pre) dua buah Operand
Kreativitas Membangkitkan 6
<@adt_lotu
Menu
Menu Akhiri >
Akhiri
Inovasi
s
Notasi Arithmetic
• Bentuk INFIX merupakan bentuk arithmetic yang kita gunakan
sehari-hari dalam persoalan aritmatika. Bentuk ini mungkin
menggunakan tanda kurung (buka dan tutup) untuk
mengelompokan suatu nilai sekaligus urutan operator.
• Bentu POSTFIX dan PREFIX merupakan bentuk yang
digunakan oleh computer. Bentuk Infix yang ditulis dalam
Bahasa pemrograman akan dikompilkasi menjadi bentuk
Postfix atau Prefix oleh compiler.
• Dalam bentuk Postfix dan Prefix sudah tidak menggunakan
kurung buka dan kurung tutup. Urutan pelaksanaan tegantung
letak operator dan operand.
Kreativitas Membangkitkan 7
<@adt_lotu
Menu
Menu Akhiri >
Akhiri
Inovasi
s
Stack dalam Program Konversi Arithmetic
• Susun program untuk menginput sebuah arithmetic
statement dan cetak hasil konversinya dalam bentuk
POSTFIX.
• Contoh : Bila diinput -> A - B + C * (D^E / (F-G) + H) - I
• Akan disimpan dalam array missal charA[26] sehingga A
Menjadi :
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
A - B + C * ( D ^ E / ( F - G ) + H ) - I \0

Kreativitas Membangkitkan 8
<@adt_lotu
Menu
Menu Akhiri >
Akhiri
Inovasi
s
Algortima
• Siapkan Stack misal dengan char S[26]
• Telusuri isi array A karakter per karakter sampai ditemui karakter NULL (‘\0’)
• Bila isinya Operand, maka langsung dicetak
• Bila isinya kurung buka ‘(‘, maka simpan (PUSH) kurung buka ke Stack.

Kreativitas Membangkitkan 9
<@adt_lotu
Menu
Menu Akhiri >
Akhiri
Inovasi
s
• Bila isinya Operator maka Periksa :
– Bila Stack masih kosong (Top = -1), atau Stack yang paling atas berisi kurung buka
(S[Top]==‘(’) maka simpan (PUSH) Operator tadi ke Stack.
– Bila Stack ada isinya, (Top>-1), dan isi stack yang paling atas (S[Top] bukan kurung buka
‘(‘, maka : isi stack pasti operator, sehingga lalukan pemeriksaan. Bandingkan nilai
Operator yang ada di stack dengan nilai operator yang baru dibaca.
– Bila nilai Operator di Stack >= dengan nilai operator baru, maka keluarkan terus menerus
dan cetak operator isi stack sampai ditemui isi stack = kurung buka ‘(‘ atau sampai ditemui
operator yang nilainya lebih rendah dari nilai operator baru, atau ditemui isi stack habis.
Kemudian simpan (PUSH) operator baru ke stack.
– Bila nilai operator baru lebih besar dari nilai operator yang ada distack, maka simpan
(PUSH) operator baru ke stack.
– Bila isinya kurung tutup ‘)’, maka keluarkan (POP) dan cetak isi stack satu per satu sampai
ditemuai isi stak = kurung buka ‘(‘. Setelah itu keluarkan isi stack yang berupa kurung buka
tersebut dari dalam stack.
– Demikian terus menerus sampai ditemui isi array A = ‘\0’ dan keluarkan serta cetak isi stack
satu persatu sampai isi stack habis.

@adt_lotu Kreativitas Membangkitkan 10


< Menu
Menu Akhiri
Akhiri > Inovasi
s
Bentuk Infix : A - B + C * (D ^ E)
Karakter Hasil yang dicetak Isi Stack Keterangan
yang dibaca
A A Kosong Operand A dicetak
- A - ‘-’ di Push karena stack Kosong
B AB - Operand B dicetak
+ AB- + ‘-’ keluar, ‘+’ masuk karena nilai ‘+’ <= nilai ‘-’
C AB-C + Operand C dicetak
* AB-C +* ‘*’ diPush karena nilai ‘*’ > nilai ‘+’
( AB-C +*( ‘(‘ langsung diPush
D AB-CD +*( Operand D dicetak
^ AB-CD +*(^ ‘^’ lasngung diPush karena S[Top] == ‘(’
E AB-CDE +*(^ Operand E dicetak
) AB-CDE^ +* Cetak semua isi Stack sampai terbuang ‘(‘
\0 AB-CDE^*+ - ‘*’ dan ‘+’ keluar.

@adt_lotu Kreativitas Membangkitkan 11


< Menu
Menu Akhiri
Akhiri > Inovasi
s
Latihan
1. Ubah bentuk Infix berikut ke dalam Postfix dengan
menggunakan Tabel diatas :
• A * (B-C) + (D/E)
• (A + B) - ((C+D) / E) * F
• A * ((B*C)-D) / (E * (F+G))

2. Buatlah Algoritma untuk merubah dari bentuk Infix ke


Prefix.

Kreativitas Membangkitkan 12
<@adt_lotu
Menu
Menu Akhiri >
Akhiri
Inovasi
s
Terima Kasih
Aditiya Hermawan, M.Kom

Anda mungkin juga menyukai