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
- SismoroHeri, Iskandar Kusrini. 2004 Struktur data dan Pemograman dengan PASCAL.Yogyakarta: ANDI Yogyakarta.
- Santosa, Insap. P. Ir. 1992 Struktur data menggunakan TURBO PASCAL 6.0 Yogyakarta : ANDI yogyakarta.
Tidak ada komentar:
Posting Komentar