
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.
1. 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
|
Reference :
~~~TERIMAKSIH~~~

0 komentar:
Posting Komentar