Stack pada C++
By
Unknown
—
Sabtu, 26 April 2014
—
Struktur Data
Contoh Program Stack pada C++ |
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.
Konsep Stack pada C++ |
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'*/
}
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 :
Push stack (5,6,7)
PROGRAM STACK
=============
Menu :
1. Pop stack
2. Push stack
3. Cetak
4. Bersihkan stack
5. Exit
Menu pilihan Anda : 2
Tambah Data
-----------
Data yang akan disimpan di stack : 5
PROGRAM STACK
=============
Menu :
1. Pop stack
2. Push stack
3. Cetak
4. Bersihkan stack
5. Exit
Menu pilihan Anda : 2
Tambah Data
-----------
Data yang akan disimpan di stack : 6
PROGRAM STACK
=============
Menu :
1. Pop stack
2. Push stack
3. Cetak
4. Bersihkan stack
5. Exit
Menu pilihan Anda : 2
Tambah Data
-----------
Data yang akan disimpan di stack : 7
Pop stack
PROGRAM STACK
=============
Menu :
1. Pop stack
2. Push stack
3. Cetak
4. Bersihkan stack
5. Exit
Menu pilihan Anda : 1
Data yang terambil : 7
Cetak stack
PROGRAM STACK
=============
Menu :
1. Pop stack
2. Push stack
3. Cetak
4. Bersihkan stack
5. Exit
Menu pilihan Anda : 3
Data yang terdapat dalam stack :
--------------------------------
5 6
Ulang ? (y/t)
[RS]
Klik Like & Share jika postingan ini bermanfaat
Apa tanggapan Anda?
Berikan tanggapan Anda melalui kolom komentar yang telah disediakan.
- Gunakan bahasa yang sopan;
- Saat menjadikan postingan pada blog ini sebagai referensi, jangan lupa mencantumkan sumbernya (link dari blog ini).
Jika blog ini bermanfaat jangan lupa memberikan 'like' atau 'share' untuk mendapatkan update terbaru.
Terima kasih