Kamis, 03 Maret 2011

Stack ( Tumpukan )

Stack adalah strukur yang bersifat LIFO yang mana mempunyai pengertian bahwa yang masuk belakangan akan keluar duluan. Contohnya tumpukan batu bata, tumpukan buku di perpustakaan, dan tumpukan tisu hasil produksi rumah tangga.

Stack dapat diimplementasikan dengan menggunakan konsep Linked List. Bentuk dari

struct dari head untuk stack dapat digambarkan sebagai berikut:

Perbedaan mendasar antara stack dan Linked List adalah bahwa stack memiliki

operasi khusus untuk memanipulasi elemen dalam stack tersebut. Operasi yang

dimaksud dalam program C dapat diimplementasikan menjadi function. Operasi yang

dimaksud adalah:

    -     push(s) : menambah elemen stack yang baru dibagian atas stack.

    -     pop(s) : menghapus elemen dari stack yang berada dibagian paling atas.

    -     get(s) : membaca nilai elemen dari stack yang berada dibagian paling atas.

    -     isEmpty(s) : memeriksa apakah stack kosong atau tidak.

Kegunaan Stack

Stack biasa digunakan dalam mengontrol operasi dalam sebuah sistem operasi. Selain

itu stack juga merupakan algoritma yang baik yang dapat digunakan untuk membuat

phaser (membaca urutan operasi dari sebuah persamaan matematika).

Aplikasi Stack

Salah satu aplikasi stack adalah dalam mengevaluasi dan menghitung ekspresi

aritmatik. Sebagai contoh, bila kita ingin mencari nilai dari suatu ekspresi aritmatik

sederhana yang melibatkan perkalian, penjumlahan, pengurangan dan pembagian.

Eksepresi aritmatik berikut ini dikenal dengan susunan ekspresi infix:

15 * ( ( ( 3 - 2 ) * ( 4 + 10 ) ) / 7 )

membutuhkan penyimpanan hasil sebagian perhitungan. Misalnya, jika bagian 3 - 2

pada ekspresi di atas dihitung, maka kita harus menyimpan hasil pengurangan itu

yaitu 1 terlebih dahulu, dan kemudian menghitung ekspresi 4 + 1-. Dalam hal ini

stack sangat ideal untuk digunakan.

Sebelum kita menyelesaikan permasalahan di atas, mari kita coba menyederhanakan

ekspresi infix di atas menjadi dalam susunan ekspresi postfix. Ekspresi postfix adalah

ekspresi yang menempatkan operator setelah kedua operannya. Berikut ilustrasi dari

ekspresi infix 4 + 10 yang diubah menjadi ekspresi postfix.

Algoritma Mengubah Ekspresi Infix menjadi Postfix

Proses konversi ekspresi infix menjadi bentuk postfix selalu dimulai dari sebelah kiri

ekspresi aritmatik.

a)       Jika yang ditemukan adalah operan, maka cetak atau simpan

b)       Jika yang ditemukan adalah kurung buka maka abaikan.

c)       Jika yang ditemukan adalah operator maka push ke dalam stack.

d)       Jika yang ditemukan adalah kurung tutup maka pop stack, kemudian cetak  atau simpan nilainya.

e)       Jika ekspresi telah diperiksa semua tetapi ternyata stack belum kosong, pop semua

data dalam stack dan cetak atau simpan nilai yang di pop.

Algoritma Mengubah Ekspresi Infix menjadi Postfix

Proses konversi ekspresi infix menjadi bentuk postfix selalu dimulai dari sebelah kiri

ekspresi aritmatik.

1.         Jika yang ditemukan adalah operan, maka cetak atau simpan

2.        Jika yang ditemukan adalah kurung buka maka abaikan.

3.        Jika yang ditemukan adalah operator maka push ke dalam stack.

4.        Jika yang ditemukan adalah kurung tutup maka pop stack, kemudian cetak atau simpan nilainya.

5.        Jika ekspresi telah diperiksa semua tetapi ternyata stack belum kosong, pop semua data dalam stack dan cetak atau simpan nilai yang di pop.