Kamis, 04 Juni 2015

Pengertian & Contoh program STACK dalam bahasa C++



Pengertian STACK
Secara sederhana stack atau tumpukan bisa diartikan sebagai kumpulan data yang seolah-olah diletakkan di atas data yang lain. STACK adalah salah satu list linear dalam struktur data yang digunakan untuk menyimpan dan mengambil data dengan konsep LIFO (Last In First Out). Satu hal yang perlu diingat bahwa kita bisa menambah (menyisipkan)data dan mengambil (menghapus) data melalui ujung yang sama, yang disebut sebagai ujung atas stack.

                Untuk menjelaskan pengertian diatas, kita ambil contoh sebagai berikut. Misalkan kita mempunyai 2 buah kotak yang ditumpuk, sehingga kotak yang satu akan ditumpuk diatas kotak yang lainnya. Jika kemudian tumpukan 2 kotak tadi, ditambah kotak ke-tiga, ke-empat, ke-lima dan seterusnya, maka akan diperoleh sebuah tumpukan kotak yang terdiri dari N kotak.
                Secara sederhana, sebuah stack bisa diilustrasikan seperti  ini:
                                           
Dari gambar diatas,bisa dilihat bahwa kotak B terletak diatas kotak A dan ada dibawah kotak C. Kotak D terletak diatas kotak C, kotak E terletak diatas kotak D dan seterusnya sampai kotak terakhir. Dari gambar diatas menunjukkan bahwa dalam stack hanya bisa menambah atau mengambil sebuah kotak lewat satu ujung, yaitu bagian atas, dan yang menjadi ujungnya adalah kotak F. Jadi jika ada kotak lain yang akan disisipkan, maka kotak tersebut akan dletakkan diatas kotak F, dan jika ada kotak yang akan diambil, maka kotak F yang pertama akan diambil.

OPERASI PADA STACK
Ada 2 operasi dasar yang bisa dilaksanakan pada sebuah stack, yaitu operasi menyisipkan data(push) dan operasi menghapus data(pop).

==>Operasi Push
                prosedur ini terlebih dahulu akan menaikkan posisi TOP satu level ke atas. Misalkan kondisi stack masih kosong (TOP = 0), lalu prosedur push akan menaikkan posisi TOP satu level ke atas, yakni ke posisi 1 (TOP = 1), baru setelah itu data dimasukkan ke dalam array pada indeks ke-1 (yakni indeks dimana TOP berada).

 Berikut adalah deklarasi prosedur push dalam Bahasa C: 
void push(int x)
{
tumpukan.TOP = tumpukan.TOP + 1;
tumpukan.data[tumpukan.TOP] = x;
}

 



 Perintah push digunakan untuk memasukkan data ke dalam stack. Untuk lebih jelasnya perhatikan ilustrasi berikut ini. Misalkan kita mempunyai data-data 3, 25 dan 9 dalam stack dengan posisi 3 paling bawah dan 9 paling atas. Dan kita akan memasukkan data 34 ke dalam stack tersebut. Tentu saja data 34 akan diletakkan di atas data 9.
 

 ==>Operasi Pop
                Operasi Pop adalah operasi untuk menghapus elemen yang terletak pada posisi paling atas dari sebuah stack. Prosedur ini berfungsi untuk mengeluarkan/ menghapus nilai terakhir (yang berada pada posisi paling atas) dari stack, dengan cara menurunkan nilai TOP satu level ke bawah.
Misalkan TOP berada pada indeks ke-5, maka ketika akan mengeluarkan/ menghapus
data pada posisi paling atas (pada posisi TOP), prosedur ini akan menurunkan posisi TOP
ke indeks array ke-4. Berikut deklarasi prosedur pop dalam Bahasa C:


void pop()
{
tumpukan.TOP = tumpukan.TOP - 1;
}
 
 






Untuk lebih jelasnya bisa langsung dilihat pada contoh program STACK:

