Contoh nyatanya bisa kita lihat di kehidupan sehari-hari misalnya tumpukan piring. Seorang ibu rumah tangga yang akan mencuci piring meletakkan sebuah piring kemudian disusul dengan menumpuk piring yang ke 2 diatas piring pertama dan seterusnya hingga piring ke 5. Ketika piring akan diambil untuk dicuci maka tentu saja yang pertama kali diambil adalah piring yang ke 5 atau tumpukan teratas.
Sama halnya dengan data pada konsep stack di algoritma dan pemrograman. Stack (tumpukan) inilah yang menerapkan konsep yang kita kenal dengan LIFO (Last-In-First-Out) atau FCLS (First-Come-Last-Serve), artinya elemen struktur yang dimasukkan ke dalam rangkaian terakhir kali maka akan muncul pertama kali apabila ditampilkan/dikeluarkan.
Pada konsep Last-In-First-Out, yang terakhir masuk yang pertama kali keluar. Jika ada sebanyak NOEL elemen pada sebuah stack, maka elemen ke-NOEL merupakan elemen TOP.
Berikut ini adalah operator-operator atau nama method yang biasa digunakan dalam pemrograman algoritma stack.
- PUSH: penyisipan (Memasukkan elemen).
- POP: penghapusan (Mengeluarkan elemen puncak).
- IsEmpty: operator yang memeriksa apakah stack kosong.
- IsFull: operator yang memeriksa apakah stack penuh.
- Clear: operator untuk menghapus stack.
Berikut contoh program stack pada c++:
Listing code program 1:
#include "iostream.h"
#include "stdio.h"
#include "conio.h"
#define size 5
struct stack
{
int a[size];
int top;
};
typedef struct stack STACK;
void push(STACK *p,int value) /* PUSH OPERATION */
{
if(p->top==size-1)
cout<<"Stack Penuh!";
else
p->a[++p->top]=value;
}
int pop(STACK *p) /* POP OPERATION */
{
if (p->top==-1)
{
cout<<"Stack Kosong!";
return -1;
}
else
return p->a[p->top--];
}
void display (STACK *p) /*DISPLAY OPERATION */
{
int i;
if(p->top==-1)
cout<<"\nStack Kosong!\n";
else
cout<<"\nIsi Stack Adalah: \n";
for (i=p->top;i>=0; --i)
cout<
}
void main()
{
STACK s ;
int x,i;
s.top=-1;
char pil;
do {
clrscr();
printf("1. Tambah\n");
printf("2. Hapus satu per satu\n");
printf("3. Lihat Data\n");
printf("4. Hapus Data\n");
printf("5. Berhenti\n");
printf("Silahkan masukkan pilihan anda (1-5)... ");
pil=getche();
if(pil!='1' && pil !='2' && pil !='3' && pil!='4' && pil!='5' )
printf("\n\nAnda salah mengetikkan inputan...\n");
else
{
if(pil=='1')
{
cout<<"\nMasukkan Element: ";cin>>x;
push (&s,x);
}
else
{
if(pil=='2')
{
x=pop(&s);
if(x!=-1)
cout<<"\nElement yang Dihapus: "<
}
else
{
if(pil=='3')
{
display(&s);
getch();
}
else
{
if(pil=='4')
{
if(s.top==-1)
printf("\nStack Kosong!\n");
else
printf("\nStack Dihapus!\n");
for (i=s.top;i>=0; --i)
printf("Element Yang Dihapus adalah %d\n",pop(&s));
s.top=-1;
getch();
}}}
}}}
while(pil!='5');
}
Output:
Listing code program 2:
#include "stdio.h"
#include "string.h"
#include "conio.h"
#define DATA_MAX 100
char nip[DATA_MAX][5];
char nama[DATA_MAX][31];
char asal[DATA_MAX][16];
float gaji[DATA_MAX];
int urutan;
char cariNIP[5];
void main()
{
char pil, menu = 0;
int i;
urutan = -1;
while ( menu != '5' )
{
puts( "1. Tambah data" );
puts( "2. Edit data" );
puts( "3. Hapus data" );
puts( "4. Daftar" );
puts( "5. Keluar" );
printf( "\nPilihan: " ); scanf( "%c", &menu );
fflush( stdin );
switch ( menu ) {
case '1': ++urutan;
puts( "Tambah data" );
printf( "NIP: " ); gets( nip[urutan] );
printf( "Nama: " ); gets( nama[urutan] );
printf( "Asal: " ); gets( asal[urutan] );
printf( "Gaji: " ); scanf( "%f", &gaji[urutan] );
fflush( stdin );
puts( "\nSelesai. Tekan sembarang tombol" );
getch();
break;
case '2': puts( "Edit data" );
printf( "NIP: " ); gets( cariNIP );
for ( i = 0; i <= urutan; i++ )
if ( strcmp(cariNIP, nip[i]) == 0 ) {
puts( "Ketemu" );
printf( "Nama: " ); gets( nama[i] );
printf( "Asal: " ); gets( asal[i] );
printf( "Gaji: " ); scanf( "%f", &gaji[i] );
fflush( stdin );
puts( "\nSelesai. Tekan sembarang tombol" );
getch();
break;
}
break;
case '3': puts( "Hapus data" );
printf( "NIP: " ); gets( cariNIP );
for ( i = 0; i <= urutan; i++ )
if ( strcmp(cariNIP, nip[i]) == 0 ) {
puts( "Ketemu" );
printf( "Nama: %s \nAsal: %s \nGaji: %f", nama[i], asal[i], gaji[i] );
printf( "\n\nHapus data (Y/T)? " );
pil = getche();
if ( pil == 'Y' || pil == 'y' ) {
for ( int j = i+1; j <= urutan; j++ ) {
strcpy( nip[j-1], nip[j] );
strcpy( nama[j-1], nama[j] );
strcpy( asal[j-1], asal[j] );
gaji[j-1] = gaji[j];
}
--urutan;
}
break;
}
break;
case '4': puts( "Lihat data" );
i = 0;
while ( i <= urutan ) {
printf( "NIP: %s\n", nip[i] );
printf( "Nama: %s\n", nama[i] );
printf( "Asal: %s\n", asal[i] );
printf( "Gaji: %f\n\n", gaji[i++] );
}
puts( "Selesai. Tekan sembarang tombol" );
getch();
break;
}
}
}
Listing code program stack 3:
#include "iostream.h"
#include "conio.h"
#include "stdlib.h"
int top,i;
char key,temp,e;
char stack[10];
void delay();
void pushanim()
{
for(i=0;i<=17; i++)
{
gotoxy(22+i,7);cout<<" ";
gotoxy(23+i,7); cout<
for(i=1;i<=(14-top);i++)
{
delay();
gotoxy(40,6+i); cout<<" ";
gotoxy(40,7+i); cout<
}
void popanim(char temp)
{
for(i=1;i<=(14-top);i++)
{
delay();
gotoxy(40,22-i-top); cout<<" ";
gotoxy(40,21-i-top); cout<
for(i=1;i<=19;i++)
{
delay();
gotoxy(38+i,7); cout<<" ";
gotoxy(39+i,7); cout<
gotoxy(58,7);cout<<" ";
}
void push(char e)
{
top=top+1;
stack[top]=e;
pushanim();
}
void pop(char e)
{
if(top !=0)
{
e=stack[top]; popanim(e);
top=top-1;
}
else
{
gotoxy(1,7); cout<<"stack telah kosong"<
}
}
void main()
{
clrscr();
cout<<"Animasi Stack"<
gotoxy(59,8); cout<<"=";
gotoxy(37,9); cout<<"|| ||";
for(i=1;i<=11;i++)
{
gotoxy(38,10+i);
if(i==11)
cout<<"|___|";
else
cout<<"| |";
}
top=0;
do
{
input:
gotoxy(1,5);
cout<<"masukkan pilihan anda[1/2/3] : ";
key=getche();
if(int(key)==27 || key=='3')
break;
else if(key=='1')
{
if(top != 10)
{
gotoxy(1,7); cout<<"masukkan suatu huruf : ";
cin>>temp;
push(temp);
gotoxy(1,7); cout<<" ";
}
else
{
gotoxy(1,7); cout<<"stack penuh";
getch();
gotoxy(1,7); cout<<" ";
}
}
else if(key=='2')
pop(temp);
else
goto input;
}while(1);
getch();
}
void delay()
{
for(int y=1;y<100;y++)
for(int x=1;x<100;x++)
for(int p=1;p<100;p++)
cout<<"";
}