#include <conio.h>
#include <iostream.h>
penjelasan program di atas :
Header file merupakan sebuah file yang digunakan untuk
mendefinisikan berbagai file makro, fungsi, variabel dan konstanta.
Conio.h : menampilkan perintah getch, clrscr
Iostream.h : menampilkan perintah cout, cin, endlint data[5];
int top1, top2;
int menu;
bool stack_push;
bool stack_pop;
penjelasan program di atas :
Tipe data merupakan
nilai yang berfungsi untuk memberikan tanda pengenal terhadap suatu variabel.
Int data [5] :
variabel array untuk stack
Int top1, top2 :
mendeklarasikan variabel paling atas dari stack karena ini merupakan stack
ganda maka variabel top dibuat dua yaitu
top1 dan top2
Int menu : variabel
yang nanti berfungsi untuk memilih menu yang akan kita pilih pada saat program
dieksekusi
Bool stack_push :
variabel untuk stack_push yang nantinya akan bernilai true dan false
Bool stack_pop : variabel
untuk stack_pop yang nantinya akan bernilai true dan false
bool isFull()
{
if(top2-top1==1)
{
return true;
}
else
{
return false;
}
}
penjelasan program di atas :
Bool
is_Full merupakan sebuah fungsi yang berfungsi untuk mengecek apakah stack
sudah penuh?
Dengan
cara memeriksa top2 – top1 dari stack,
apakah sudah sama dengan ==1 , jika sudah maka stack full (true) jika tidak maka belum full (false)
bool isEmpty1()
{
if(top1==-1)
{
return true;
}
else
{
return false;
}
}
penjelasan program di atas :
Karena
ini adalah stack ganda maka untuk mengecek apakah stack kosong maka kita perlu
membuat 2 fungsi untuk stack1 dan stack2 yaitu dengan nama isEmpty1() untuk stack1 dan isEmpty2() untuk stack2 dengan fungsi bool.
Fungsi
bool isEmpty1() berfungsi untuk mengecek apakah stack1 masih kosong ?
Dengan
cara memeriksa kondisi top1== -1 ?
Jika
ya maka stack1 masih kosong (true)
Jika
tidak maka stack1 masih penuh/terisi (false)
bool isEmpty2()
{
if(top2==5)
{
return true;
}
else
{
return false;
}
}
penjelasan program di atas :
Fungsi
bool isEmpty2() berfungsi untuk mengecek apakah stack2 masih kosong ?
Dengan
cara memeriksa kondisi top2 == 5 ?
Karena
top2=5 sudah ditetapkan di void main()
Jika
ya maka stack2 masih kosong (true)
Jika
tidak maka stack2 masih penuh/terisi (false)
void push()
{
if(isFull()==true)
{
cout<<"Stack sudah penuh...!";
}
else
{
if(stack_push==true)
{
//Push data ke stack 1
top1++;
cout<<"Input data ke stack 1,";
cout<<"index ke-"<<top1<<" : ";
cin>>data[top1];
stack_push=false;
}
else
{
//Push data ke stack 2
top2--;
cout<<"Input data ke stack 2,";
cout<<"index ke-"<<top2<<" : ";
cin>>data[top2];
stack_push=true;
}
}
}
penjelasan program di atas :
Selanjutnya membuat procedure void push() dimana procedure
ini berfung si untuk menambah satu item pada stack pada tumpukan paling atas
Dengan cara : cek apakah stack
sudah full atau tidak ? dengan sintax if(isFull()==true),
jika isFull() bernilai true maka tampilkan pesan “Stack
Sudah Penuh..!”
Jika belum penuh maka selanjutnya
menamnbahkan item data ke stack1 dengan cara mengecek apakah stack_push == true
?
Karena ini stack ganda maka item
data akan ditambah pada stack1 terlebih dahulu
Jika stack_push bernilai benar
maka tambah item data ke stack1 Sintax top1++ :
berfungsi untuk menambah satu item data ke stack1
cout<<"Input data ke
stack 1,"; berfungsi untuk menampilkan tulisan “Input data ke stack1” ke
layar
kemudian membuat masukan dari user dengan cara
menggunakan fungsi cin yaitu dengan
sintax : cout<<"index
ke-"<<top1<<" : "; cin>>data[top1];
setelah itu stack_push diberi
nilai false, karena pada saat program
dieksekusi ketika menambah item data ke stack1 selesai maka akan dilanjutkan
penambahan item data ke stack2
selanjutnya, membuat sintax untuk
dapat menambahkan item data ke stack2, karena top2=5 sudah ditetapkan di void
main() maka sintax untuk menambah item data ke stack2 menjadi top2--
kemudian membuat masukan user
agar data masuk ke top2 dengan sintax cout<<"index
ke-"<<top2<<" : "; cin>>data[top2];
stelah itu stack_push diberi nilai
true, agar pada saat selesai menambah item data ke stack2 maka ketika menambah
item data lagi akan masuk ke stack1
void pop()
{
if(stack_pop==true)
{
//Pop ke stack 1
if(isEmpty1()==true)
{
cout<<"Stack 1 Kosong..!";
}
else
{
cout<<"Yg keluar data dr stack 1,";
cout<<"nilainya : "<<data[top1];
top1--;
stack_pop=false;
}
}
else
{
//Pop ke stack 2
if(isEmpty2()==true)
{
cout<<"Stack 2 Kosong..!";
}
else
{
cout<<"Yg keluar data dr stack 2,";
cout<<"nilainya : "<<data[top2];
top2++;
stack_pop=true;
}
}
}
penjelasan program di atas :
Selanjutnya
membuat procedure void pop() yang berfungsi untuk mengambil item pada tumpukan
paling atas dari stack.
Dengan
cara memeriksa apakah stack_pop == true ?
Jika ya
maka akan mengambil item data dari stack1 terlebih dahulu dengan memeriksa
apakah isEmpty1() bernilai true ? karena
jika stack1 kosong maka tidak aka n ada data yang bisa diambil
jika ya
maka akan menampilkan pesan “Stack1 Kosong..!”
jika
tidak maka selanjutnya akan mengambil item dari stack1 dengan mengambil item dari data[top1] yaitu data paling atas
dari stack1 , kemudian sintax top1-- berfungsi untuk mengambil satu item pada
stack1.
Setelah
itu stack_pop diberi nilai false
Selanjutnya
untuk mengambil item data dari stack2
Dengan
cara memeriksa apakah isEmpty2() bernilai true ?
Jika ya
maka tampilkan pesan “Stack 2 Kosong …!”
Jika
tidak selanjutnya akan mengambil item dari stack2 dengan mengambil item
dari data[top2] yaitu data paling atas
dari stack2, kemudian membuat sintax top2++
Setelah
itu stack_pop diberi nilai true
void print()
{
if(isEmpty1()==true)
{
cout<<"Stack 1 Kosong";
}
else
{
cout<<"Isi dari stack 1 : ";
for(int i=0; i<=top1; i++)
{
cout<<" "<<data[i];
}
}
cout<<endl;
if(isEmpty2()==true)
{
cout<<"Stack 2 Kosong";
}
else
{
cout<<"Isi dari stack 2 : ";
for(int i=4; i>=top2; i--)
{
cout<<" "<<data[i];
}
}
}
penjelasan program di atas :
Selanjutnya
membuat procedure void print() yang berfungsi untuk menampilkan isi dari stack1
dan stack2
Dengan
cara cek apakah isEmpty1() bernilai true jika ya maka tampilkan pesan “Stack1
Kosong..!”
Jika tidak maka tampilkan isi
dari stack1 dengan cara membuat perulangan for(int i=0; i<=top1; i++) yang
berfungsi untuk menampilkan data dari stack1 dari item yang paling awal
ditambahkan sampai item terakhir
cout<<"
"<<data[i]; berfungsi untuk menampilkan item dari stack1
selanjutnya menampilkan isi dari
stack2
dengan mengecek apakah isEmpty2()
bernilai true ? jika ya maka tampilkan
pesan “Stack2 Kosong..!”
setelah itu membuat perulangan
for(int i=4; i>=top2; i--) yang berfungsi untuk menampilkan isi dari stack2
cout<<"
"<<data[i]; berfungsi untuk menampilkan item dari stack2
void clear()
{
top1=-1;
top2=5;
}
penjelasan program di atas :
Selanjutnya
membuat procedure void clear() yang berfungsi untuk menghapus item data di
stack1 dan stack2
Hanya
tinggal mengembalikan nilai awal dari top1 dan top2 maka stack akan kosong
Yaitu
dengan sintax top1= -1 dan top2=5
void main()
{
top1=-1;
top2=5;
stack_push=true;
stack_pop=true;
home:
clrscr();
cout<<" STACK GANDA"<<endl;
cout<<"--------------------"<<endl;
cout<<"1. Push"<<endl;
cout<<"2. Pop"<<endl;
cout<<"3. Print"<<endl;
cout<<"4. Clear"<<endl;
cout<<"--------------------"<<endl;
cout<<"Input pilihan [1-4] : ";
cin>>menu;
penjelasan program di atas :
Selanjutnya
di void main () hanya tinggal membuat menu dan memanggil procedure yang telah
dibuat sebelumnya
Pada
bagian void main() variabel :
top1
diberi nilai -1
top2
diberi nilai 5
stack_push
bernilai true
stack_pop
bernilai true
sintax
home : berarti tempat awal untuk kembali yang akan dipanggil pada bagian menu
sintax
clrscr() berfungsi menghapus isi layar /
bagian dari isi layar
selanjutnya
membuat tampilan untuk menu, hanya tinggal menggunakan perintah cout untuk
menampilkannya ke layar program yaitu :
cout<<"1. Push"<<endl;
cout<<"2. Pop"<<endl;
cout<<"3. Print"<<endl;
cout<<"4. Clear"<<endl;
setelah
itu membuat masukan user menggunakan fungsi cin :
cout<<"Input pilihan [1-4] : ";
cin>>menu;
dimana variabel menu telah
dideklarasikan pada variabel global di sintax program sebelumnya.
switch(menu)
{
case 1:
push();
getch();
goto home;
break;
case 2:
pop();
getch();
goto home;
break;
case 3:
print();
getch();
goto home;
break;
case 4:
clear();
getch();
goto home;
break;
}
getch();
}
penjelasan program di atas :
Selanjutnya
membuat pilihan menu yang telah dimasukan oleh user
Disini
menggunakan statement switch case, karena keuntungan switch case adalah kita
bisa langsung mengevaluasi satu statement dan memerintahkan aksi dalam jumlah
yang banyak
Dengan
cara meng-switch variabel menu : switch(menu)
Setelah
itu hanya tinggal memanggil procedure dan fungsi-fungsi yang telah dibuat
sebelumnya. Misalnya di case 1:
case 1:
push(); // memanggil
procedure push()
getch(); // untuk
mendapatkan tampilan program
goto home; // kembali ke home:
break; // menghentikan
proses yang terjadi apabila perintah eksekusi // telah dilaksanakan
output
Tidak ada komentar:
Posting Komentar