#include<stdio.h>
#include<conio.h>
#include<iostream.h>

struct stack
{
     int data[5];
   int atas;
};
stack tumpuk;

void main()
{
     clrscr();
   int pilihan, baru, i;

   tumpuk.atas=-1;
   do
   {
     clrscr();
      cout<<"1. PUSH DATA"<<endl;
      cout<<"2. POP DATA"<<endl;
      cout<<"3. PRINT DATA"<<endl<<endl;
      cout<<"MASUKKAN PILIHAN : ";
      cin>>pilihan;

      switch (pilihan)
      {
           case 1 :
           if(tumpuk.atas==5-1)
            {
                cout<<"TUMPUKAN PENUH";
               getch();
            }
            else
            {
                cout<<"MASUKKAN DATA : ";
                cin>>baru;
                tumpuk.atas++;
               tumpuk.data[tumpuk.atas]=baru;
                     }
            break;

         case 2 :
           if(tumpuk.atas==-1)
            {
                cout<<"TUMPUKAN KOSONG";
               getch();
            }
            else
            {
               cout<<"DATA YANG AKAN DI POP = "<<tumpuk.data[tumpuk.atas]<<endl;
                tumpuk.atas--;
               getch();
            }
            break;

         case 3 :
           if(tumpuk.atas==-1)
            {
                cout<<"TUMPUKAN KOSONG";
               getch();
            }
           else
            {
                cout<<"DATA - "<<endl;
               for(i=tumpuk.atas; i>=0; i--)
               {
               cout<<tumpuk.data[i]<<ends;
               }
               getch();
            }
            break;

         default :
           cout<<"TIDAK ADA DALAM PILIHAN";
            break;
      }

   }
   while((pilihan>=1) && (pilihan<=3));
   getch();
}



==>PEMANFAATAN STACK
                Salah satu pemanfaatan stack adalah untuk menulis ungkapan dengan menggunakan notasi tertentu. Seperti kita ketahui, dalam penulisan ungkapan numeris, kita selalu menggunakan tanda kurung untuk mengelompokkan bagian mana yang akan dikerjakan terlebih dahulu.
Sebagai contoh, perhatikan ungkapan berikut ini.
                (C+D) * (E-F)
Dari contoh diatas (C+D) akan dikerjakan lebih dahulu, kemudian baru (E-F) dan hasilnya akan dikalikan.
Lain halnya dengan contoh berikut ini : C+D*E-F
D*E akan dikerjakan terlebih dahulu, kemudian diikuti yang lain. Dalam hal ini pemakaian tanda kurung sangat penting karena akan mempengaruhi hasil akhir.
                Cara penulisan ungkapan sering disebut dengan notasi infix , yang artinya bahwa operator ditulis diantara 2 operator.
                Seorang ahli matematika yang bernama Jan Lukasiewiccz kemudian mengembangkan suatu cara penulisan ungkapan numeris yang kemudian dikenal dengan nama notasi prefix, yang artinya adalah bahwa operator ditulis sebelum kedua operand yang akan disajikan.
Perhatikan contoh dari notasi infix dan prefix berikut ini:
                Infix           Prefix
      A+B             +AB
      A+B-C           -+ABC
     (A+B)*(C-D)      *+AB-CD


Sekian pembahasan tentang STACK ,semoga bermanfaat ^,^
Sumber:
1.Referensi dari Buku : ALGORITMA DAN PEMROGRAMAN DENGAN C++ (edisi II)
Oleh : Andri Kristanto,S.Kom
2.http://webcache.googleusercontent.com/search?q=cache:_a1KkQw1NOIJ:elearning.amikom.ac.id/index.php/download/materi/555161-ST015-19/2012/06/20120620_STACK%2520DAN%2520QUEUE.pdf+&cd=1&hl=id&ct=clnk&gl=id

Tidak ada komentar:

Posting Komentar