Stack adalah sebuah kumpulan data dimana data yang diletakkan di atas data yang lain. Dengan demikian stack adalah struktur data yang menggunakan konsep LIFO(Last In First Out). Dengan demikian, elemen terakhir yang disimpan dalam stack menjadi elemen pertama yang diambil. Dalam proses komputasi, untuk meletakkan sebuah elemen pada bagian atas dari stack, maka dilakukan operasi push. Dan untuk memindahkan dari tempat yang atas tersebut, maka dilakukan operasi pop.
Syntax program:
//header file
#include <iostream>
#include <conio.h>
#define maxstack 5
using namespace std; //untuk melegalkan header iostream
//pendeklarasian struct
struct STACK
{
int top;
float data[4];
};
float dta;
/*struct yang telah dibuat (STACK) dijadikan suatu Tipe data, dimana disebut tipe data abstrak*/
struct STACK stackbaru;
//fungsi boolean untuk mengetahui apakah stack penuh
bool isfull()
{
if(stackbaru.top == maxstack)
return true;
else
return false;
}
//fungsi boolean untuk mengetahui apakah stack kosong
bool isempty()
{
if(stackbaru.top == -1)
return true;
else
return false;
}
//fungsi untuk menambahkan data pada stack
void push(float dta)
{
if(isfull() == true) /*panggil fungsi isempty(), jika kondisi benar pernyataan dijalankan*/
{
puts("Maaf, stack penuh");
}
else{
stackbaru.top++;
stackbaru.data[stackbaru.top]=dta;
}
}
//fungsi untuk mengambil data pada stack
void pop()
{
if(isempty() == true) //panggil fungsi isempty(), jika kondisi benar pernyataan dijalankan
{
cout<<"Data telah kosong!";
}
else
{
cout<<"Data yang terambil : " <<stackbaru.data[stackbaru.top]<<endl;
stackbaru.top--;
}
}
//fungsi untuk mencetak data pada stack
void print()
{
printf("\nData yang terdapat dalam stack : \n");
printf("--------------------------------\n");
for(int i=0; i<=stackbaru.top; i++)
{
cout<<stackbaru.data[i]<<" ";
}
}
//fungsi untuk membersihkan data dalam stack
void clear()
{
stackbaru.top = -1;
printf("\nSekarang stack kosong");
}
//fungsi utama
int main()
{
//pendeklarasian variabel
char menu;
char ulang;
//perulangan dengan do-while
do
{
system("cls");
printf("\t PROGRAM STACK\n");
printf("\t===============\n");
printf("Menu : ");
puts("\n1. Pop stack");
puts("2. Push stack");
puts("3. Cetak");
puts("4. Bersihkan stack");
puts("5. Exit");
cout<<"Menu pilihan Anda : ";
cin>>menu;
if(menu == '1')
{
pop(); //panggil fungsi pop()
ulang = 'y';
getch();
}
else if(menu == '2')
{
cout<<"\nTambah Data";
cout<<"\n-----------";
cout<<"\nData yang akan disimpan di stack : ";
cin>>dta;
push(dta); /*panggil fungsi push(dta)--dta sesuai dengan data ynag diinput*/
ulang = 'y';
}
else if(menu == '3')
{
print(); /*panggil fungsi untuk mencetak data dalam stack*/
cout<<"\n\nUlang ? (y/t)";
cin>>ulang;
}
else if(menu == '4')
{
clear(); //panggil fungsi untuk membersihkan stack
cout<<"\n\nUlang ? (y/t)";
cin>>ulang;
}
else if(menu == '5')
{
exit(0); //keluar dari program
}
}while(ulang == 'Y' || ulang == 'y'); /*akan selalu diulang ketika ulang == 'y' || ulang'Y'*/
}
Penjelasan dan Algoritma:
1) Pada awalnya dibuat sebuah struct ‘struct STACK’, kemudian struct stack dijadikan menjadi sebuah tipe data dari variabel stackbaru. Dan beberapa prototype fungsi diantaranya :
· void clear()
· void print()
· void pop()
· void push(float dta)
· bool isempty()
· bool isfull()
2) Masuk ke fungsi main, deklarasikan variabel. Kemudian masuk ke perulangan do-while dengan kondisi ketika ulang == ‘y’ || ulang ‘Y’.Pada perulangan ini akan ditampilkan beberapa menu pilihan yang dapat dipilih oleh user :
printf("Menu : ");
puts("\n1. Pop stack");
puts("2. Push stack");
puts("3. Cetak");
puts("4. Bersihkan stack");
puts("5. Exit");
/*note = puts(put string), kegunaannya sama dengan printf ataupun cout, hanya saja yang dicetak hanyalah berupa STRING.*/
3) Jika input user== ‘1’ maka program akan menjalankan seluruh pernyataan yang ada pada kondisi pertama, pop(); //panggil fungsi pop()
Fungsi POP :
void pop()
{
if(isempty() == true) //panggil fungsi isempty(), jika kondisi benar pernyataan dijalankan
{
cout<<"Data telah kosong!";
}
else
{
cout<<"Data yang terambil : " <<stackbaru.data[stackbaru.top]<<endl;
stackbaru.top--;
}
}
Pertama kali yang akan dilakukan program adalah mengecheck apakah stack dalam keadaan kosong, jika benar maka akan tercetak string pada layar “Data telah kosong!" . Jika bernilai false maka data pada posisi teratas akan diambil, dan kemudian nilai stackbaru.top didecrement sehingga posisi teratas pada stack berganti dengan data dibawah top sebelumnya.
ulang = 'y';
Setelah fungsi pop() dijalankan, selanjutnya variabel ulang disetel dengan Nilai ‘y’ Sehingga setelah memilih menu pop() program akan secara otomatis mengulangi prosesnya.
getch(); //akan meminta input dari keyboard sehingga akan menghentikan
program sementara sampai adanya input keyboard.
4) Jika input user == ‘2’, maka pernyataan yang berada di dalam kondisi ke dua akan dijalankan. Saat masuk dalam pernyataan pada kondisi kedua maka akan tercetak String pada layar dan kemudian user diminta untuk mengisikan data yang akan ditambahkan dalam tumpukan stack.
cout<<"\nTambah Data";
cout<<"\n-----------";
cout<<"\nData yang akan disimpan di stack : ";
cin>>dta;
Data yang telah diinputkan disimpan dalam memori, dan digunakan untuk pemanggilan fungsi push(data).
push(dta); /*panggil fungsi push(dta)--dta sesuai dengan data ynag diinput*/
Fungsi PUSH :
void push(float dta)
{
if(isfull() == true) /*panggil fungsi isempty(), jika kondisi benar pernyataan dijalankan*/
{
puts("Maaf, stack penuh");
}
else{
stackbaru.top++;
stackbaru.data[stackbaru.top]=dta;
}
}
Pertama kali akan dicek apakah stack dalam keadaan penuh, jika true maka akan tercetak string pada layar “Maaf, stack penuh”. Jika bernilai salah maka stackbaru.top akan diincrement kemudian data yang tadi diinputkan ditambahkan pada stack.
ulang = 'y';
Setelah fungsi push() dijalankan, selanjutnya variabel ulang disetel dengan Nilai ‘y’ Sehingga setelah memilih menu push() program akan secara otomatis mengulangi prosesnya.
5) Jika input user==’3’, maka program akan menjalankan seluruh pernyataan yang berada di dalam kondisi ketiga.
print(); /*panggil fungsi untuk mencetak data dalam stack*/
Fungsi PRINT :
printf("\nData yang terdapat dalam stack : \n");
printf("--------------------------------\n");
for(int i=0; i<=stackbaru.top; i++)
{
cout<<stackbaru.data[i]<<" ";
}
Dengan memanfaatkan perulangan for, fungsi ini akan mencetak seluruh data yang berada di dalam stack.
cout<<"\n\nUlang ? (y/t)";
cin>>ulang;
Setelah data tercetak pada layar, selanjutnya akan ditampilkan string “Ulang ?(y/n)”. Jika input user adalah ‘y’ || ‘Y’ maka program akan dijalankan lagi mulai awal (diulang), tapi jika input user == ‘n’ ||’N’ maka akan keluar dari perulangan dan selanjutnya keluar dari program.
6) Jika Input user == ‘4’, maka seluruh pernyataan yang berada dalam kondisi keempat akan dijalankan.
clear(); //panggil fungsi untuk membersihkan stack
Fungsi CLEAR :
void clear()
{
stackbaru.top = -1;
printf("\nSekarang stack kosong");
}
Saat fungsi ini dipanggil maka posisi stackbaru.top diinisialisasi beraada pada -1. Seperti halnya mereset ulang suatu stack yang membuat isinya akan hilang.
cout<<"\n\nUlang ? (y/t)";
cin>>ulang;
Setelah data dalam stack dibersihkan, selanjutnya akan ditampilkan string “Ulang ?(y/n)”. Jika input user adalah ‘y’ || ‘Y’ maka program akan dijalankan lagi mulai awal (diulang), tapi jika input user == ‘n’ ||’N’ maka akan keluar dari perulangan dan selanjutnya keluar dari program.
7) Jika input user ==’5’ maka pernyataan yang berada pada kondisi kelima kan dijalankan
exit(0);
Pernyataan diatas digunakan untuk keluar dari program. Jadi jika kita memilih menu 5 maka kita akan keluar dari program.
***Penjelasan fungsi boolean isfull() dan bool isempty()***
//fungsi boolean untuk mengetahui apakah stack penuh
bool isfull()
{
if(stackbaru.top == maxstack)
return true;
else
return false;
}
Untuk mengetahui apakah suatu stack sedang penuh adalah dengan membandingkan stackbaru.top dengan maxstack, jika kondisi benar maka stack dalam posisi penuh, dan sebaliknya.
//fungsi boolean untuk mengetahui apakah stack kosong
bool isempty()
{
if(stackbaru.top == -1)
return true;
else
return false;
}
Untuk mengetahui apakah suatu stack dalam keadaan kosong adalah dengan membandingkan stackbaru.top dengan -1, jika kondisi benar maka stack dalam posisi kosong, dan sebaliknya.
OUTPUT :
[RS]
Tidak ada komentar:
Posting Komentar