Senin, 01 Juni 2015

Stack

Kali ini kita akan melanjutkan membahas Stack. Apakah stack itu? Kalo di bahasa indonesiakan, stack itu artinya tumpukan. Hal ini menggambarkan karakteristik dari stack itu sendiri. Jika dikaitkan dengan struktur data, Stack berarti sekumpulan data yang organisasi atau strukturnya bersifat tumpukan atau menyerupai tumpukan. Gambar di bawah ini mengilustrasikan kerja sebuah stack.



Dari gamabar diatas dapat dilihat ada yang disebut dengan “Top “. Top merupakan pintu untuk keluar masuknya elemen – elemen stack. 3, 4, dan 5 merupakan suatu koleksi. Dari ilustrasi dapat digambarkan bahwa 5 merupakan elemen yang terakhir memasuki stack namun pertama keluar dari stack. Begitu sebaliknya dengan 1. 1 merupakan elemen pertama yang memasuki tumpukan namun terakhir saat keluar dari tumpukan.
Di dalam gambar juga terlihat urutan masuk dan keluar yang berkebalikan. Elemen yang masuk pertama akan keluar terakhir dan sebaliknya. Prinsip ini telah dikenal dalam struktur data dengan nama prinsip LIFO (Last In First Out).
Dalam penyajian stack, kita dapat menggunakan array, dengan anggapan bahwa banyaknya elemen maksimal dari suatu stack tidak melebihi batas maksimum banyaknya elemen array. Pada suatu ketika, ukuran stack akan sama dengan ukuran array, bila diteruskan penambahan datanya maka akan terjadi overflow. Oleh karena itu, perlu ditambahkan data untuk mencatat posisi ujung stack.
Stack merupakan bagian dari struktur data yang dikategorikan ke dalam bentuk linear data, dimana operasi pemasukan maupun pengeluaran data selalu dilakukan pada salah satu sisinya. Dalam dunia komputer, penggunaan stack (tumpukan) merupakan suatu hal yang umum digunakan seperti untuk penentuan alamat memory, penempatan ruang data dan aplikasi lain. Sebagai bagian dari struktur data, aplikasi stack juga digunakan untuk berbagai macam keperluan seperti pengujian kalimat palindrome, penguji tanda kurung (matching parentheses), dan juga berfungsi sebagai konversi dari notasi infix menjadi notasi postfix.
Pada perhitungan aritmatika, notasi infix adalah notasi yang menempatkan operator ditengah dua operand sedangkan notasi Postfix adalah notasi yang menempatkan operator setelah dua operand. Penggunaan notasi infix merupakan hal yang lumrah digunakan dalam perhitungan aritmatika dibandingkan dengan penggunaan notasi Postfix, akan tetapi bagi mesin kompilasi notasi Postfix merupakan notasi yang digunakan untuk melakukan suatu perhitungan.
Suatu susunan koleksi data dimana data  dapat ditambahkan dan dihapus selalu dilakukan pada bagian akhir data, yang disebut dengan top of stack

Pendeklarasian Stack
Proses pendeklarasian stack adalah proses pembuatan struktur stack dalam memori.  Cara mendefenisikan Stack dengan Array of Struct yaitu:
  1. Definisikan Stack dengan menggunakan struct
  2. Definisikan konstanta MAX_STACK untuk menyimpan maksimum isi stack
  3. Buatlah variabel array data sebagai implementasi stack
  4. Deklarasikan operasi-operasi/function di atas dan buat implemetasinya.

Contoh

//Deklarasi MAX_STACK 
#define MAX_STACK 10   
             
//Deklarasi STACK dengan struct dan array data 
typedef struct STACK{
int top;
     char data[10][10];                           
     }; 

//Deklarasi/buat variabel dari struct 
     STACK tumpuk;
  
Inisialisasi Stack
Pada mulanya isi top dengan -1, karena array dalam C dimulai dari 0, yang berarti stack adalah kosong.
Top adalah suatu variabel penanda dalam STACK yang menunjukkan elemen teratas Stack sekarang.  Top Of Stack akan selalu bergerak hingga mencapai MAX of STACK sehingga menyebabkan stack penuh.

