STACK C++
A. Pengertian Stack
STACK adalah salah satu list linear dalam struktur data yang
digunakan untuk menyimpan dan mengambil data dengan konsep LIFO (Last In First
Out). Dimana dalam stack ini kumpulan data yang masuk diletakkan di atas data
yang lain. Dan berdasar konsep LIFO maka data yang terakhir kali disimpan dalam
stack akan menjadi data yang pertama kali diambil. Dalam prosesnya, untuk
memasukkan sebuah data ke dalam stack atau dengan kata lain ke bagian atas dari
sebuah tumpukan digunakan perintah push. Dan untuk memindahkan data dari tempat
tersebut digunakan perintah pop. Sedangkan dalam penyajiannya, stack bisa memakai
array atau linked list.
B. Operasi Pada Stack
a) Untuk mengimplementasikan program stack di C++ kita membutuhkan tiga method atau fungsi push(); untuk menambahkan data ke tumpukan, pop(); untuk me ngeluarkan data dari tumpukan dan printStack() untuk menampilkan data yang ada di tumpukan.
b) Selain tiga fungsi tersebut, kita akan membuat dua fungsi opsional untuk mengecek apakah tumpukan kosong isEmpty() dan tumpukan penuh isFull().
c) Untuk menyimpan data kita bisa menggunakan empty array dengan maksimum array yang nanti akan kita definisikan sebagai maksimum tumpukan.
d) Agar data tumpukannya terstruktur kita bisa menggunakan struct sehingga lebih mudah mengakses data top dan array datanya sendiri seperti sebuah object.
e) Karena ini adalah program konsole maka tentu kita juga akan membuat fungsi main().
Operasi utama pada stack yaitu push untuk menambahkan data ke dalam stack dan pop untuk mengeluarkan atau menghapus data dari stack.
1. Menambahkan Data Ke stack
Proses penambahan data ke dalam stack disebut operasi Push.
Langkah - langkah operasi push diantaranya.
a) Memeriksa apakah tumpukan(stack) penuh .
b) Jika tumpukan penuh, maka sudah tidak ada ruang untuk memasukkan data ke tumpukan, jadi cukup tampilkan pesan bahwa tumpukan sudah penuh.
c) Jika masih ada ruang, tambahkan satu nilai pada atas(top) tumpukan untuk menunjukkan ke ruang kosong selanjutny.
d) Menambahkan data dimana ruang kosong yang telah ditunjuk oleh top.
2. Menghapus Data dari stack
Mengambil data bersamaan dengan menghapus data dari stack disebut dengan operasi pop. Elemen pada stack tidak benar - benar terhapus hanya saja penunjuk ruang(top) di kurangi nilainya dengan satu. Tapi pada implementasi stack sendiri pop akan benar-benar menghapus datatersebut dari tumpukan.
Langkah - langkah operasi pop diantaranya.:
a) Memeriksa apakah tumpukan kosong.
b) Jika tumpukan kosong, maka sudah tidak ada lagi data untuk dihapus, maka cukup tampilkan pesan bahwa tumpukan kosong.
c) Jika masih ada data pada tumpukan, maka akses data yang paling atas (top)
d) kemudian mengurangi nilai penunjuk top.
c) Program Stack
a) Untuk
mengimplementasikan program stack di C++ kita membutuhkan tiga method
atau fungsi push(); untuk menambahkan data ke tumpukan, pop();
untuk me ngeluarkan data dari tumpukan dan printStack() untuk
menampilkan data yang ada di tumpukan.
b) Selain tiga fungsi
tersebut, kita akan membuat dua fungsi opsional untuk mengecek apakah tumpukan
kosong isEmpty() dan tumpukan penuh isFull().
c) Untuk menyimpan data
kita bisa menggunakan empty array dengan maksimum array yang nanti akan kita
definisikan sebagai maksimum tumpukan.
d) Agar data tumpukannya
terstruktur kita bisa menggunakan struct sehingga lebih mudah mengakses
data top dan array datanya sendiri seperti sebuah object.
e)
Karena ini adalah
program konsole maka tentu kita juga akan membuat fungsi main().
D. 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()
{
stackbaru.top = -1;
//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'*/
}
|
E. 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 :
o void
clear()
o void
print()
o void
pop()
o void
push(float dta)
o bool
isempty()
o 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 :
- Push Stuck
- Pop Stack
- Cetak stuck
REFERENSI:
http://piticom.blogspot.com/2015/06/pengertian-stack-fungsi-dasar-stack.html
http://www.nblognlife.com/2014/04/stack-pada-c.html
https://bekti.net/blog/implementasi-stack-di-cpp/
https://bekti.net/blog/implementasi-stack-di-cpp/
Komentar
Posting Komentar