Home

Stack Ganda

Program dibawah ini merupakan contoh dari Stack Ganda kalau anda ingin mencoba silahkan copy sintax yang telah dibold sesuai urutannya.

#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, endl



int 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