Minggu, 07 Juni 2015

Materi STACK


STACK

Stack atau tumpukan sebagai list  dimana penambahan dan pengambilan elemen hanya dilakukan pada satu sisi yang disebut top (puncak) dari stack.






Dua operasi dasar pada stack adalah PUSH (operasi pemasukan elemen ke dalam stack) dan POP (operasi pengambilan satu elemen dari dalam stack). Stack terdiri dari 2 jenis yaitu :
1.      Single Stack

2.      Double Stack

a. Single Stack

Single Stack dapat direpresentasikan menggunakan array satu dimensi. Pada single stack berlaku aturan LIFO (Last In First Out), yaitu elemen yang terakhir masuk akan pertama kali diambil atau dilayani.




Kondisi Stack ditentukan oleh posisi atau isi TOP :


Kondisi Stack
Posisi TOP
KOSONG
Top = -1
PENUH
Top = n-1
BISA DIISI
Top < n-1
ADA ISINYA
Top > -1













ALGORITMA PUSH

if (Top < n-1)             
{
             Top = Top + 1;
 S[Top] = x;
}
            else
cout<<“Stack Penuh”;


ALGORITMA POP

if (Top > -1)               
{
x = S[Top];
Top = Top - 1;
}
            else
            cout<<“Stack Kosong”;

l  Contoh Program stack memeriksa kelengkapan pasangan kurung buka dan kurung tutup suatu pernyataan aritmatika :
Misal :
            Pernyataan benar : (a+b)*(c-d)/e
            Pernyataan salah : (a+b * (c-d)/e

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

void main()
{
char kata[100];
cout<<"Inputkan Rumus Aritmatika : ";
cin.getline(kata, 100);
int jumlahkurungtutup = 0, jumlahkurungbuka = 0;
for (int i = 0; i < strlen(kata); i++)
   {
            if(kata[i] =='(')
            jumlahkurungtutup = jumlahkurungtutup + 1;
            else if(kata[i] ==')')
            jumlahkurungbuka = jumlahkurungbuka + 1;
   }

   if(jumlahkurungbuka == jumlahkurungtutup)
   cout<<"Rumus Aritmatika BENAR";
   else
   cout<<"Rumus Aritmatika SALAH";

   getch();
}

b. Double Stack


Double Stack atau Stack Ganda adalah stack yang hanya terdiri dari dua single stack. Bila stack ini direpresentasikan dengan array, maka pengisian dan penghapusan harus melalui salah satu arah.





Di dalam proses double stack terdapat lima macam proses utama, yaitu :

–          Inisialisasi

–          PUSH1 (Proses Push untuk Single Stack pertama)

–          POP1 (Proses Pop untuk Single Stack pertama)

–          PUSH2 (Proses Push untuk Single Stack kedua)

–          POP2 (Proses Pop untuk Single Stack kedua)



Kondisi dari double stack :

Kondisi Stack
Posisi TOP
Stack1 KOSONG
Top1 = -1
Stack2 KOSONG
Top2 = n
Stack PENUH (baik Stack1 maupun Stack2 tidak BISA DIISI)
Top2 – Top1 = 1
Stack BISA DIISI (baik Stack1 maupun Stack2 BISA DIISI)
Top2 – Top1 > 1
Stack1 ADA ISINYA
Top1 > -1
Stack2 ADA ISINYA
Top2 < n


Algoritma PUSH1 (mengisi Stack1)
·         Periksa apakah Stack1 BISA DIISI
                                
                                 if (Top2 – Top1 > 1)                 
                                    {          Top1 = Top1 + 1;
                                                S[Top1] = x;
                                    }
                                 else
                                    cout<<“Stack Penuh”;           




Algoritma POP1 (mengambil isi Stack1)
·         Periksa apakah Stack1 ADA ISINYA
                                
                                 if (Top1 > -1)                
                                    {          x = S[Top1];
                                                Top1 = Top1 - 1;
                                    }
                                 else
                                    cout<<“Stack Kosong”;

Algoritma PUSH2 (mengisi Stack2)
·         Periksa apakah Stack2 BISA DIISI
                                
                                 if (Top2 – Top1 > 1)                 
                                    {          Top2 = Top2 - 1;
                                                S[Top2] = x;
                                    }
                                 else
                                    cout<<“Stack Penuh”;

Algoritma POP2 (mengambil isi Stack2)
·         Periksa apakah Stack2 ADA ISINYA
                                
                                 if (Top2 < n)                 
                                    {          x = S[Top2];
                                                Top2 = Top2 + 1;
                                    }
                                 else
                                    cout<<“Stack Kosong”;

Contoh Program Double Stack pada Bahasa C++ :
#include <iostream.h>
#include <conio.h>

int top=-1, data[100];

void pushdata()
{
    cout<<"Masukkan Data Stack : ";
    cin>>data[top];
}

void popdata()
{
   top=top-1;
   cout<<"Data Stack Teratas Dihapus!"<<endl;
}

void viewdata()
{
   cout<<endl;
   for(int i=top-1;i>=-1;i--)
            {
                        cout<<"|| DATA STACK = "<<data[i]<<"  ||"<<endl;
            }

}

void bersih()
{
            top=-1;
            cout<<"Data Stack Telah Dibersihkan!";
}

void main()
{
    char ulangi; int pilihan;
    do
    {

      cout<<"             Menu Pilihan STACK"<<endl;
      cout<<"          ========================"<<endl;
      cout<<"         [   1. PUSH Data         ]"<<endl;
      cout<<"         [   2. POP Data          ]"<<endl;
      cout<<"         [   3. View Data         ]"<<endl;
      cout<<"         [   4. Bersihkan Stack   ]"<<endl;
      cout<<"          ========================"<<endl;
      cout<<endl;

      cout<<"Masukkan Nomor Pilihan Anda: ";cin>>pilihan;
            switch(pilihan)
    {

    case 1:
         {
                        pushdata(); top=top+1;
         }
            break;
    case 2:
    {
                        if(top<=-1)
            {
                        cout<<"Data Stack Kosong!"<<endl;
            }
            else
            {
                        popdata();
             }
    }
            break;
    case 3:
    {
                        if(top<=-1)
            {
                        cout<<"Data Stack Kosong!"<<endl;
            }
            else
            {
                        viewdata();
             }
  }
            break;
    case 4:
            {
            bersih();
            cout<<endl;
         }
            break;
                        default:cout<<"Pilihan Anda Tidak Termasuk Dalam Daftar!"<<endl;
            break;
      }
      cout<<endl;
      cout<<"Ingin Melakukan Pengulangan?"<<endl;
      cout<<"Yes = 'Ulangi' || No = 'Keluar'    "<<endl;
      cout<<"Masukkan Pilihan: (Y/N):";cin>>ulangi;
      }
      while(ulangi=='y'||ulangi=='Y');

      getch();
}

Hasil Program Double Stack ketika dijalankan!!!



DAFTAR PUSTAKA


  • Anonim. 2015. Tumpukan Antrian Stack dan Queue. Diakses tanggal 05 Juni 2015 pada http://khabib.staff.ugm.ac.id/index.php?option=com_content&view=article&id=84:tumpukan-a-antrian-stack-a-queue&catid=28:introduction-to-algorithm-and-programming


Thankyou :)

SELAMAT MENCOBA!!!







1 komentar: