Stack
(Tumpukan) Pada C++
A. Pengertian Stack
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.
B. Operasi Pada Stack
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.
1.
Memeriksa apakah tumpukan(stack) penuh
2.
Jika tumpukan penuh, maka sudah tidak ada ruang untuk memasukkan data ke
tumpukan, jadi cukup tampilkan pesan bahwa tumpukan sudah penuh.
3.
Jika masih ada ruang, tambahkan satu nilai pada atas(
top
) tumpukan untuk
menunjukkan ke ruang kosong selanjutnya
4.
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 data tersebut dari tumpukan.
Langkah
- langkah operasi pop diantaranya.:
1.
Memeriksa apakah tumpukan kosong.
2.
Jika tumpukan kosong, maka sudah tidak ada lagi data untuk dihapus, maka cukup
tampilkan pesan bahwa tumpukan kosong.
3.
Jika masih ada data pada tumpukan, maka akses data yang paling atas (
top
)
4.
kemudian mengurangi nilai penunjuk
top
.C. Program Stack
1. 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.
2. Selain
tiga fungsi tersebut, kita akan membuat dua fungsi opsional untuk mengecek
apakah tumpukan kosong
isEmpty()
dan tumpukan
penuh isFull()
.
3. Untuk
menyimpan data kita bisa menggunakan empty array dengan maksimum array yang
nanti akan kita definisikan sebagai maksimum tumpukan.
4. Agar
data tumpukannya terstruktur kita bisa menggunakan struct sehingga lebih mudah
mengakses data
top
dan array datanya sendiri seperti
sebuah object.
5. 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 :
o Push
Stuck
o
Pop Stack
o
Cetak stuck
REFERENSI:
Tidak ada komentar:
Posting Komentar