Stack
Pendahuluan Stack Tumpukan piring, tumpukan kertas, tumpukan batu, dlsb Dalam kehidupan sehari-hari sering kita menjumpai tumpukan Sifat tumpukan : satu elemen tumpukan dapat diambil bila tumpukan di atasnya dapat diambil
Pendahuluan Stack Elemen terakhir yang ditumpuk, yang akan diambil untuk yang pertama. Sifat ini disebut : LIFO Last In First Out Untuk tumpukan tertentu ada yang khusus elemen tumpukan hanya boleh diambil satu persatu
Pendahuluan Stack Pada dunia komputer, konsep tumpukan sering digunakan Sifat tumpukannya hanya boleh diambil satu per satu Contoh : Penanganan pemanggilan sub program saat pelaksanaan suatu program Evaluasi pernyataan aritmatika
Pendahuluan Stack Ada dua operasi dasar pada tumpukan : Tumpuk Ambil
Implementasi dengan larik Max. tumpukan atas tumpukan
Implementasi dengan larik def maksTumpukan : 20 Tumpukan : array[1 .. maksTumpukan] of string atas : integer edef
Operasi tumpuk data Operasi pertama : tumpuk data proc tumpuk {tumpuk data x pada tumpukan dan laporkan apakah penuh atau tidak} if atas == maksTumpukan then penuh = true else atas = atas + 1 tumpukan[atas] = x penuh = false eif eproc
Operasi ambil data Operasi ambil data proc Jumput(x, kosong) {ambil elemen teratas tumpukan lalu simpan pada x dan laporkan apakah kosong atau tidak} if atas == 0 then kosong = true else x = tumpukan[atas] atas = atas - 1 kosong = false eif eproc
Evaluasi Bentuk Postfix Suatu pernyataan aritmatika terdiri dari sejumlah operator dan operand Operator dapat terdiri dari : +, -, *, / dll Operand : bilangan atau variabel
Evaluasi Bentuk Postfix Setiap pernyataan aritmatika dapat dinyatakan dalam bentuk : Infix : 2 + 3 Prefix : 2 3 + Postfix : + 2 3
Evaluasi Bentuk Postfix 2 4 6 * + : akan menghasilkan nilai = 26 Algoritmanya : Ambil satu operator while ada operator do Operasikan terhadap dua operand disebelah kirinya, dan hasilnya membentuk operand baru Ambil operator berikutnya ewhile
Evaluasi Bentuk Postfix Kelompok aksara yang dianggap satu kesatuan disebut token Token : Operator Operand Tanda sama dengan merupakan akhir dari pernyataan
Evaluasi Bentuk Postfix Modul : Operasikan terhadap dua operand disebelah kirinya, dan hasilnya membentuk operand baru merupakan operasi pada tumpukan Setiap kali menemukan operand, ditumpuk pada tumpukan
Evaluasi Bentuk Postfix Modul : Pengoperasian dua operand disebelah kiri operator sama dengan pengoperasian dua operand teratas pada tumpukan. Hasilnya ditaruh lagi pada tumpukan. Hasil akhir dari pengevaluasian adalah elemen teratas pada tumpukan.
Pernyataan yang akan dikerjakan Isi Tumpukan Isi Tumpukan OP 1 OP 2 2 3 + = 3 + = 2 + = 2 3 = 2 3 = 2 3 = 5
Pernyataan yang akan dikerjakan Isi Tumpukan Isi Tumpukan OP 1 OP 2 2 4 6 * + = 4 6 * + = 2 6 * + = 2 4 * + = 2 4 6 + = 2 4 6 + = 2 2 4 6 + = 2 24 = 2 24 = 2 24 = 26
Pernyataan yang akan dikerjakan Isi Tumpukan Isi Tumpukan OP 1 OP 2 2 4 + 6 * 15 3 -/= 4 + 6 * 15 3 -/= 2 + 6 * 15 3 -/= 2 4 4 6 * 15 3 -/= 2 4 6 * 15 3 -/= 2 6 * 15 3 -/= 6 * 15 3 -/= 6 6 15 3 -/= 6 6 15 3 -/= 6 6 15 3 -/= 36
Pernyataan yang akan dikerjakan Isi Tumpukan Isi Tumpukan OP 1 OP 2 3 -/= 36 15 -/= 36 15 3 3 /= 36 15 15 3 /= 36 /= 36 12 = 36 12 = 36 12 = 3
Algoritma Global AmbilToken (token, operand, operator) while token < > tandaSamaDengan do if token = simbolOperand then Tumpuk (operand, penuh) else (token adalah operator) Jumput (op1, kosong) Jumput (op2, kosong)
Algoritma Global Tumpuk (Evaluasi (op2, op1, operator), tumpukan) Eif AmbilToken(token, operand, operator) ewhile
Pengembangan Algoritma prog EvaluasiPostfix () read(pernyataan) AmbilToken (token, operand, operator) while token < > tandaSamaDengan do case token of
Pengembangan Algoritma simbolOperand: Tumpuk (operand, penuh) If penuh then Henti(‘Pernyataan terlalu panjang’)
Pengembangan Algoritma simbolOperator: Jumput(op1, kosong) if kosong then Henti (‘Kurang operand’) Jumput (op2, kosong) Tumpuk (Evaluasi (op2, op1, operator), penuh)
Pengembangan Algoritma SimbolAbsah: Henti (‘Aksara tidak dikenal) SimbolKosong: (‘Pernyataan tidak lengkap’) ecase AmbilToken (token, operand, operator) ewhile
Pengembangan Algoritma {Periksa keadaan akhir tumpukan dan tuliskan hasilnya} case atas of 0: write (‘Pernyataan kosong’) 1: write (tumpukan[atas]) else write (‘Kurang Operator’) ecase eprog
Deskripsi masing-masing modul AmbilToken (token, operand, operator): Mengambil satu token Token dapat berupa : Simbol operand Simbol operator Tanda sama dengan Aksara absah Simbol Kosong
Deskripsi masing-masing modul AmbilToken (token, operand, operator): Simbol operand variabel operand Simbol operator variabel operator
Deskripsi masing-masing modul Tumpuk (operand, penuh) Menaruh operand pada tumpukan Melaporkan tumpukan penuh/tidak Penuh variabel penuh benar Bila tidak variabel penuh salah
Deskripsi masing-masing modul Henti (pesan): Menghentikan program sambil memperagakan pesan
Deskripsi masing-masing modul Jumput (x, kosong) : Ambil operand dari tumpukan Simpan dalam variabel x Melaporkan apakah tumpukan kosong? Kosong variabel kosong benar Isi variabel kosong salah
Deskripsi masing-masing modul Evaluasi (op1, op2, operator) Mengembalikan hasil evaluasi operand op1 dengan operand op2 menggunakan operator
Algoritma Base-Conversion Mengkonversi nilai basis 10 ke basis 2
Algoritma Base-Conversion Stack of Remainders Computation Output 13 R 2 26 6 R 1 2 13 1
3 R 2 6 1 1 R 1 2 3 1 1
R 1 2 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1