Pengertian Stack
Pengertian Stack (Tumpukan) adalah suatu stuktur data yang
penting dalam pemrograman yang mempunyai sifat LIFO (Last In First Out), Benda
yang terakhir masuk ke dalam stack akan menjadi benda pertama yang dikeluarkan
dari stack.
Stack (Tumpukan) adalah list linier yang dikenali elemen
puncaknya dan Aturan penyisipan dan penghapusan elemennya tertentu.
Konsep STACK digunakan dalam struktur data.
Dalam Struktur Stack digunakan istilah :
l PUSH : Simpan,Masuk,Insert,Tulis
l POP : Ambil,Keluar,Delete,Baca
Ada dua jenis Stack yaitu:
l Single Stack
l Double Stack
Single Stack
Single Stack dapat direpresentasikan menggunakan array satu
dimensi.
Illustrasi dari single stack :
Prinsip proses Single Stack adalah LIFO (Last In First
Out)
Proses pada Single Stack :
l AWAL (Inisialisasi)
l PUSH (Insert, Masuk, Simpan, Tulis)
l POP (Delete, Keluar, Ambil, Baca/Hapus)
Kondisi Stack ditentukan oleh posisi atau isi TOP.
Kondisi Stack
|
Posisi TOP
|
KOSONG
|
Top = -1
|
PENUH
|
Top = n-1
|
BISA DIISI
|
Top < n-1
|
ADA ISINYA
|
Top > -1
|
Algoritma PUSH
if (Top <
n-1)
else
cout<<“Stack
Penuh”;
Algoritma POP
if (Top >
-1)
{
x = S[Top];
Top
= Top - 1;
}
else
cout<<“Stack
Kosong”; {
Top = Top + 1;
S[Top]
= x;
}
Double Stack
Double Stack atau bisa disebut juga Stack Ganda
Prinsip proses Double Stack adalah LIFO (Last In First
Out) baik untuk Stack1 maupun untuk Stack2
Proses pada Double Stack :
l AWAL (Inisialisasi)
l PUSH1 (Push untuk Stack1)
l POP1 (Pop untuk Stack1)
l PUSH2 (Push untuk Stack2)
l POP2 (Pop untuk Stack2)
Kondisi Double Stack :
Kondisi Stack
|
Posisi TOP
|
Stack1 KOSONG
|
Top1 = -1
|
Stack2 KOSONG
|
Top2 = n
|
Stack PENUH (baik Stack1 maupun Stack2 tidak BISA DIISI)
|
Top2 – Top1 = 1
|
Stack BISA DIISI (baik Stack1 maupun Stack2 BISA DIISI)
|
Top2 – Top1 > 1
|
Stack1 ADA ISINYA
|
Top1 > -1
|
Stack2 ADA ISINYA
|
Top2 < n
|
Algoritma PUSH 1 (mengisi Stack 1)
l Periksa apakah Stack1 BISA DIISI
if
(Top2 – Top1 >
1)
{ Top1
= Top1 + 1;
S[Top1]
= x;
}
else
cout<<“Stack
Penuh”;
Algoritma POP 1 (mengambil isi Stack 1)
l Periksa apakah Stack1 ADA ISINYA
if
(Top1 > -1)
{ x
= S[Top1];
Top1
= Top1 - 1;
}
else
cout<<“Stack
Kosong”;
Algoritma PUSH 2 (mengisi Stack 2)
l Periksa apakah Stack2 BISA DIISI
if
(Top2 – Top1 >
1)
{ Top2
= Top2 - 1;
S[Top2]
= x;
}
else
cout<<“Stack
Penuh”;
Algoritma POP 2 (mengambil isi Stack 2)
l Periksa apakah Stack2 ADA ISINYA
if
(Top2 < n)
{ x
= S[Top2];
Top2
= Top2 + 1;
}
else
cout<<“Stack
Kosong”;
Contoh program STACK
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
//deklarasi 'STACK' dengan struct dan array
struct STACK
{
int data [5];
int atas;
};
//deklarasi variable 'tumpuk' dari struct
STACK tumpuk;
void main()
{
clrscr();
int pilihan,baru,i;
//inisialisasi awal
tumpuk.atas=-1;
do
{
clrscr();
cout<<"1.Push Data"<<endl;
cout<<"2.Pop Data"<<endl;
cout<<"3.Print Data"<<endl;
cout<<endl;
cout<<"Pilihan : " <<endl;
cin>>pilihan;
switch(pilihan)
{
case 1 :
{
if(tumpuk.atas==5-1)
{
cout<<"Tumpukan
penuh";
getch();
}
else
{
cout<<"Data
yang akan di Push : ";
cin>>baru;
tumpuk.atas++;
tumpuk.data[tumpuk.atas]=baru;
}
break;
}
case 2 :
{
if(tumpuk.atas==5-1)
{
cout<<"Tumpukan
penuh";
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 "<<endl;
getch();
}
else
{
cout<<"Data
= " <<endl;
for(i=0;i<=tumpuk.atas;i++)
{
cout<<tumpuk.data[i]<<" ";
}
getch();
}
break;
}
default:
{
cout<<"Tidak
ada dalam pilihan"<<endl;
}
}
}
while(pilihan>=1 && pilihan<=3);
getch();
}
Hasil Outputnya :