Kamis, 04 Juni 2015

Stack (Tumpukan)

Pengantar Stack (Tumpukan)
 
Contoh nyata dari penggunaan stack bisa kita lihat di kehidupan sehari-hari misalnya di parkiran mobil di gang sempit.Seseorang yang datang duluan ke parkiran akan parkir paling pojok, jika ada lima mobil di parkiran maka mobil yang terakhir parkir akan keluar duluan dan mobil yang datang pertama kali akan keluar terakhir.
Sama halnya dengan data pada konsep stack di algoritma dan pemrograman. Stack (tumpukan) inilah yang menerapkan konsep yang kita kenal dengan LIFO (Last-In-First-Out) atau FCLS (First-Come-Last-Serve), artinya elemen struktur yang dimasukkan ke dalam rangkaian terakhir kali maka akan muncul pertama kali apabila ditampilkan/dikeluarkan.
Pada konsep Last-In-First-Out, yang terakhir masuk yang pertama kali keluar. Jika ada sebanyak NOEL elemen pada sebuah stack, maka elemen ke-NOEL merupakan elemen TOP.
Berikut ini adalah operator-operator atau nama method yang biasa digunakan dalam pemrograman algoritma stack.
- PUSH: penyisipan (Memasukkan elemen).
- POP: penghapusan (Mengeluarkan elemen puncak).
- IsEmpty: operator yang memeriksa apakah stack kosong.
- IsFull: operator yang memeriksa apakah stack penuh.
- Clear: operator untuk menghapus stack.
 
Agar lebih jelas mari kita lihat gambar:



 
Berikut merupakan program stack:
#include <iostream.h>
#include <conio.h>
#define max 10

struct Tumpukan
{
   int atas;
   int data[max];
}T;

void awal()
{
   T.atas=-1;
}

int kosong()
{
   if(T.atas==-1)
   return 1;
   else
   return 0;
}

int penuh()
{
   if(T.atas==max-1)
   return 1;
   else
   return 0;
}


void input(int data)
{
    if(kosong()==1)
    {
        T.atas++;
        T.data[T.atas]=data;
        cout<<"Data "<<T.data[T.atas]<<" masuk ke stack";
    }

    else if(penuh()==0)
    {
        T.atas++;
        T.data[T.atas]=data;
        cout<<"Data "<<T.data[T.atas]<<" masuk ke stack";
    }
    else
        cout<<"Tumpukan penuh";
}

void hapus()
{
     if(kosong()==0)
     {
         cout<<"Data teratas sudah terambil";
         T.atas--;
     }
     else
         cout<<"Data kosong";
}

void tampil()
{
     if(kosong()==0)
     {
          for(int i=T.atas;i>=0;i--)
           {
                cout<<"\nTumpukan ke "<<i<<"="<<T.data[i];}
           }
    else
          cout<<"Tumpukan kosong";
}

void bersih()
{
      T.atas=-1;
       cout<<"Tumpukan kosong!";
}

void main()
{
    int pil,data;
    awal();
    do
    {
       clrscr();
       cout<<"1. Input\n2. Hapus\n3. Tampil\n4. Bersihkan\n5. Keluar\nMasukkan pilihan:";
       cin>>pil;
       switch(pil)
       {
             case 1:
             cout<<"Masukkan data = ";
             cin>>data;
             input(data);
             break;

            case 2:
            hapus();
            break;

            case 3:
            tampil();
            break;

            case 4:
            bersih();
            break;

            case 5:
            cout<<"Terimakasih, tekan enter untuk keluar";
      }
getch();
}
while(pil!=5);
}
Hasil eksekusi program:



Tidak ada komentar:

Posting Komentar