Kamis, 04 Juni 2015

stack c++

Stack adalah 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”.
Misal 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. Selanjutnya, jika diberikan sebuah stack S = [A,B,C,D], maka stack S ini dapat digambarkan sebagai berikut :



* OPERASI DASAR PADA STACK

Ada empat operasi dasar yang didefinisikan pada stack, yaitu :

1. CREATE(stack)
2. ISEMPTY(stack)
3. PUSH(elemen,stack)
4. POP


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

NOEL(CREATE(S)) = 0 dan TOP(CREATE(S)) = null

2. ISEMPTY
Operator ini berfungsi untuk menentukan apakah suatu stack adalah 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.

3. 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).

4. 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 :

#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);}


Screen Shot program sebagai berikut:
 



contoh study kasus :1. Buatlah program untuk memeriksa kelengkapan tanda kurung suatu bentuk aritmetika
    Tampilkan "benar" jika tanda kurung lengkap
    Tampilkan "salah" jika tanda kurung tidak lengkap
  Listing programnya adalah sebagai berikut:
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
#define n 5
void main()
{
   int s[n], top, panjang, i;
   char input[20];
   cout<<"MEMERIKSA TANDA KURUNG BENTUK ARITMETIKA"<<endl<<endl<<endl;
   top=-1;
   cout<<"MASUKKAN JUMLAH KARAKTER ARITMETIKA : ";
   cin>>panjang;
   cout<<"INPUTKAN BENTUK ARITMETIKA : ";
   for(i=1; i<=panjang; i++)
   {
      cin>>input[i];
   }
   for(i=1; i<=panjang; i++)
   {
      if(input[i]=='(')
      {
         top=top+1;
         s[top]=input[i];
      }
      else if(input[i]==')')
      {
          if(top>-1)
          {
            input[i]=s[top];
            top=top-1;
               }
               else
               {
             cout<<"BENTUK ARITMETIKA SALAH";
                   goto bawah;
                }
      }
   }
   if(top==-1)
   {
      cout<<"BENTUK ARITMETIKA BENAR";
   }
   else
   {
      cout<<"BENTUK ARITMETIKA SALAH";
   }
   bawah:
   cout<<endl<<endl<<"TERIMAKASIH";
   getch();
}


Tidak ada komentar:

Posting Komentar