A.
Pengertian STACK
Secara sederhana stack atau tumpukan bisa diartikan sebagai kumpulan data
yang seolah-olah diletakkan di atas data yang lain. STACK adalah salah satu
list linear dalam struktur data yang digunakan untuk menyimpan dan mengambil
data dengan konsep LIFO (Last In First Out). Satu hal yang perlu diingat bahwa
kita bisa menambah (menyisipkan)data dan mengambil (menghapus) data melalui
ujung yang sama, yang disebut sebagai ujung atas stack.
Untuk menjelaskan pengertian diatas, kita ambil contoh sebagai berikut.
Misalkan kita mempunyai 2 buah kotak yang ditumpuk, sehingga kotak yang satu
akan ditumpuk diatas kotak yang lainnya. Jika kemudian tumpukan 2 kotak tadi,
ditambah kotak ke-tiga, ke-empat, ke-lima dan seterusnya, maka akan diperoleh
sebuah tumpukan kotak yang terdiri dari N kotak.
Secara sederhana, sebuah stack
bisa diilustrasikan seperti ini:
Dari gambar diatas,bisa dilihat bahwa kotak B terletak diatas kotak A dan
ada dibawah kotak C. Kotak D terletak diatas kotak C, kotak E terletak diatas
kotak D dan seterusnya sampai kotak terakhir. Dari gambar diatas menunjukkan
bahwa dalam stack hanya bisa menambah atau mengambil sebuah kotak lewat satu
ujung, yaitu bagian atas, dan yang menjadi ujungnya adalah kotak F. Jadi jika
ada kotak lain yang akan disisipkan, maka kotak tersebut akan dletakkan
diatas kotak F, dan jika ada kotak yang akan diambil, maka kotak F yang pertama
akan diambil.
B.
OPERASI PADA STACK
Ada 2 operasi dasar yang bisa dilaksanakan pada sebuah stack, yaitu operasi
menyisipkan data(push) dan operasi menghapus data(pop).
Operasi Push
prosedur ini terlebih dahulu akan
menaikkan posisi TOP satu level ke atas. Misalkan kondisi stack masih
kosong (TOP = 0), lalu prosedur push akan menaikkan posisi TOP satu level ke
atas, yakni ke posisi 1 (TOP = 1), baru setelah itu data dimasukkan ke dalam array
pada indeks ke-1 (yakni indeks dimana TOP berada).
Berikut adalah deklarasi prosedur push dalam
Bahasa C:
voidpush(int
x)
{
tumpukan.TOP
= tumpukan.TOP + 1;
tumpukan.data[tumpukan.TOP]
= x;
}
|
Perintah push digunakan untuk memasukkan data ke dalam stack. Untuk lebih
jelasnya perhatikan ilustrasi berikut ini. Misalkan kita mempunyai data-data 3,
25 dan 9 dalam stack dengan posisi 3 paling bawah dan 9 paling atas. Dan kita
akan memasukkan data 34 ke dalam stack tersebut. Tentu saja data 34 akan
diletakkan di atas data 9.
Operasi Pop
Operasi Pop adalah operasi untuk menghapus elemen yang terletak pada posisi
paling atas dari sebuah stack. Prosedur ini berfungsi untuk mengeluarkan/
menghapus nilai terakhir (yang berada pada posisi paling atas) dari stack,
dengan cara menurunkan nilai TOP satu level ke bawah. Misalkan TOP berada pada indeks ke-5, maka ketika akan
mengeluarkan/ menghapus data pada
posisi paling atas (pada posisi TOP), prosedur ini akan menurunkan posisi TOP ke indeks array ke-4. Berikut
deklarasi prosedur pop dalam Bahasa C:
void pop()
{
tumpukan.TOP
= tumpukan.TOP - 1;
}
|
Untuk lebih jelasnya bisa langsung
dilihat pada contoh program STACK :
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
struct
stack
{
int data[5];
int atas;
};
stack
tumpuk;
void
main()
{
clrscr();
int pilihan, baru, i;
tumpuk.atas=-1;
do
{
clrscr();
cout<<"1. PUSH
DATA"<<endl;
cout<<"2. POP
DATA"<<endl;
cout<<"3. PRINT
DATA"<<endl<<endl;
cout<<"MASUKKAN PILIHAN :
";
cin>>pilihan;
switch (pilihan)
{
case
1 :
if(tumpuk.atas==5-1)
{
cout<<"TUMPUKAN
PENUH";
getch();
}
else
{
cout<<"MASUKKAN
DATA : ";
cin>>baru;
tumpuk.atas++;
tumpuk.data[tumpuk.atas]=baru;
}
break;
case 2 :
if(tumpuk.atas==-1)
{
cout<<"TUMPUKAN
KOSONG";
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";
getch();
}
else
{
cout<<"DATA
- "<<endl;
for(i=tumpuk.atas; i>=0;
i--)
{
cout<<tumpuk.data[i]<<ends;
}
getch();
}
break;
default :
cout<<"TIDAK
ADA DALAM PILIHAN";
break;
}
}
while((pilihan>=1) &&
(pilihan<=3));
getch();
}
|
C.
PEMANFAATAN STACK
Salah satu pemanfaatan stack adalah untuk menulis ungkapan dengan
menggunakan notasi tertentu. Seperti kita ketahui, dalam penulisan ungkapan
numeris, kita selalu menggunakan tanda kurung untuk mengelompokkan bagian mana
yang akan dikerjakan terlebih dahulu.
Sebagai contoh, perhatikan ungkapan berikut ini.
(C+D) * (E-F)
Dari contoh diatas (C+D) akan dikerjakan lebih dahulu, kemudian baru (E-F)
dan hasilnya akan dikalikan. Lain halnya dengan contoh berikut ini : C+D*E-F
D*E akan dikerjakan terlebih dahulu, kemudian diikuti yang lain. Dalam hal
ini pemakaian tanda kurung sangat penting karena akan mempengaruhi hasil akhir.
Cara penulisan ungkapan sering disebut dengan notasi infix , yang artinya bahwa operator ditulis diantara 2 operator. Seorang
ahli matematika yang bernama Jan Lukasiewiccz kemudian mengembangkan suatu cara
penulisan ungkapan numeris yang kemudian dikenal dengan nama notasi prefix,
yang artinya adalah bahwa operator ditulis sebelum kedua operand yang akan
disajikan.
Perhatikan contoh dari notasi infix dan prefix berikut ini:
Infix Prefix
A+B +AB
A+B-C -+ABC
(A+B)*(C-D) *+AB-CD
|
Referensi :
Tidak ada komentar:
Posting Komentar