Stack
STACK (tumpukan) dapat di katakan
sebagai list yang operasi penghapusan dan penyisipan elemennya dilakukan di
satu ujung atau bisa juga di artikan sebagai suatu kumpulan data yang
seolah-olah ada data yang di letakkan di atas data yang lain.
Satu hal yang perlu kita ingat adalah bahwa kita bisa menambah
(menyisipkan) data, dan mengambil (menghapus) data lewat ujung yang sama yang
disebut sebagai ujung atas tumpukan (top
of stack). Stack bersifat LIFO
(Last In First Out) “Benda yang terakhir masuk ke dalam stack akan menjadi yang pertama
keluar dari stack
Operasi Stack
digunakan untuk menambah item pada stack pada
tumpukan paling atas
Ø
Pop
digunakan untuk mengambil item pada stack pada
tumpukan paling atas
Ø Print
digunakan untuk mencetak semua
data dalam tumpukan
Ø
IsEmpty
fungsi yang digunakan untuk mengecek apakah
stack sudah kosong
Ø IsFull
fungsi yang digunakan untuk mengecek apakah
stack sudah penuh
Contoh Stack
Contoh Stack dalam kehidupan sehari-hari adalah seperti tumpukan piring di sebuah restoran yang tumpukannya
dapat ditambah pada bagian paling atas dan jika mengambilnya pun dari bagian
paling atas pula
Inisialisasi
Stack
Pada mulanya isi top dengan -1,
karena array dalam C dimulai dari 0,
yang berarti stack adalah kosong. Top adalah suatu variabel
penanda dalam STACK
yang menunjukkan elemen teratas
Stack sekarang. Top Of Stack
akan selalu bergerak hingga mencapai MAX of STACK
sehingga menyebabkan stack penuh. Ilustrasi stack pada saat inisialisasi
ditunjukkan pada gambar di bawah ini:
Fungsi IsFull
Untuk memeriksa apakah stack sudah penuh, maka dapat dilakukan dengan
cara memeriksa top
of stack jika sudah
sama dengan MAX_STACK-1 maka
full. Jika belum (masih lebih kecil dari
MAX_STACK-1) maka belum full. Seperti ditunjukkan gambar di berikut ini:
Fungsi
Push
Untuk memasukkan elemen ke stack, selalu menjadi elemen teratas stack.
Tambah satu (increment) nilai top of
stack terlebih dahulu setiap kali ada penambahan elemen stack, asalkan stack
masih belum penuh, kemudian isikan
nilai baru ke
stack berdasarkan indeks
top of stack
setelah ditambah satu (diincrement). Seperti gambar di berikut ini
.
Fungsi
Pop
Untuk mengambil elemen teratas dari stack. Ambil dahulu nilai elemen
teratas stack dengan mengakses top of stack, tampilkan nilai yang akan diambil
terlebih dahulu, baru didecrement nilai top of stack sehingga jumlah elemen
stack berkurang. Seperti gambar di berikut ini
Fungsi
IsEmpty
Untuk memeriksa apakah data Stack masih kosong. Dengan cara memeriksa top of stack, jika masih -1 maka berarti data
Stack masih kosong!
Fungsi
Print
Untuk menampilkan semua elemen-elemen data Stack. Dengan cara me-loop semua nilai array secara terbalik, karena kita
harus mengakses dari indeks array tertinggi terlebih dahulu baru ke indeks yang
lebih kecil!
Stack ada dua jenis, yaitu :
1.
Single Stack
2.
Double Stack
- Single Stack
Single Stack dapat direpresentasikan menggunakan array satu dimensi. Prinsip proses
single stack adalah LIFO ( Last In First Out). Proses pada single stack yaitu, AWAL (Inisialisasi), PUSH (Insert, Masuk, Simpan, Tulis), POP (Delete, Keluar, Ambil, Baca/Hapus)
Ini adalah gambaran dari Kondisi Stack ditentukan oleh posisi atau isi TOP.
Algoritma
Single Stack
1.
Algoritma Push
If (Top < n-1)
{ Top = Top + 1;
S[Top] = x;
}
else
cout<<“Stack Penuh”;
2.
Algoritma Pop
if (Top > -1)
{ x = S[Top];
Top = Top - 1;
}
else
cout<<“Stack Kosong”;
ü Double
Stack
Double Stack
disebut juga Stack Ganda. Prinsip prosesnya LIFO (Last In First Out) baik untuk
stack 1 maupun stack 2. Proses pada Double Stack yaitu, AWAL (Inisialisasi),
PUSH1 (Push untuk Stack 1), POP1 (Pop untuk Stack 1), PUSH2 (Push Untuk Stack
2), POP2 (Pop untuk Stack 2).
Ini adalah gambaran dari Kondisi Double
Stack
Algoritma
a.
Algoritma Push 1 (mengisi Stack 1)
Periksa apakah Stack1 BISA DIISI
if
(Top2 – Top1 > 1)
{
Top1 = Top1 + 1;
S[Top1]
= x;
}
else
cout<<“Stack
Penuh”;
b.
Algoritma Pop 1 (mengambil isi Stack
1)
Periksa apakah Stack1 ADA ISINYA
if
(Top1 > -1)
{
x = S[Top1];
Top1
= Top1 - 1;
}
else
cout<<“Stack
Kosong”;
c.
Algoritma Push 2 (mengisi isi Stack
2)
Periksa apakah Stack2 BISA DIISI
if
(Top2 – Top1 > 1)
{
Top2 = Top2 - 1;
S[Top2]
= x;
}
else
cout<<“Stack
Penuh”;
d.
Algoritma Pop 2 (mengambil isi Stack
2)
Periksa apakah Stack2 ADA ISINYA
if
(Top2 < n)
{
x = S[Top2];
Top2
= Top2 + 1;
}
else
cout<<“Stack
Kosong”;
Contoh Program Single Stack
#include
<iostream.h>
#include
<conio.h>
int nilai[5];
//variabel global
int top, max;
//variabel global
int menu;
//variabel untuk menu
void create()
{
top = -1;
max = 4;
}
bool isFull()
{
if (top == max)
{
return
true;
}
else
{
return
false;
}
}
bool isEmpty()
{
if (top == -1)
{
return
true;
}
else
{
return
false;
}
}
void main()
{
create(); //panggil prosedur create,
set nilai awal STACK
home: //penanda/check point
clrscr(); //untuk hapus layar
cout<<"Pilih salah satu menu
dibawah ini : "<<endl;
cout<<"1. Push"<<endl;
cout<<"2. Pop"<<endl;
cout<<"3.
Print"<<endl;
cout<<"4.
Clear"<<endl;
cout<<"Masukkan pilihan anda
(1-4) : ";
cin>>menu;
switch(menu)
{
case
1:
if
(isFull() == true)
{
cout<<"STOP...STACK
Penuh..!!";
}
else
{
top++;
cout<<"Masukkan data ke
STACK : ";
cin>>nilai[top];
cout<<"Data
"<<nilai[top]<<" masuk ke STACK";
}
getch();
goto home;
break;
case 2:
if
(isEmpty() == true)
{
cout<<"STACK
kosong!";
}
else
{
cout<<"Data yang keluar
: ";
cout<<nilai[top];
top--;
}
getch();
goto home;
break;
case 3:
if
(isEmpty() == true)
{
cout<<"STACK
kosong, tidak dapat menampilkan data";
}
else
{
cout<<"Data yang masuk ke STACK :
"<<endl;
for(int
i=0; i<=top; i++)
{
cout<<nilai[i]<<"
";
}
}
getch();
goto home;
break;
case 4:
top
= -1;
cout<<"STACK sudah di
kosongkan";
getch();
goto home;
break;
}
getch();
}
Contoh Program Double Stack
#include
<iostream.h>
#include
<conio.h>
int nilai [5];
int top1, top2,
menu, stack, pop;
void create()
{
top1=-1;
top2=5;
stack=1;
pop=1;
}
bool isfull()
{
if(top2-top1==1)
{
return
true;
}
else
{
return
false;
}
}
bool isempty1()
{
if(top1==-1)
{
return
true;
}
else
{
return
false;
}
}
bool isempty2()
{
if(top2==5)
{
return
true;
}
else
{
return
false;
}
}
void main()
{
create();
home:
clrscr();
cout<<"1. Push"<<endl;
cout<<"2. Pop"<<endl;
cout<<"3.
Print"<<endl;
cout<<"4.
Clear"<<endl;
cout<<"Masukkan pilihan anda
(1-4) : ";
cin>>menu;
switch(menu)
{
case
1:
if(isfull()==true)
{
cout<<"Stack
Penuh !";
}
else
{
if
(stack==1)
{
top1++;
cout<<"Masukkan
data ke stack 1 : ";
cin>>nilai[top1];
stack++;
}
else if (stack==2)
{
top2--;
cout<<"Masukkan data
ke stack 2 : ";
cin>>nilai[top2];
stack--;
}
}
getch();
goto home;
break;
case 2:
if
(pop==1)
{
if(isempty1()==true)
{
cout<<"Stack
1 kosong !";
}
else
{
cout<<"Nilai
yang keluar dari stack 1 : "<<nilai[top1];
top1--;
pop++;
}
}
else if (pop==2)
{
if(isempty2()==true)
{
cout<<"Stack
2 kosong !";
}
else
{
cout<<"Nilai
yang keluar dari stack 2 : "<<nilai[top2];
top2++;
pop--;
}
}
getch();
goto home;
break;
case 3:
if(isempty1()==true)
{
cout<<"Stack
1 kosong !";
}
else
{
cout<<"Data
pada stack : ";
for(int
i=0; i<=top1; i++)
{
cout<<nilai[i]<<"
";
}
for (int i=(top1+1);
i<=(top2-1); i++)
{
cout<<"
_ ";
}
}
if(isempty2()==true)
{
cout<<"Stack
2 kosong !";
}
else
{
for(int
i=4; i>=top2; i--)
{
cout<<nilai[i]<<"
";
}
}
getch();
goto home;
break;
case 4:
top1=-1;
top2=5;
cout<<"Stack sudah kosong
!";
getch();
goto home;
break;
}
getch();
}
http://www.lecturer.ukdw.ac.id/anton/download/TIstrukdat4.ppt
yuhuuuu...bermanfaat sekali
BalasHapusLem lcd touch