M.Kom
• Stack ( Tumpukan ) dapat diartikan sbg :
Suatu kumpulan data yang seolah-olah ada data yg
diletakkan diatas data yg lain, yg bisa menyisipkan (
menambah ) data serta mengambil ( menghapus data ).
• Cara penggambaran stack :
A
D
C Top
B
Bottom
A
2
5 Pop ( S )
Push ( S, A )
A
D
Push ( S, D )
B Push ( S, C B Push ( S, C
3 6
A ) Push ( S, B A ) Push ( S, B
C C
) )
Karakteristik Stack
• Stack diimplementasikan dengan struktur data array atau linked list.
• Mengikuti prinsip operasi Last In First Out, yaitu elemen yang dimasukkan
pertama akan muncul terakhir dan sebaliknya.
• Penyisipan dan penghapusan terjadi di satu ujung yaitu dari atas
tumpukan.
• Apabila ruang memori yang dialokasikan untuk struktur data stack sudah
penuh namun masih dilakukan operasi penyisipan eledmen maka akan
terjadi stack overflow
• Apabila struktur data tidak memiliki elemen data atau kosong, namun
tetap dilakukan operasi penghapusan maka akan terjadi stack underflow
Underflow & Overflow
• Stack underflow, yaitu keadaan dimana kita mencoba mengakses
atau menghapus elemen data pada stack yang kosong
• Stack overflow, yaitu keadaan di mana ruang memori yang
dialokasikan untuk struktur data stack sudah penuh namun masih
dilakukan operasi penyisipan elemen
Operasi-operasi Dasar pada Stack
• Push: Menyisipkan elemen ke bagian atas stack
• Pop: Menghapus elemen atas dari stack
• IsEmpty: Memeriksa apakah stack kosong
• IsFull: Memerika apakah stack sudah penuh
• Peek: Mendapatkan nilai elemen teratas tanpa menghapusnya
• Penyajian awal Stack :
Dalam Tipe data program ada type data terstruktur yg disebut
ARRAY (LARIK). Dapat digunakan untuk menyajikan sebuah
tumpukan. Tapi penyajian dg menggunakan ARRAY adalah
kurang tepat karena banyaknya elemen dalam array adalah
statis.
Sedangkan dalam tumpukan, banyaknya elemen dapat
bervariasi (dinamis).
Meskipun demikian, ARRAY dapat digunakan untuk
menyajikan sebuah tumpukan demgan anggapan bahwa
banyaknya elemen max dari tumpukan tsb tidak akan
melebihi batas max banyaknya elemen dalam array.
Contoh
Subtitusikanlah operator berikut dengan
notasi prefix dan notasi postfix :
1. (A + B) x (C –(D ^ E))
Algorithma Konversi dari Infix ke Postfix
• Langkah 0 ( Awal )
- Baca ungkapan dalam notasi infix, misalnya = S
- Tentukan panjang ungkapan tersebut, misalnya N karakter - Siapkan
sebuah tumpukan kosong & siapkan derajad masing2 operator, misalnya
:
^ pangkat = bernilai 3
x , / = bernilai 2
+ , - = bernilai 1
) , ( = bernilai 0
• Langkah 1
Dimulai dari I=1 sampai N, kerjakan langkah2 berikut
a. R = S [ I ]
b. Test nilai R, jika R adalah :
operand : langsung ditulis
kurung buka : push ke dalam tumpukan
kurung tutup : pop dan tulis semua isi tumpukan sampai ujung
tumpukan = ‘(‘. Pop juga tanda ‘(‘ ini, tapi tidak
usah ditulis.
operator : jika tumpukan kosong, atau derajad R
lebih tinggi dibanding derajad ujung
tumpukan, push operator ke dalam
tumpukan. Jika tidak, pop ujung
tumpukan da tulis, kemudian ulangi
pembandingan R ujung tumpukan.
Kemudian R di push.
• Langkah 2
Jika akhir notasi infix telah tercapai, dan tumpukan masih
belum kosong, pop semua isi tumpukan dan tulis hasilnya.
1. ( A + B ) x ( C – D ) → N = 11 karakter
+ +(
Proses ke B A
Isi Stack
1 Karakter AB
tercatat
2
3 (
4 B
Karakter dibaca
(R) Notasi
Postfix
terbentuk
( A
A
5 8 ) C- Kosong *
6 9 * D) (*
7 10 11 (
+
-(* D- AB+CD
* AB+C AB+CD
* C AB+ AB+CD-*
Kosong
2. (A + B) * (C – D) ^ E → N = 13 karakter
+ +(
Proses ke B A
Isi Stack
1 Karakter AB
tercatat
2
3 (
4 B
Karakter dibaca
(R) Notasi
Postfix
terbentuk
( A
A
5 8 * D)
6 9 12 13 (
7 10 11 ) C- ^
E Kosong ^ AB+CD-*
Kosong * D-
(* Kosong * AB+C AB+CD-*E
+ AB+CD-*E^
-(* E^ AB+CD
AB+ AB+CD
* C
• Cara Substitusi : Infix Postfix ( A x B ) x ( C – D ) 1.
A*B 1. AB*
12
3 1. A + B * C – D ^ E
2. C-D 2. CD 3. 1*2 3. 12* 4.
AB*CD-*
LATIHAN :
2. (A * B) – ( C + D ) / ( E * ( F – G ))
Algorithma Konversi dari Infix ke Prefix
• Langkah 0 ( Awal )
- Baca ungkapan dalam notasi infix, misalnya = S
- Tentukan panjang ungkapan tersebut, misalnya N karakter - Siapkan
sebuah tumpukan kosong & siapkan derajad masing2 operator, misalnya
:
$ pangkat = bernilai 3
x , / = bernilai 2
+ , - = bernilai 1
) , ( = bernilai 0
• Langkah1
Dimulai dari I=N sampai 1, kerjakan langkah2 berikut
a. R = S [ I ]
b. Test nilai R, jika R adalah :
operand : langsung ditulis & simpan ke var T
kurung tutup : push ke dalam tumpukan
kurung buka : pop dan tulis semua isi tumpukan sampai ujung
tumpukan = ‘)‘. Pop juga tanda ‘)‘ ini, tapi tidak
usah ditulis.
operator : jika tumpukan kosong, atau derajad R
lebih tinggi atau sama dibanding
derajad ujung tumpukan, push
operator ke dalam tumpukan. Jika
tidak, pop ujung tumpukan dan tulis
disimpan ke var T, kemudian ulangi
pembandingan R ujung tumpukan.
Kemudian R di push.
• Langkah2
Jika akhir notasi infix telah tercapai, dan tumpukan masih
belum kosong, pop semua isi tumpukan dan tulis hasilnya,
kemudian simpan ke var T.
• Langkah 3
Baca data dalam variabel T, dimulai dari N sampai 1 dan tulis
ke dalam notasi prefix.
•( A + B ) x ( C – D ) → N = 11 karakter
tercatat terbentuk B+
Pro ses ke A(
1 ) Kosong *
2 )*
3
4 C +)*
Karakter 5
dibaca ( R )
D Isi Variabel T ( 6
-) Notasi Postfix ) 7 *
Kosong
) 8 -
D D 9
- 10 11 12 13
C DC ( B
Isi Stack Notasi Prefix *
Karakter )
DC DC-BA+*
A+ DC-BA *+AB-CD
* DC-B DC-BA+
Tugas mandiri