STACK

by

STACK
Stack (Tumpukan) adalah kumpulan elemen-elemen data yang disimpan dalam satu lajur linear.
Kumpulan elemen-elemen data hanya boleh diakses pada satu lokasi saja yaitu  posisi ATAS (TOP) tumpukan.
   Tumpukan digunakan dalam algoritma pengimbas (parsing), algoritma penilaian (evaluation) dan algoritma penjajahan balik (backtrack).
Elemen-elemen di dalam tumpukan dapat bertipe integer, real, record dalam bentuk sederhana atau terstruktur.
   Stack adalah suat tumpukan dari benda.
Konsep utamanya adalah LIFO (Last In First Out), benda yang terakhir masuk dalam stack akan menjadi benda pertama yang dikeluarkan
dari stack. Tumpukan disebut juga “Push Down Stack” yaitu penambahan elemen baru (PUSH) dan penghapusan elemen dari tumpukann(POP). Contoh pada PDA (Push Down Automaton).
   Sistem pada pengaksesan pada tumpukan menggunakn system LIFO (Last In First Out), artinya elemen yang terakhir masuk itu yang akan pertama dikeluarkan dari tumpukan (Stack).
Ilustrasi tumpukan (Stack) dapat digambarkan seperti tumpukan CD atau tumpukan sate. Stack merupakan suatu susunan koleksi data dimana dapat ditambahkan dan dihapus selalu dilakukan pada bagian akhir data, yang disebut dengan Top Of Stack.
   Sebelum struktur data tumpukan ini bisa digunakan, harus dideklarasikan dahulu dalam kamus data. Ada beberapa cara pendeklarasian struktur data ini, salah satunya dengan menggunakan tata susunan linear (larik) dan sebuah variable, yang dikemas dalam tipe data record.
Stack (tumpukan) adalah struktur data bertipe record yang terdiri dari field elemen,  bertipe larik/array dengan indek dari 1 sampai dengan MaksTum (Maksimum Tumpukan), atas, bertipe interger berkisar dari 0 (saat kosong) sampai dengan MaksTum (Maksimum Tumpukan). 


Oprasi - Oprasi Pada Stack

 Operasi yang sering diterapkan pada struktur data Stack (Tumpukan) adalah Push dan Pop. Operasi
 –
 operasi yang dapat diterapkan adalah sebagai berikut :

Push                  : digunakan untuk menembah item pada Stack pada Tumpukan paling atas.

Pop                   : digunakan untuk mengambil item pada Stack pada Tumpukan paling atas.

Clear                : digunakan untuk mengosongkan Stack.

Create Stack    : membuat Tumpukan baru S, dengan jumlah elemen kosong.

MakeNull        : mengosongkan Tumpukan S, jika ada elemen maka semua elemen dihapus.

IsEmpty           : fungsi yang digunakan untuk mengecek apakah Stack sudah kosong.

Isfull         : fungsi yang digunakan untuk mengecek apakah Stack sudah penuh. Pada proses Push, Tumpukan (Stack) harus diperiksa apakah jumlah elemen sudah mencapai masimum atau tidak.
Jika sudah mencapai maksimum maka OVERFLOW, artinya Tumpukan penuh tidak ada elemen yang dapat dimasukkan ke dalam Tumpukan. Sedangkan  pada proses Pop, Tumpukan harus diperiksa apakah ada elemen yang hendak dikeluarkan atau tidak. Jika tidak ada maka UNDERFLOW, artinya tumpukan kosong tidak ada elemen yang dapat diambil.


Contoh coding stack :



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

judul()
{
cout<<"Name :  \nClass : \nNim : "<<endl<<"\n\n";
return 0;
}

main()
{

int plh;
int top=0, i;

int sisa;
char nm[20][20],nim[20][20],kls[20][20];

do{
clrscr();
judul();
cout<<"===================================\n";
cout<<" MENU OPTIONS\n";
cout<<"===================================\n";
cout<<"1.PUSH\n";
cout<<"2.POP\n";
cout<<"3.ISFULL/ISEMPTY\n";
cout<<"4.CLEAR \n";
cout<<"5.VIEW \n";
cout<<"6.EXIT\n";
cout<<"===================================\n";
cout<<"Input Options : "; cin>>plh;
if (plh<=6)
{
switch(plh)
{
case 1:
if(top==10)
{
clrscr();
judul();
cout<<"sory,data is full";
getch();
}
else
{
cout<<"\nInput name : "; gets(nm[top+1]);
cout<<"Input NIM : "; cin>>nim[top+1];
cout<<"Input Class : "; cin>>kls[top+1];

clrscr();
judul();
cout<<"data has been entered";
getch();
top++;
}
break;

case 2:

if(top<1)
{
clrscr();
judul();
cout<<"Data is Empty";
}
else
{
cout<<"\nDeleted data :"<<top<<"\n\n";
cout<<"Name : "<<nm[top]<<endl;
cout<<"NIM : "<<nim[top]<<endl;
cout<<"Class : "<<kls[top]<<endl;
top--;
getch();
clrscr();
judul();
cout<<"data has been Deleted";
}
getch();
break;

case 3:
if(top==10)
{
clrscr();
judul();
cout<<"Data has been Full";
}
else if(top>=1)
{
sisa=10-top;
clrscr();
judul();
cout<<"Now Data is still not fully, you have a "<<sisa<<" data space";
}
else if(top==0)
{
clrscr();
judul();
cout<<"Now Data is Empty";
}
getch();
break;

case 4:
clrscr();
judul();
top=0;
cout<<"Data has removed all";
getch();
break;

case 5:
cout<<"NO || NAME || NIM || CLASS ||\n";
if (top==0)
cout<<"Data Is Empty";
else
for(i=1; i<=top; i++)
{
cout<<setiosflags(ios::left)<<setw(8)<<i;
cout<<setiosflags(ios::left)<<setw(17)<<nm[i];
cout<<setiosflags(ios::left)<<setw(17)<<nim[i];
cout<<setiosflags(ios::left)<<setw(10)<<kls[i]<<endl;
}

getch();
break;

case 6:
cout<<"\n\nEXIT.........";
getch();
break;

}
}
else
{
cout<<"incorrect Option , Please Input 1-9";
getch();
}
}
while(plh!=6);


}

Hasil 
Source : http://programmers.stackexchange.com/questions/147645/what-is-the-difference-between-an-array-and-a-stack