Stack (tumpukan) sebenarnya adalah sebuah cara dalam mengorganisasikan data-data yang dimiliki. Ibarat seseorang yang menyimpan buku-bukunya, ada yang disusun dengan cara ditumpuk, ada juga yang dijejerkan di dalam lemari. Kaidah utama dalam konsep stack adalah LIFO yang merupakan singkatan dari Last In First Out, artinya adalah data yang terakhir kali dimasukkan atau disimpan, maka data tersebut adalah yang pertama kali akan diakses atau dikeluarkan.
Operasi-operasi dasar dalam stack
Sebuah stack setidaknya memiliki lima buah operasi-operasi dasar, yakni:
a. Prosedur createEmpty
Prosedur ini berfungsi untuk mengosongkan stack dengan cara meletakkan TOP ke posisi
ke-0. Berikut adalah deklarasi prosedur createEmpty dalam Bahasa C:
void createEmpty()
{
tumpukan.TOP = 0;
}
b. Prosedur push
Prosedur ini berfungsi untuk memasukkan sebuah nilai/ data ke dalam stack. Sebelum
sebuah nilai/ data dimasukkan ke dalam stack, prosedur ini terlebih dahulu akan
menaikkan posisi TOP satu level ke atas. Misalkan kondisi stack masih kosong (TOP =
0), lalu prosedur push akan menaikkan posisi TOP satu level ke atas, yakni ke posisi 1
(TOP = 1), baru setelah itu data dimasukkan ke dalam array pada indeks ke-1 (yakni
indeks dimana TOP berada). Berikut adalah deklarasi prosedur push dalam Bahasa C:
void push(int x)
{
tumpukan.TOP = tumpukan.TOP + 1;
tumpukan.data[tumpukan.TOP] = x;
}
c. Prosedur pop
Prosedur ini berfungsi untuk mengeluarkan/ menghapus nilai terakhir (yang berada pada
posisi paling atas) dari stack, dengan cara menurunkan nilai TOP satu level ke bawah.
Misalkan TOP berada pada indeks ke-5, maka ketika akan mengeluarkan/ menghapus
data pada posisi paling atas (pada posisi TOP), prosedur ini akan menurunkan posisi TOP
ke indeks array ke-4. Berikut deklarasi prosedur pop dalam Bahasa C:
void pop()
{
tumpukan.TOP = tumpukan.TOP - 1;
}
d. Fungsi IsEmpty
Fungsi ini berfungsi untuk melakukan pengecekan terhadap stack, apakah stack tersebut kosong atau tidak. Jika stack tersebut kosong (artinya, TOP berada pada posisi 0), maka
fungsi akan mengembalikan nilai 1 (true), tetapi jika stack tersebut tidak kosong/ berisi
(artinya, TOP tidak berada pada posisi 0), maka fungsi akan mengembalikan nilai 0
(false). Berikut deklarasi fungsi IsEmpty dalam Bahasa C:
int IsEmpty()
{
if (tumpukan.TOP == 0)
return 1;
else
return 0;
}
e. Fungsi IsFull
Fungsi ini berfungsi untuk melakukan pengecekan terhadap stack, apakah stack tersebut penuh atau tidak. Jika stack tersebut penuh (artinya, TOP berada pada posisi MAX),
maka fungsi akan mengembalikan nilai 1 (true), tetapi jika stack tersebut tidak penuh
(artinya, TOP tidak berada pada posisi MAX), maka fungsi akan mengembalikan nilai 0
(false). Berikut deklarasi fungsi IsFull dalam Bahasa C:
int IsFull()
{
if (tumpukan.TOP == MAX)
return 1;
else
return 0;
}
Contoh STACK :
//program implementasi stack
#include
#include
#define max 5
typedef struct {
int top; //untuk mencacah indeks dari stack
int data[max+1];
}stack;
stack tumpukan;
void createEmpty();
int IsEmpty();
int IsFull();
void push(int x);
void pop();
void main(){
int lagi;
int input;
int pilih;
createEmpty();
pilih = 0;
while (pilih != 5){
//Menu utama
system("cls");
puts("=====================================");
puts(" MENU UTAMA");
puts("=====================================");
puts("1. Cek kondisi Stack");
puts("2. Tambah data");
puts("3. Keluarkan isi stack");
puts("4. Kosongkan stack");
puts("5. Keluar");
printf("Pilihan: ");
scanf("%d",&pilih);
switch(pilih){
case 1: if (IsEmpty() == 1)
puts("Stack masih kosong");
else if ((IsEmpty() == 0) && (IsFull() == 0))
puts("Stack sudah terisi, tapi belum penuh");
else
puts("Stack sudah penuh");
getch();
break;
case 2: if (IsFull() == 1)
puts("Stack sudah penuh.");
else
{
printf("Masukkan data: ");
scanf("%d",&input);
push(input);
printf("%d",tumpukan.top);
printf("%d",IsFull());
printf("%d",IsEmpty());
}
break;
6
case 3: while (IsEmpty() == 0)
{
printf("%d \n",tumpukan.data[tumpukan.top]);
pop();
}
getch();
break;
case 4: createEmpty();
puts("Stack sudah kosong. Top = 0");
getch();
break;
case 5: puts(“Byeee………”);
getch();
break;
}
}
}
//DEKLARASI OPERASI-OPERASI DASAR STACK
void createEmpty(){
tumpukan.top = 0;
}
int IsEmpty(){
if (tumpukan.top == 0)
return 1;
else
return 0;
}
int IsFull(){
if (tumpukan.top == max)
return 1;
else
return 0;
}
void push(int x){
tumpukan.top = tumpukan.top + 1;
tumpukan.data[tumpukan.top] = x;
}
void pop(){
tumpukan.top = tumpukan.top - 1;
}
#include
#include
#define max 5
typedef struct {
int top; //untuk mencacah indeks dari stack
int data[max+1];
}stack;
stack tumpukan;
void createEmpty();
int IsEmpty();
int IsFull();
void push(int x);
void pop();
void main(){
int lagi;
int input;
int pilih;
createEmpty();
pilih = 0;
while (pilih != 5){
//Menu utama
system("cls");
puts("=====================================");
puts(" MENU UTAMA");
puts("=====================================");
puts("1. Cek kondisi Stack");
puts("2. Tambah data");
puts("3. Keluarkan isi stack");
puts("4. Kosongkan stack");
puts("5. Keluar");
printf("Pilihan: ");
scanf("%d",&pilih);
switch(pilih){
case 1: if (IsEmpty() == 1)
puts("Stack masih kosong");
else if ((IsEmpty() == 0) && (IsFull() == 0))
puts("Stack sudah terisi, tapi belum penuh");
else
puts("Stack sudah penuh");
getch();
break;
case 2: if (IsFull() == 1)
puts("Stack sudah penuh.");
else
{
printf("Masukkan data: ");
scanf("%d",&input);
push(input);
printf("%d",tumpukan.top);
printf("%d",IsFull());
printf("%d",IsEmpty());
}
break;
6
case 3: while (IsEmpty() == 0)
{
printf("%d \n",tumpukan.data[tumpukan.top]);
pop();
}
getch();
break;
case 4: createEmpty();
puts("Stack sudah kosong. Top = 0");
getch();
break;
case 5: puts(“Byeee………”);
getch();
break;
}
}
}
//DEKLARASI OPERASI-OPERASI DASAR STACK
void createEmpty(){
tumpukan.top = 0;
}
int IsEmpty(){
if (tumpukan.top == 0)
return 1;
else
return 0;
}
int IsFull(){
if (tumpukan.top == max)
return 1;
else
return 0;
}
void push(int x){
tumpukan.top = tumpukan.top + 1;
tumpukan.data[tumpukan.top] = x;
}
void pop(){
tumpukan.top = tumpukan.top - 1;
}
0 komentar:
Posting Komentar