Oleh :
Dahlan Susilo
Contoh :
1. File, dengan elemennya berupa record
2. Buku telepon
3. Stack
4. Queue
5. Linear link list
Definisi STACK
Suatu struktur data yang seolah-olah
terlihat seperti data yang tersusun secara
‘menumpuk’, dimana ada data yang
terletak di atas data yang lainnya.
OPERASI STACK
Bersifat LIFO (Last In First Out), berarti data yang
masuk terakhir akan keluar pertama.
Operasi pada Stack :
IsFull : mengecek apakah STACK sudah penuh
IsEmpty : mengecek apakah STACK sudah kosong
Init : mengaktifkan STACK
Push : menambah data pada STACK
Pop : mengambil data pada STACK
Print : mencetak STACK
Clear : mengosongkan STACK
KONDISI SINGLE STACK
• Kondisi Stack ditentukan oleh posisi atau
isi TOP.
Kondisi Stack Posisi TOP
KOSONG Top = -1
PENUH Top = n-1
BISA DIISI Top < n-1
ADA ISINYA Top > -1
PENGGUNAN STACK
• History pada web browser.
• Undo Log pada text editor.
• Pemrosesan struktur bersarang (nested) :
loop, rekursi, fungsi, dll.
• Algoritma back tracking – Artificial
Intelegence
• Dari gambar di samping
kita bisa mengatakan
bahwa kotak B ada di atas
D kotak A dan ada di bawah
C kotak C.
• Gambar di samping
B menunjukkan bahwa dalam
tumpukan, kita hanya bisa
A menambah atau
mengambil sebuah kotak
lewat satu ujung, yaitu
ujung bagian atas
• Gambar dibawah hanya menunjukkan dalam tumpukan hanya
bisa menambah atau mengambil sebuah kotak lewat satu
ujung, yaitu ujung bagian atas
Stack S
STACK WITH ARRAY
• Definisikan Stack dengan menggunakan
suatu struct
• Definisikan konstanta MAX_STACK untuk
menyimpan maksimum isi stack
• Elemen struct Stack adalah array data dan
top untuk menadakan posisi data teratas
• Buatlah variabel tumpuk sebagai
implementasi dari struct Stack
• Deklarasikan operasi-operasi/function di
atas dan buat implemetasinya
PROGRAM STACK
• Contoh deklarasi MAX_STACK
#define MAX_STACK 10
• Contoh deklarasi STACK dengan struct dan
array data
typedef struct STACK{
int top;
int data[10];
int status
};
• Deklarasi/buat variabel dari struct
STACK tumpuk;
Program Stack (2)
Inisialisasi Stack
• Pada mulanya isi top dengan -1, karena array dalam
bahasa C dimulai dari 0, yang berarti bahwa data stack
adalah KOSONG!
• Top adalah suatu variabel penanda dalam Stack yang
menunjukkan elemen teratas data Stack sekarang.
• Top Of Stack akan selalu bergerak hingga mencapai
MAX of STACK yang menyebabkan stack PENUH!
• Status diisi TRUE
Inisialisasi stack
9 Max_Stack
8
7
6
5
4
3
2
1
0 Top = -1
Status=1
Ilustrasi Stack pada saat inisialisasi!
Operasi Push adalah menambah elemen kedalam
stack S, dimana penambahan dapat dilakukan jika
stack itu belum penuh.
Stack dikatakan penuh Jika posisi Top sudah
berada pada posisi n
(If s.top = n then stack penuh)
Push( x,s) adalah Memasukkan x kedalam
Stack S
Push(x,s)
stack s
Push(x,s)
stack s
Push(x,s)
stack s
Push(x,s)
Procedure Push(x :Tipe
data, s : stack)
If s.top< n then
s.top = s.top + 1 top = 2
s.isi[s.top] = x
Else
stack sudah
penuh
endif Stack s
Push(x,s)
s.isi[s.top] = k
Else
stack sudah penuh
endif
stack s
Push(x,s)
stack s
Push(x,s)
stack s
Push(x,s)
top = 5
Procedure Pop( s:
stack)
If s.atas>0 then
Write s.isi[s.atas]
s.atas= s.atas – 1
Else
stack kosong
Endif stack s
Pop(s)
If s.atas>0 then
Write s.isi[s.atas]
s.atas= s.atas – 1
Else
stack kosong
Endif
stack s
Pop(s)
Procedure Pop( s:
stack) atas = 3
If s.atas>0 then
Write s.isi[s.atas]
s.atas= s.atas – 1
Else
stack kosong
Endif stack s
Pop(s)
Contoh :
1. Infix (A+B)*C^D/E-F+G
2. Infix (A+B*C)*(D+E)/F*G
Algoritma Mengubah Ekspresi Infix menjadi Postfix
11. Selanjutnya kita temukan bilangan 10 (operan) maka aturan nomor 1 harus
dikerjakan yaitu mencetak angka 10 ke layar.
15*(((3-2)*(4+10))/7)
12. Kemudian tanda kurung tutup ) kita temukan sehingga aturan ke 4 harus
dikerjakan yaitu pop stack dan cetak data paling atas stack (operator +) ke layar.
13. Satu lagi tanda kurung tutup ) kita temukan, sehingga aturan ke 4 dikerjakan.
15*(((3-2)*(4+10))/7)
14. Proses kita lanjutkan, dan kita menemukan operator / maka aturan ke 3
dikerjakan, yaitu push operator tersebut ke dalam stack.
17. Karena ekspresi sudah diperiksa semua sementara stack masih belum kosong maka
aturan ke 5 harus di kerjakan yaitu pop semua data dalam stack dan cetak ke layar.
Algoritma Menghitung Nilai
Ekspresi Postfix
• Untuk menghitung nilai ekspresi aritmatik, maka ekspresi infix
harus diubah terlebih dahulu menjadi bentuk ekspresi postfix.
• Berikut algoritma untuk menghitung nilai ekspresi postfix:
1. Jika yang ditemukan adalah operan, maka push operan
tersebut ke dalam stack.
2. Jika yang ditemukan adalah operator, pop stack dua kali
dan hitung menggunakan nilai yang di pop dan operator
yang dijumpai.
Hasil perhitungan ini kemudian di push kembali ke dalam
stack.
3. Jika ekspresi telah diperiksa semua maka nilai yang di pop
terakhir dari stack adalah jawaban dari ekspresi aritmatik
tersebut.
Algoritma Menghitung Nilai
Ekspresi Postfix
• Perhatikan contoh berikut.
( 3 - 2 ) * ( 4 + 10 )
A = 15 x ----------------------------
7
1. Dimulai dari sebelah kiri, ditemukan pertama sekali adalah nilai 15 (operan)
maka aturan nomor 1 dijalankan, yaitu push nilai tersebut ke dalam stack.
Note: Urutan perhitungan harus 3 – 2 bukan 2 – 3 atau data yang kedua yang di
pop di kurang data yang pertama sekali di pop dari stack.
15 3 2 - 4 10 + * 7 / *
6. Selanjutnya ditemukan operan dengan nilai 10, maka kembali aturan nomor 1
dikerjakan lagi, yaitu push nilai tersebut ke dalam stack.
15 3 2 - 4 10 + * 7 / *
7. Proses dilanjutkan lagi, dan sekarang ditemukan operator + oleh karena itu
aturan nomor 2 harus dikerjakan. pop stack dua kali dan hitung menggunakan
nilai yang di pop dan operator yang dijumpai. Hasil perhitungan ini kemudian
di push kembali ke dalam stack.
15 3 2 - 4 10 + * 7 / *
8. Kemudian kita temukan lagi operator * oleh karena itu aturan nomor 2
dikerjakan. pop stack dua kali dan hitung menggunakan nilai yang di pop
dan operator yang dijumpai. Hasil perhitungan ini kemudian di push kembali
ke dalam stack.
15 3 2 - 4 10 + * 7 / *
9. Proses kita lanjutkan lagi, dan sekarang kita temukan operator / oleh karena
itu aturan nomor 2 harus dikerjakan. pop stack dua kali dan hitung
menggunakan nilai yang di pop dan operator yang dijumpai. Hasil
perhitungan ini kemudian di push kembali ke dalam stack.
15 3 2 - 4 10 + * 7 / *
10. Kemudian kita temukan operator * oleh karena itu aturan nomor 2
dikerjakan lagi.
Karena ekspresi postfix telah diperiksa semua dan bila data dalam stack
sudah di pop maka nilai 30 diperoleh, maka dapat disimpulkan bahwa
ekspresi infix:
15 * ( ( ( 3 - 2 ) * ( 4 + 10 ) ) / 7 ) = 30
( A + B ) / (( C – D ) * E ^ F)
notasi postfix A B + C D – E F ^ */
SELESAI
TUGAS
• Tuliskan Stuktur Data STACK dengan
kasus yang anda tentukan sendiri!
• Struktur Data terdiri atas:
– Spesifikasi
– Implementasi
– Pemrograman