Minggu, 07 Juni 2015

Struktur Data Stack


Pengertian Stack

Pengertian Stack (Tumpukan) adalah suatu stuktur data yang penting dalam pemrograman yang mempunyai sifat LIFO (Last In First Out), Benda yang terakhir masuk ke dalam stack akan menjadi benda pertama yang dikeluarkan dari stack. 
Stack (Tumpukan) adalah list linier yang dikenali elemen puncaknya dan Aturan penyisipan dan penghapusan elemennya tertentu.

Konsep STACK digunakan dalam struktur data.
Dalam Struktur Stack digunakan istilah :
l  PUSH : Simpan,Masuk,Insert,Tulis
l  POP : Ambil,Keluar,Delete,Baca
Ada dua jenis Stack yaitu:
l  Single Stack
l  Double Stack

Single Stack
Single Stack dapat direpresentasikan menggunakan array satu dimensi.
Illustrasi dari single stack :
Prinsip proses Single Stack adalah LIFO (Last In First Out)
Proses pada Single Stack :
l  AWAL (Inisialisasi)
l  PUSH (Insert, Masuk, Simpan, Tulis)
l  POP (Delete, Keluar, Ambil, Baca/Hapus)

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)                     
             else
                                cout<<“Stack Penuh”;

Algoritma POP

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

Double Stack
Double Stack atau bisa disebut juga Stack Ganda

Prinsip proses Double Stack adalah LIFO (Last In First Out) baik untuk Stack1 maupun untuk Stack2

Proses pada Double Stack :
l  AWAL (Inisialisasi)
l  PUSH1 (Push untuk Stack1)
l  POP1 (Pop untuk Stack1)
l  PUSH2 (Push untuk Stack2)
l  POP2 (Pop untuk Stack2)

Kondisi 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 PUSH 1 (mengisi Stack 1)
l  Periksa apakah Stack1 BISA DIISI
               
                if (Top2 – Top1 > 1)                        
                                {              Top1 = Top1 + 1;
                                                S[Top1] = x;
                                }
                else
                                cout<<“Stack Penuh”;

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

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

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

Contoh program STACK

#include<iostream.h>
#include<conio.h>
#include<stdio.h>
//deklarasi 'STACK' dengan struct dan array
struct STACK
{
 int data [5];
        int atas;
};
//deklarasi variable 'tumpuk' dari struct
STACK tumpuk;

void main()
{
 clrscr();
   int pilihan,baru,i;
   //inisialisasi awal
   tumpuk.atas=-1;
   do
   {
    clrscr();
      cout<<"1.Push Data"<<endl;
      cout<<"2.Pop Data"<<endl;
      cout<<"3.Print Data"<<endl;
      cout<<endl;
      cout<<"Pilihan : " <<endl;
      cin>>pilihan;
      switch(pilihan)
      {
       case 1 :
         {
          if(tumpuk.atas==5-1)
            {
             cout<<"Tumpukan penuh";
               getch();
            }
            else
            {
             cout<<"Data yang akan di Push : ";
               cin>>baru;
               tumpuk.atas++;
               tumpuk.data[tumpuk.atas]=baru;
               }
               break;
               }
         case 2 :
         {
          if(tumpuk.atas==5-1)
            {
             cout<<"Tumpukan penuh";
               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 "<<endl;
               getch();
            }
            else
            {
             cout<<"Data = " <<endl;
               for(i=0;i<=tumpuk.atas;i++)
               {
                cout<<tumpuk.data[i]<<" ";
               }
               getch();
            }
            break;
         }
         default:
         {
          cout<<"Tidak ada dalam pilihan"<<endl;
         }
      }
   }
while(pilihan>=1 && pilihan<=3);
getch();
}


 Screenshot Program Stack









2 komentar:

  1. Perkenalkan, saya dari tim kumpulbagi. Saya ingin tau, apakah kiranya anda berencana untuk mengoleksi files menggunakan hosting yang baru?
    Jika ya, silahkan kunjungi website ini www.kbagi.com untuk info selengkapnya.

    Di sana anda bisa dengan bebas share dan mendowload foto-foto keluarga dan trip, music, video, filem dll dalam jumlah dan waktu yang tidak terbatas, setelah registrasi terlebih dahulu. Gratis :)

    BalasHapus