STACK
1.
Definisi Stack
Stack (tumpukan) merupakan sebuah cara dalam
mengorganisasikan data – data yang dimiliki. Stack digunakan sebagai
penyimpanan data didalam memori. Kaidah utama dalam stack adalah LIFO yang
merupakan singkatan dari Last In First Out, artinya adalah data yang terakhir
dimasukkan adalah data yang pertama kali akan diakses atau dikeluarkan.
2.
Deklarasi stack
Sebuah struktur data dari sebuah stack setidaknya
memiliki dua buah variabel, yaitu satu variabel yang akan digunakan sebagai
penanda bagian atas tumpukkan dan array data yang akan menyimpan data – data
yang dimasukkan kedalam stack. Berikut adalah syntax untuk
mendeklarasikan struktur data dari sebuah stack :
struct
nama_struct
{
int var1;
int var2[max]
}stack;
|
Contoh
:
struct
tumpukkan
{
int atas;
int isi[max]
}t;
|
Dimana,
nilai “max” didefinisikan sebagai jumlah tumpukan maksimum yang dapat disimpan
dalam stack. Stack didefinisikan dengan array berukuran max, berarti
benyaknya data yang dapat disimpan adalah sebanyak max yang nanti ditentukan
ukurannya.
3.Operasi
– operasi dasar dalam stack
A. createEmpty
Prosedur ini berfungsi untuk mengosongkan stack
dengan cara meletakkan variabel1 ke posisi 0. Pendeklarasiannya adalah sebagai
berikut :
Void
createEmpty ()
{
t.atas=0;
}
|
B. Push
Prosedur ini berfungsi untuk memasukkan nilai atau data
kedalam stack. pendeklarasiannya adalah sebagai berikut :
Void
push (int data)
{
t.atas++;
t.data[t.atas]=data;
}
|
C. Pop
Prosedur ini berfungsi untuk mengeluarkan/menghapus nilai
terakhir atau nilai yang berada paling atas didalam stack.
pendeklarasiannya adalah sebagai berikut:
void
pop()
{
t.atas = t.atas - 1;
}
|
D.
IsEmpty
Fungsi ini berfungsi untuk melakukan pengecekkan terhadap stack,
apakah stack tersebut kosong atau tidak. Jika stack kosong
artinya variabel atas pada posisi 0 atau stack tersebut tidak ada isinya
maka fungsi akan mengembalikan nila 1 (true), namun jika sebaliknya fungsi
akakn mengembalikan nilai 0 (false). Deklarasinya :
void
isEmpty ()
{ if (t.atas ==
0)
return 1;
else
return 0;
}
|
E. IsFull
Fungsi ini berfungsi untuk melakukan pengecekkan terhadap stack,
apakah stack tersebut penuh atau tidak. Jika stack penuh
yang berarti variabel atas salam posisi max), maka fungsi akan mengembalikan
nilai 1 (true), namun jika kebalikannya adakan mengembalikan nilai 0 (salah).
Deklarasinya adalah :
void IsFull()
{
if (t.atas == max)
return 1;
else
return 0;
}
|
4. Contoh
Program Implementasi Stack
Berikut adalah contoh kode program yang mengimplementasikan
konsep stack.
Contoh
1:
Pada
program ini, user disuguhi beberapa menu utama yang akan dipilih. Menu
pertama, “Cek kondisi stack” akan melakukan pengecekan terhadap kondisi stack.
Menu kedua, “Tambah data” akan melakukan pengisian sebuah nilai ke dalam stack.
Menu ketiga, “Keluarkan isi stack”, akan menampilkan semua isi stack dan
akan mengosongkan stack. Menu keempat, “Kosongkan stack”, akan melakukan
pengosongan stack, dan menu kelima, “Keluar”, akan menghentikan eksekusi
program (selesai menggunakan program).
Input
:
#include <iostream>
#include <stdlib.h>
#include<cstring>
#include<windows.h>
using namespace std;
struct tumpukan
{
int
top;
char
tmp[10][10];
}
tumpukan;
void push (char data[10]);
void pop();
void awal();
int isEmpty();
int isFull();
int main()
{
int
pilih;
char
data[10];
string i;
awal();
do
{
system("cls");
cout<<"==================================="<<endl;
cout<<"= CONTOH PROGRAM TUMPUKAN (STACK) ="<<endl;
cout<<"==================================="<<endl<<endl;
cout<<"=====Program Tumpukan Kijang======="<<endl;
cout<<" 1.
PUSH
="<<endl;
cout<<" 2.
POP
="<<endl;
cout<<" 3.
EXIT
="<<endl;
cout<<"==================================="<<endl;
if
(!isEmpty())
{
for(int i=tumpukan.top; i>=0; i--)
{
cout<<"["<<tumpukan.tmp[i]<<"]"<<endl;
}
}
else
{
cout<<"[tumpukan kijang dalam kondisi kosong]";
}
cout<<"\n Masukan Pilihan :";cin>>pilih;
switch (pilih)
{
case 1:
cout<<"Masukan Kijang kedalam tumpukan :";cin>>data;
push(data);
break;
case 2:
pop();
break;
case 3:
cout<<"Tekan enter untuk keluar :";
break;
default:
cout<<"ERROR!";
break;
}
}
while (pilih!=3);
}
void push (char data[10])
{
if
(!isFull())
{
tumpukan.top=tumpukan.top+1;
strcpy(tumpukan.tmp[tumpukan.top],data);
}
else
cout<<"Kijang dalam
tumpukan penuh";
}
void pop()
{
if
(!isEmpty())
{
tumpukan.top--;
cout<<"kijang pada tumpukan ke- "<<
tumpukan.top+2<<"sudah diambil";
}
else
cout<<"Kijang dalam
tumpukan kosong";
}
void awal()
{
tumpukan.top= -1;
}
int isEmpty()
{
if
(tumpukan.top==-1)
return 1;
else
return 0;
}
int isFull()
{
if
(tumpukan.top==10-1)
return 1;
else
return 0;
}
Ouput
contoh program
input
//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)
DAFTAR PUSAKA
http://www.nblognlife.com/2014/04/stack-pada-c.html
Komentar
Posting Komentar