Laman

Kamis, 02 Mei 2013

Pengertian Stack Beserta Implementasinya Pada C++



LINEAR LIST
 
Linear List merupakan suatu struktur data yang dimana himpunan tersebut terurut. Misal didefinisikan  suatu linear list A yang terdiri atas T buah elemen sebagai berikut :

            A = [a1, a2, .........., aT]

Jika T = 0, maka A dikatakan sebagai “Null List”.
Suatu elemen dari sembarang posisi pada linear list A dapat dihilangkan. Dan sebaliknya, suatu elemen baru dapat dimasukkan ke dalam list dan dapat menempati sembarang posisi pada list tersebut. Jadi suatu linear list dapat berkurang atau bertambah setiap saat.

DEFINISI STACK
Stack merupakan suatu bentuk khusus dari linear list di mana operasi penyisipan dan penghapusan atas elemen-elemennya hanya dapat dilakukan pada satu sisi saja yang disebut sebagai “TOP”.

Misalnya diberikan Stack S sebagai berikut :

      S = [ S1, S2, .........., ST ]   maka TOP(S) = ST.

Untuk menunjukkan jumlah elemen suatu stack digunakan notasi NOEL. Dari stack di atas, maka NOEL(S) = T. kemudian, jika diberikan sebuah stack S = [A,B,C,D], maka stack S ini dapat digambar.


OPERASI DASAR PADA STACK
            Terdapat empat operasi dasar yang didefinisikan pada stack, yaitu :
1.      CREATE(stack)
2.      ISEMPTY(stack)
3.      PUSH(elemen,stack)
4.      POP(stack)

CREATE
Operator ini berfungsi untuk membuat sebuah stack kosong dan didefinisikan bahwa :

NOEL(CREATE(S)) = 0 dan TOP(CREATE(S)) = null
                                                           
ISEMPTY
Operator ini berfungsi untuk menentukan apakah suatu stack merupakan stack kosong. Operasinya akan bernilai boolean, dengan definisi sebagai berikut :
            ISEMPTY(S) = true, jika S adalah stack kosong
                                = false, jika S bukan stack kosong
      atau
            ISEMPTY(S) = true, jika NOEL(S) = 0
                                = false, jika NOEL(S) 0

      Catatan : ISEMPTY(CREATE(S)) = true.


PUSH
Operator ini berfungsi untuk menambahkan satu elemen ke dalam stack. Notasi yang digunakan adalah :

            PUSH(E,S)

 Artinya : menambahkan elemen E ke dalam stack S.

Elemen yang baru masuk ini akan menempati posisi TOP.
       
Jadi : TOP(PUSH(E,S)) = E.

Akibat dari operasi ini jumlah elemen dalam stack akan bertambah, artinya NOEL(S) menjadi lebih besar atau stack menjadi tidak kosong (ISEMPTY(PUSH(E,S)) = false).


POP
Operator ini berfungsi untuk mengeluarkan satu elemen dari dalam stack. Notasinya :
                   POP(S)

Elemen yang keluar dari dalam stack adalah elemen yang berada pada posisi TOP. Akibat dari operasi ini jumlah elemen stack akan berkurang atau NOEL(S) berkurang dan elemen pada posisi TOP akan berubah. Operator POP ini tidak dapat digunakan pada stack kosong, artinya :

                   POP(CREATE(S)) = error condition

Catatan : TOP(PUSH(E,S)) = E


Contoh Program Stack

//program STACK

#include <iostream.h>
#include <conio.h>
#include <string.h>
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.data[stack.i]<<endl;
                stack.i--; stack.j--;
        }
        else
            cout<<"tak ada data yang terambil"<<endl;
}
void muncul (int n)//print untuk menampilkan data
{
        if (stack.j>0)
        {
            for (int e=n; e>=1; e--)
            {
                cout<<stack.data[e]<<endl;
            }
        }
        else
        cout<<"tak ada data tersimpan"<<endl;
}
void hapus () // clear untuk menghapus data
{
        stack.j=0; stack.i=0;
}

void main ()
{
        int n,plh;
        ayo:
        clrscr();
        cout<<"contoh program stack (tumpukan)\n\n";
        cout<<"maksimal tumpukan data: "; cin>>n;
        stack.data[n];
        stack.i=0;
        stack.j=0;
        pusing:
        clrscr();
        cout<<"\n1. push \n2. pop \n3. print \n4. clear \n5. quit \n";
        cout<<"\npilih :"; cin>>plh;
        cout<<"\n";

        if (plh==1)
        {
                if (stack.j<n)
                {
                    stack.j++; isi();
                }
                else
                {
                    cout<<"tumpukan penuh"<<endl; getch();
                }
                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;
        }
}



Sumber:

Tidak ada komentar:

Posting Komentar