Operasi Pada Stack
  • IsFull berfungsi untuk memeriksa apakah stack sudah penuh atau tidak. Dengan cara, memeriksa top of stack, jika sudah sama dengan MAX_STACK-1 maka full, jika belum (masih lebih kecil dari MAX_STACK-1)  maka belum full.
  • IsEmpty berfungsi untuk memeriksa apakah stack masih kosong atau tidak. Dengan cara memeriksa top of stack, jika masih -1 maka berarti stack masih kosong.
  • Push berfungsi untuk memasukkan elemen ke stack, selalu menjadi elemen teratas stack (yang ditunjuk oleh TOS).  Tambah satu (increment)  nilai top of stack lebih dahulu setiap kali ada penambahan elemen stack.  Asalkan stack masih belum penuh, isikan data baru ke stack berdasarkan indeks top of stack setelah diincrement sebelumnya.
  • Pop berfungsi untuk mengambil elemen teratas (data yang ditunjuk oleh TOS) dari stack. Ambil dahulu nilai elemen teratas stack dengan mengakses top of stack, tampilkan nilai yang akan dipop, baru dilakukan decrement nilai top of stack sehingga jumlah elemen stack berkurang.
  • Print berfungsi untuk menampilkan semua elemen-elemen stack dengan cara looping semua nilai array secara terbalik, karena kita harus mengakses dari indeks array tertinggi terlebih dahulu baru ke indeks yang kecil.
Contoh Program Stack
#include 
#include 
#include 
struct
{

        char data [15][100], max [15];
        int i,j;
}        stack;

void isi () // push untuk memasukan data
{
        stack.i++;
        cout<<"Masukan data: ";
        cin>>stack.max;
        strcpy (stack.data[stack.i],stack.max);
}
void buang () // pop untuk mengambil data
{
        if (stack.i>0)
        {
            cout<<"Data yang terambil: "<                stack.i--; stack.j--;
        }
        else
            cout<<"Tidak ada data yang terambil"<}
void muncul (int n)//print untuk menampilkan data
{
        if (stack.j>0)
        {
            for (int e=n; e>=1; e--)
            {
                cout<            }
        }
        else
        cout<<"Tidak ada data tersimpan"<}
void hapus () // clear untuk menghapus data
{
        stack.j=0; stack.i=0;
}

void main ()
{
        int n,plh;
        ayo:
        clrscr();
        cout<<"Program Stack (tumpukan)\n\n";
        cout<<"Jumlah maksimal tumpukan data: "; cin>>n;
        stack.data[n];
        stack.i=0;
        stack.j=0;
        pusing:
        clrscr();
        cout<<"\nOperasi Yang Ingin Dilakukan\n";
        cout<<"\n1. Push \n2. Pop \n3. Print \n4. Clear \n5. Quit \n";
        cout<<"\nMasukkan Pilihan :"; cin>>plh;
        cout<<"\n";

        if (plh==1)
        {
                if (stack.j                {
                    stack.j++; isi();
                }
                else
                {
                    cout<<"Tumpukan penuh"<                }
                goto pusing;
        }
        else if (plh==2)
        {
                buang(); getch(); goto pusing;
        }
        else if (plh==3)
        {
                muncul (stack.i); getch(); goto pusing;
        }
        else if (plh==4)
        {
                hapus();  getch(); goto pusing;
        }
        else if (plh==5)
        {
                getch(); goto ayo;
        }
        else
        {
                cout<<"Input yang anda masukan salah !!!";
                getch(); goto ayo;
        }
}

Referensi:
  1.  Fachrie, Muhammad.2012.Stack And Queue.Yogyakarta.Stimik Amikom
  2. Farisa, Arna.2008.Stack.Surabaya.Politeknik Elekronika Surabaya.

Tidak ada komentar:

Posting Komentar