9.1. Pendahuluan
Struktur data Stack atau Tumpukan sering dijumpai dalam kehidupan sehari-hari,
yaitu berupa tumpukan koin, tumpukan buku dan sejenisnya (lihat gambar 9.1). Misalnya ada
sebuah tumpukan koin. Jika seseorang memerlukan koin maka dia akan mengambil koin yang
paling atas, akibatnya tumpukan koin akan berkurang. Dan sebaliknya jika seseorang
menambahkan koin ke tumpukan, maka koin tersebut akan diletakkan di atas tumpukan yang
sudah ada, dan tumpukan koin bertambah tinggi.
Dengan melihat perilaku tumpukan seperti di atas, maka struktur data Stack dapat
didefinisikan sebagai struktur data List yang mempunyai karakteristik khusus, yaitu
penambahan dan penghapusan elemen hanya dapat dilakukan di satu ujung, yang disebut Top
of Stack (lihat gambar 9.2). Penambahan elemen mengakibatkan Stack bertambah panjang dan
sebaliknya penghapusan elemen mengakibatkan Stack menjadi lebih pendek. Dengan
karakteristik ini, Struktur data Stack mempunyai sifat Last In First Out (LIFO), yaitu elemen
yang terakhir masuk ke Stack adalah elemen yang paling dulu keluar dari Stack.
Top of Stack
Bottom of Stack
Gambar 9.2 Ilustrasi struktur data Stack
Dalam sistem komputer, struktur data Stack digunakan untuk menyimpan alamat
statement ketika memanggil fungsi sehingga ketika fungsi selesai dieksekusi maka program
akan kembali ke statement yang memanggil fungsi. Untuk jelasnya dapat dilihat pada gambar
call tree dari proses pemanggilan fungsi rekursif (gambar 1.1 sampai gambar 1.4).
(g) Pop(S) 5 5 5
0 1 2 3 4 ........... maxIndex
Array S:
Top of Stack
Untuk menanggulangi jika terjadi kondisi stack penuh, maka implementasi stack
dengan array, perlu ditambahkan suatu fungsi isFull untuk mencegah penambahan elemen ke
dalam stack yang sudah penuh. Fungsi-fungsi yang didefinisikan untuk struktur data stack:
1. Inisialisasi Stack(n): membuat array linier yang kosong untuk stack
n = 100 [Diasumsikan banyaknya elemen stack = 100]
integer Stack[n] [Diasumsikan elemen stack bertipe integer]
Tos = 0
Else
{ Tos = Tos-1
Temp = S[Tos]
Return(Temp) }
}
Pada ekspresi aritmetika yang cukup kompleks dengan beberapa pasang tanda kurung
kadang membuat penulis lupa atau salah menuliskan pasangan tanda kurung. Untuk memeriksa
apakah ekspresi aritmetika mempunyai pasangan tanda kurung yang sesuai maka ekspresi
aritmetika tersebut dibaca (scan) mulai dari awal sampai akhir. Stack digunakan untuk
menyimpan (push) semua tanda kurung buka yang dibaca dan mengeluarkannya (pop) setiap
kali membaca tanda kurung tutup. Bandingkan tanda kurung buka yang keluar (pop) dari stack
dengan tanda kurung tutup yang ditemui. Jika kedua tanda kurung itu merupakan pasangan
maka sesuai. Jika bukan berupa pasangan, maka tidak sesuai, berarti ada kesalahan dalam
menuliskan tanda kurung tersebut.
Seperti telah dijelaskan sebelumnya, penggunaan banyak tanda kurung dapat menjadi
sumber kesalahan dalam penulisan ekspresi. Untuk mengatasi masalah ini, seorang
matematikawan dari Polandia, Jan Lukaseiwicz, menemukan metoda penulisan ekspresi yang
disebut sebagai Reverse Polish Notation atau postfix yang tidak menggunakan tanda kurung.
Caranya dengan menuliskan operator setelah kedua operan, atau L R O yaitu Left operand,
Right operand, Operator. Sebagai contoh penulisan postfix dan padanan infix-nya dapat dilihat
pada tabel 9.1 di halaman berikut.
Untuk mengubah ekspresi infix menjadi postfix, digunakan struktur data stack sebagai
tempat penyimpan sementara. Algoritma umum untuk mengubah Infix menjadi Postfix:
1. Buat stack kosong
2. Baca simbol sampai akhir ekspresi.
3. Jika simbol berupa:
a. Operan: langsung tuliskan sebagai output
b. Kurung buka: push ke stack
c. Kurung tutup: pop stack sampai ketemu kurung buka (tanda kurung tidak ditulis sebagai
outpush)
d. Operator yang derajatnya lebih rendah dari TOP of Stack: pop stack sampai ketemu
operator yang derajatnya lebih rendah, lalu push ke stack:
e. Operator yang derajatnya lebih tinggi dari Top of Stack: push ke stack
f. Akhir simbol: pop stack sampai stack kosong.
i. R = pop(stack); L = pop(stack)
ii. lakukan operasi, push hasilnya ke stack
4. Hasil ekspresi = pop Stack.
5. Jika stack tidak kosong, tampilkan error message.
Sebagai latihan, evaluasi ekspresi postfix pada tabel 8.1 di atas jika diketahui:
A = 1, B = 2, C= 3. D = 4, dan E = -2.
2. Buat notasi Infix – Postfix untuk persamaan berikut ini, gambarkan prosesnya dengan stack.
a. (a + b * (c / (d- e))) + f / g
b. (a + B – c) * ( d – e/ (f + g))
c. a – b * (c+d)/ (e –f) + g
d. a * (b – c) + d ^ e / f * g