Struktur Data
Stack
Bayu Setiaji, S.Kom
STMIK AMIKOM YOGYAKARTA
Stack
1. Tujuan 1. Mamahami konsep stack 2. Memahami operasi dasar stack 3. Dapat mengaplikasikan stack dalam kasus nyata
2. Penjelasan Bab ini akan membahas konsep stack dan operasi – operasi yang terlibat di dalamnya. Kemudian diteruskan dengan studi kasus pembuatan program sederhana yang mengaplikasikan konsep stack.
3. Percobaan Stack dibuat menggunakan array dan sebuah variabel bertipe integer yang menunjukkan posisi puncak stack. Dalam stack terdapat beberapa fungsi untuk operasi dasar, yaitu push() dan pop(). Percobaan kali ini menerangkan stack dalam potongan – potongan kode program.
Langkah pertama adalah membuat array untuk stack. Dalam kode ini menggunakan asumsi bahwa stack digunakan untuk tipe data integer saja.
Kode 4.1 Deklarasi stack int stack[MAX]; int top;
// array stack // penunjuk posisi atas stack
Kemudian membuat fungsi push() untuk operasi memasukkan elemen baru ke dalam stack. Dalam fungsi ini terdapat pemeriksaan, bila nilai top sama dengan atau lebih dari MAX berarti stack sudah penuh.
Kode 4.2 Fungsi push() void push(int e) { if(top >= MAX) { printf("Stack penuh\n"); } else { stack[top] = e; top++; }
2|Page
Stack
}
Fungsi yang kedua adalah pop() yang digunakan untuk operasi mengeluarkan isi stack. Fungsi akan mengembalikan nilai stack paling atas. Dalam fungsi ini juga terdapat pemeriksaan bila nilai top sama dengan atau kurang dari 0 berarti stack kosong.
Kode 4.3 Fungsi pop() int pop(void) { if(top <= 0) { printf("Stack kosong\n"); return 0; } else { top--; return stack[top]; } }
Selain dua fungsi di atas bisa pula ditambahkan dengan fungsi show() untuk menampilkan isi stack dan fungsi menu() untuk menampilkan daftar menu pilihan.
Berikut ini adalah kode lengkap dari program untuk mendemokan stack dan operasi – operasinya.
Kode 4.4 program Demo Stack /* * program stack.c * demo operasi stack * * Bayu Setiaji 2010 * */ #include <stdio.h> #define MAX 20 int stack[MAX]; int top;
// array stack // penunjuk posisi atas stack
void push(int e); int pop(void); void show(void); int menu(void); int main(void) { int e; int m;
3|Page
Stack
top = 0;
// inisialisasi stack
do { m = menu(); switch(m) { case 1: printf("PUSH "); scanf("%d", &e); push(e); break; case 2: printf("POP %d\n", pop()); break; case 3: printf("Isi: "); show(); break; case 4: exit(0); } } while(m != 4); return 0; } /* * fungsi push * memasukkan elemen stack * */ void push(int e) { if(top >= MAX) { printf("Stack penuh\n"); } else { stack[top] = e; top++; } } /* * fungsi pop * mengeluarkan isi stack * */ int pop(void) { if(top <= 0) { printf("Stack kosong\n"); return 0; } else { top--; return stack[top]; } } /* * fungsi show * menampilkan isi stack
4|Page
Stack
* */ void show(void) { int i; if(top <= 0) { printf("Stack kosong\n"); } else { for(i = 0; i < top; i++) { printf("%d ", stack[i]); } printf("\n"); } } /* * fungsi menu * menampilkan menu pilihan * */ int menu(void) { int m; printf("Demo Stack\n"); printf("1. Push\n"); printf("2. Pop\n"); printf("3. Lihat\n"); printf("4. Keluar\n"); printf(": "); scanf("%d", &m); return m; }
Studi Kasus Fungsi – fungsi dalam stack bisa diimplementasikan untuk banyak hal. Salah satunya adalah program kalkulator postfix (ilustrasi terdapat di file slide.ppt) sederhana yang dapat melakukan operasi aritmatik. Berikut ini adalah kode lengkapnya.
Kode 4.5 program kalkulator /* * program calc.c * program kalkulator postfix sederhana 4 fungsi * mengimplementasikan stack * * Bayu Setiaji 2010 * */
5|Page
Stack
#include <stdio.h> #include <stdlib.h> #define MAX 5 int stack[MAX]; // stack int top; // posisi puncak stack void push(int i); int pop(void); int main(void) { int a, b; char s[80]; top = 0; system("cls"); printf("Kalkulator Sederhana\n"); printf("Tekan 'q' untuk keluar\n\n"); do { printf(": "); gets(s); switch(*s) { case '+': b = pop(); a = pop(); printf("= %d\n", a + b); push(a + b); break; case '-': b = pop(); a = pop(); printf("= %d\n", a - b); push(a - b); break; case '*': b = pop(); a = pop(); printf("= %d\n", a * b); push(b * a); break; case '/': b = pop(); a = pop(); if(b == 0) { printf("! pembagian dengan nol\n"); break; } printf("= %d\n", a / b); push(a / b);
6|Page
Stack
break; case '.': a = stack[top - 1]; printf("= nilai akhir [ %d ]\n", a); break; default: push(atoi(s)); } } while(*s != 'q'); return 0; } void push(int i) { if(top >= MAX) { printf("! stack penuh\n"); return; } stack[top] = i; top++; } int pop(void) { top--; if(top < 0) { printf("! stack kosong\n"); return 0; } return stack[top]; }
7|Page
Stack
4. Latihan 1. Dengan menggunakan fungsi push() dan pop() pada stack, buatlah program untuk membalik kalimat. 2. Modifikasilah program kalkulator postfix di atas sehingga menjadi program kalkulator infix (dikerjakan di rumah – dikumpulkan).
8|Page