Bab 4 membahas algoritma Stack yang merupakan struktur data LIFO dimana elemen terakhir yang dimasukkan akan menjadi elemen pertama yang diambil. Dibahas pula operasi dasar Stack seperti push, pop, dan print serta contoh penerapannya dalam kalkulator postfix.
1 of 7
Downloaded 48 times
More Related Content
Stack tumpukan
1. BAB 4
STACK (TUMPUKAN)
1. Tujuan Instruksional Umum
a. Mahasiswa mampu melakukan perancangan aplikasi menggunakan Struktur
Stact (tumpukan)
b. Mahasiswa mampu melakukan analisis pada algoritma Stack yang dibuat
c. Mahasiswa mampu mengimplementasikan algoritma Stack pada sebuah aplikasi
secara tepat dan efisien
2. Tujuan Instruksional Khusus
a. Mahasiswa mampu menjelaskan mengenai algoritma Stack
b. Mahasiswa mampu membuat dan mendeklarasikan struktur algoritma Stack
c. Mahasiswa mampu menerapkan dan mengimplementasikan algoritma Stack
Pengertian Stack
Stack atau tumpukan adalah suatu stuktur data yang penting dalam
pemrograman, bersifat LIFO (Last In First Out) dimana benda yang terakhir masuk ke
dalam stack akan menjadi benda pertama yang dikeluarkan dari stack. Contohnya,
karena kita menumpuk Compo di posisi terakhir, maka Compo akan menjadi elemen
teratas dalam tumpukan. Sebaliknya, karena kita menumpuk Televisi pada saat pertama
kali, maka elemen Televisi menjadi elemen terbawah dari tumpukan. Dan jika kita
mengambil elemen dari tumpukan, maka secara otomatis akan terambil elemen
teratas, yaitu Compo juga.
Operasi-operasi/fungsi Stack
Push : digunakan untuk menambah item pada stack pada tumpukan paling atas
pop : digunakan untuk mengambil item pada stack pada tumpukan paling atas
Clear : digunakan untuk mengosongkan stack
IsEmpty : fungsi yang digunakan untuk mengecek apakah stack sudah kosong
IsFull : fungsi yang digunakan untuk mengecek apakah stack sudah penuh
Stack dengan struktur array
1. Mendefinisikan Stack dengan menggunakan struct
2. Mendefinisikan MAX_STACK untuk maksimum isi stack
3. Membuatlah variabel array data sebagai implementasi stack secara nyata
4. Mendeklarasikan operasi-operasi/function di atas dan buat implemetasinya
Deklarasi STACK dengan struct dan array data
2. typedef struct STACK{
int top;
char data[10][10];
//misalkan : data adalah array of string
//berjumlah 10 data, masing-masing string
//menampung maksimal 10 karakter
};
Deklarasi/buat variabel dari struct
STACK tumpuk;
Deklarasi MAX_STACK
#define MAX_STACK 10
//hati-hati mulai dari 0 jadi 0-9
Inisialisasi Stack
Pada mulanya isi top dengan -1, karena array dalam C dimulai dari 0, yang
berarti stack adalah KOSONG! Top adalah suatu variabel penanda dalam STACK
yang menunjukkan elemen teratas Stack sekarang. Top Of Stack akan selalu
bergerak hingga mencapai MAX of STACK sehingga menyebabkan stack PENUH!
Ilustrasi stack pada saat inisialisasi:
Gambar 1 Inisialisasi Stack
Fungsi IsFull
Untuk memeriksa apakah stack sudah penuh? Dengan cara memeriksa top
of stack, jika sudah sama dengan MAX_STACK-1 maka full, jika belum (masih
lebih kecil dari MAX_STACK-1) maka belum full.
3. Gambar 2. Ilustrasi Fungsi IsFull
Fungsi Push
Untuk memasukkan elemen ke stack, selalu menjadi elemen teratas stack.
Tambah satu (increment) nilai top of stack terlebih dahulu setiap kali ada penambahan
elemen stack, asalkan stack masih belum penuh, kemudian isikan nilai baru ke stack
berdasarkan indeks top of stack setelah ditambah satu (diincrement)
Gambar 3. Ilustrasi dan sintaks fungsi Push
4. Fungsi Pop
Untuk mengambil elemen teratas dari stack.Ambil dahulu nilai elemen teratas
stack dengan mengakses top of stack, tampilkan nilai yang akan diambil terlebih dahulu,
baru didecrement nilai top of stack sehingga jumlah elemen stack berkurang.
Gambar 4. Ilustrasi fungsi POP
Sintaks program fungsi POP
Fungsi Print
Untuk menampilkan semua elemen-elemen stack. Dengan cara looping semua
nilai array secara terbalik, karena kita harus mengakses dari indeks array tertinggi
terlebih dahulu baru ke indeks yang kecil!
5. Gambar 5. Ilustrasi fungsi Print
Sintaks program fungsi Print:
void TampilStack(){
for(int i=tumpuk.top;i>=0;i--){
printf("Data : %sn",tumpuk.data[i]);
}
}
STUDI KASUS
Pembuatan Kalkulator SCIENTIFIC, misalkan operasi: 3 + 2 * 5 Operasi di atas
disebut notasi infiks, notasi infiks tersebut harus diubah lebih dahulu menjadi notas
postfix 3 + 2 * 5 notasi postfiksnya adalah 2 5 * 3 +. Kemudian diimplementasikan
stack sebagai berikut: Stack Soal (dalam bentuk postfiks) dan Stack Hasil (masih
kosong):
Gambar 6 Ilustrasi kalkulator SCIENTIFIC
Algoritma Pop Stack Soal:
1. Jika berupa operand, maka masukkan ke Stack Hasil
2. Jika berupa operator, maka:
6. a. Pop nilai pertama dari Stack Hasil
b. Pop nilai kedua dari Stack Hasil
c. Lakukan operasi sesuai dengan operator yang didapat.
Misalnya untuk contoh di atas:
Gambar 7 Ilustrasi algoritma pop 5 dan 2 pada stack
Operator * di pop dari Stack Soal, pop Stack Hasil dua kali, yaitu 5 dan 2
kemudian, simpan 5 ke dalam variabel misalnya a, dan 2 ke dalam variabel misalnya b.
Lalu lakukan operasi sesuai dengan operatornya, b <operator> a. Jadi b * a, yaitu 2 * 5
kemudian hasilnya disimpan lagi ke dalam StackHasil
Gambar 8. Ilustrasialgoritma pop 3 dan 8 pada stack
Kemudian lakukan langkah yang sama, sampai selesai.
Pada contoh: operator + dipop dari Stack Soal, pop Stack Hasil dua kali, yaitu 3,
disimpan pada variabel a, dan 2, disimpan pada variabel b. Kemudian lakukan operasi
sesuai dengan operatornya, b <operator> a. Jadi b + a, yaitu 8 + 3 = 11.
Contoh, cara lain:
Penghitungan: ((1 + 2) * 4) + 3 dapat ditulis berurut ke bawah secara postfix dengan
keuntungan tanpa preseden pada aturan dan pokok masalahnya:
1 2 + 4 * 3 +
persamaan di masukan dari kiri ke kanan menggunakan stack:
1. push operand yang dihtung dan
2. pop two operand dan nilai hasil operasi penghitungan.
3. push hasil penghitungan
dengan langkah seperti diilustrasikan berikut ini
7. Hasil akhir, 15 dan tinggalkan pada top stack dan selesai menghitung