Kamis, 04 Juni 2015

MATERI STACK DAN CONTOH PROGRAMNYA

STACK

STACK (tumpukan) dapat di katakan sebagai list yang operasi penghapusan dan penyisipan elemennya dilakukan di satu ujung. atau bisa juga di artikan sebagai suatu kumpulan data yang seolah-olah ada data yang di letakkan di atas data yang lain. Satu hal yang perlu kita ingat adalah bahwa kita bisa menambah (menyisipkan) data, dan mengambil (menghapus) data lewat ujung yang sama, yang disebut sebagai ujung atas tumpukan (top of stack). Dalam kehidupan sehari-hari terdapat banyak kejadian yang mempunyai sifat seperti stack, untuk lebih memahami pengertian stack kita ambil contoh sebagai berikut:
Perhatikan sebuah tumpukan piring di sebuah warung makan. Piring-piring tersebut tersusun rapat dari atas ke bawah (membentuk barisan beruruntan). Setiap kali ada pembeli datang, maka iring yang paling atas akan di ambil (menghapus elemen) yang berarti mengurangi jumlah piring dalam tumpukan. Bila tumpukan itu sudah habis atau tinggal sedikit, maka pegawai warung akan menambahkan piring lain yang masih bersih (menambah elemen). Piring yang terakhir kali dimasukan pasti akan terletak ditumpukan paling atas dan piring yang terletak paling atas dalam tumpukan itu pasti merupakan piring yang terakhir kali dimasukan.

Kesimpulannya adalah penambahan dan penghapusan elemen hanya dapat di lakukan di ujung atas tumpukan piring. Proses seperti ini biasa disebut Last In Firts Out (LIFO).

Operasi Pada Tumpukan (stack)
Ada dua operasi dasar yang bisa  digunakan pada sebuah tumpukan, yaitu operasi menyisipkan data atau memPush data dan operasi menghapus data atau memPop data.
·         Operasi Push
Dengan penyajian tumpukan seperti diatas, maka operasi Push dapat diimplementasikan, yaitu:
Procedure PUSH (var T : Tumpukan; X : integer);

Begin T.Atas := T.Atas + 1 T.Isi [T.Atas] := X
       End;
Prosedur diatas akan menyiapkan tempat untuk X yang akan diPush kedalam tumpukan, yaitu dengan menambah nilai medanT. Atas dengan 1 dan kemudian menyisipkan X kedalam larik T.Isi. tetapi jika suatu saat nilai T.Atas sama dengan MaxElemen dan kita akan memPush lagi, maka akan terjadi overflow pada larik T.Isiberhubung deklarasi banyaknya elemen larik tidak mencukupi .
Pada proseur diatas perlu ditambahkan dengan testing untuk memastikan bahwa sebelum suatu data diPush nilai T.Atas belum mencapai MaxElemen. Prosedure diatas perlu diubah menjadi:

Procedure PUSH (var T : Tumpukan; X : integer); Begin if T.Atas = MaxElemen then writeln (‘TUMPUKAN SUDAH PENUH’)
           else
               begin 
                    T.Atas := T.Atas + 1; T.Isi [T.Atas] := X

          End
       end;
Dengan ditambahnya testing untuk mencetak nilai T.Atas, maka prosedur di atas menjadi lebih sempurna.
            Kita juga bisa mengubah pesan yang ditampilkan mengunakan statemen writelndengan kata lain yang bertipe boolean, sehingga pesan salahnya kita letakkan pada program utama .
Pemanggilan prosedur diatas dari program utama atau dari bagian lain dilaksanakan dengan:
PUSH (T, Penuh, X);
Dengan T adalah perubah bertipe tumpukan, penuh bertipe boolean dengan X bertipe integer. Berdasarkan nilai perubah penuh bisa ditentukan langkah selanjutnya yang perlu diambil.

Operasi Pop

        Operasi popAdalah operasi untuk menghapus elemen yang terletak pada posisi  paling atas dari sebuah tumpukan.  Sama halnya dengan operasi Push, maka dengan deklarasi tumpukan di atas prosedur untuk operasi Pop bisa diimplementasikan, yaitu:

Prosedure Pop (var T : Tumpukan ); Begin T.Atas := T.Atas – 1 end;

       Timbul pertanyaan, seandainya tumpukan sudah kosong lalu apa yang akan diPop? Jawabannya tentu saja adalah tidak mungkin memPop suatu tumpukan jika tumpukan tersebut sudah kosong. prosedur diatas perlu ditambah testing untuk mencetak kosong tidaknya sebuah tunpukan sebelum proses memPop suatu elemen tumpukan dilaksanakan.
Tumpukan yang kosong ditunjukan dengan nilai T.Atas sama dengan 0. Sehingga kita bisa melengkapi prosedur diatas menjadi:
Prosedur Pop (var T : Tumpukan);

Begin
            if  T.Atas = 0 then writeln (‘TUMPUKAN SUDAH KOSONG’)
           else
            T.Atas : = T.Atas – 1
End;
            Cara lain untuk melihat kosong tidaknya tumpukan adalah dengan membuat suatu fungsi yang menghasilkan suatu data yang bertipe boolean. Cara ini lebih disarankan dari cara di atas, karena dengan mengetahui nilai fungsi tersebut kita segera bisa tahu kosong tidaknya suatu tumpukan. alasan lain adalah supaya sifat modularitas program tetap dijalankan.  Kecuali itu sering akli kita juga perlu mengetahui nilai data yang baru saja diPop.

CONTOH PROGRAM DENGAN STACK


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

main()
{
char stack1[9];
int i;

//Inputan Data
cout<<"\nCONTOH PROGRAM PEMBALIKAN DATA DENGAN STACK";
cout<<"\n";
cout<<"================================================";

cout<<"\nData Masukkan : ";
cin>>stack1;

cout<<endl;

//Menampilkan data
cout<<"\nPembalikan Data :";
for(i=9;i>=0;i--)
{
cout<<stack1[i]<<"";
}
cout<<"";
cout<<"\n====================";
cout<<"\n";
cout<<"\nAndreas Teresna";
cout<<endl;
getch();
} 




DAFTAR PUSTAKA


  1. SismoroHeri, Iskandar Kusrini. 2004  Struktur data dan Pemograman dengan PASCAL.Yogyakarta: ANDI Yogyakarta.
  2. Santosa, Insap. P. Ir. 1992 Struktur data menggunakan TURBO PASCAL 6.0 Yogyakarta : ANDI yogyakarta.

Tidak ada komentar:

Posting Komentar