1
MODUL 4 - STACK KONTIGU
I. Tujuan
1. Memahami konsep stack dan penggunaan array sebagai stack 2. Memahami operasi-operasi dasar stack
3. Mampu mengembangkan penggunaan stack dalam bahasa C
II. Dasar Teori
Tumpukan (stack) adalah tipe data yang dapat dianalogikan seperti tumpukan kertas yang berlapis-lapis. Untuk melakukan operasi pengubahan data (push dan pop), akses melalui ujung yang sama yang disebut dengan ujung atas tumpukan (top of stack). Oleh karena itu operasi pada stack dikenal bersifat LIFO (Last In First Out).
Operasi dasar pada tipe data stack antara lain:  Operasi penambahan data (push)
Data akan ditambahkan ke dalam stack sehingga data baru tersebut akan menempati urutan paling atas dari stack.
a b
b
a a
 Operasi pengambilan data (pop)
Data teratas dalam stack akan diambil dari stack. Bila ada n data, data pada tumpukan teratas adalah urutan ke-n, maka setelah dilakukan operasi pop data pada urutan ke-(n-1) akan menempati urutan paling atas.
b a
a
Pada modul ini akan digunakan array untuk mengimplementasikan stack, dimana jumlah elemen array ditentukan pada awal program dan tidak dapat ditambah maupun dikurangi di tengah program (array statis).
2 Sehingga jika hasil pemerikasaan dihasilkan bahwa stack dalam keadaan penuh maka proses push tidak boleh dilakukan. Begitu pula jika stack dalam keadaan kosong maka proses pop tidak boleh dilakukan.
III. Langkah Kerja
1. Demo
Ketiklah program di bawah ini, amati hasilnya dan pahami cara kerjanya
//file header.h #include <stdio.h> #include <conio.h> #include <stdlib.h> #define MAX_STACK 5
typedef int infotype;
typedef struct {
infotype top;
int content[MAX_STACK]; }Stack;
void init(Stack *S); /*
IS: input Stack
FS: Stack terinisialisasi kosong */
void push(Stack *S, int value); /*
IS: input Stack, mungkin kosong, mungkin penuh
FS: satu elemen baru di-push ke stack jika masih cukup, menampilkan peringatan jika stack penuh
*/
infotype pop(Stack *S); /*
IS: input Stack, mungkin kosong, mungkin penuh
FS: satu elemen di-pop dari stack jika tidak kosong,
menampilkan peringatan jika stack kosong */
void show(Stack S); /*
IS: input Stack, mungkin kosong, mungkin penuh FS: seluruh elemen stack ditampilkan
*/
//file function.c #include “header.h”
void init(Stack *S) {
3
void push(Stack *S, infotype value) {
if ((*S).top < (MAX_STACK – 1)) {
} else
}
(*S).top++;
(*S).content[(*S).top] = value;
printf(“\nStack sudah penuh!”);
infotype pop(Stack *S) {
infotype a;
if ((*S).top > -1) {
} else {
} }
a=(*S).content[(*S).top]; (*S).top--;
return a;
printf(“\nStack kosong!”); return 0;
void show(Stack S) {
if (S.top > -1) {
while (S.top != -1) {
} } else
printf(“\n %d”, S.content[S.top]); S.top--;
printf(“\nStack kosong!”); }
//file main.c
#include “header.h”
void main() {
Stack myStack; char pilih,a; infotype newVal;
init(&myStack);
do {
system(“cls”);
4
printf(“\n2. Pop”); printf(“\n3. Show All”); printf(“\n\nMasukkan pilihan: “); pilih = getch();
switch(pilih) {
case „1‟:
printf(“\nMasukkan nilai yang akan di-push: “); scanf(“%d”, &newVal);
push(&myStack,newVal); getch();
break;
case „2‟:
a=pop(&myStack);
printf(“\nNilai yang di-pop dari stack: %d”,a); getch();
break;
case „3‟:
show(myStack); getch();
break; }
}while (pilih != 27); }
Pisahkan file program di atas menjadi 3 file antara lain:
 File header: berisi deklarasi ADT, deklarasi fungsi dengan keterangan
kondisi awal dan akhir (header.h).
 File fungsi: berisi pendefinisian fungsi-fungsi yang akan dipanggil di
program utama/main (function.c).
 File utama: yang berisi badan program utama dan pemanggilan fungsi-fungsi
yang ada dalam file fungsi (main.c).