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 gambar di bawah 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).
1) 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.
2) 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 :
http://www.bardansalam.com/2017/07/stack-tumpukan-pada-c.html
http://suputradwipratama274.blogspot.com/2015/06/v-behaviorurldefaultvmlo.html
http://suputradwipratama274.blogspot.com/2015/06/v-behaviorurldefaultvmlo.html
0 komentar: