STACK
Stack atau tumpukan sebagai list dimana penambahan dan pengambilan elemen hanya
dilakukan pada satu sisi yang disebut top (puncak) dari stack.
Dua operasi dasar pada
stack adalah PUSH (operasi pemasukan elemen ke dalam stack) dan POP (operasi
pengambilan satu elemen dari dalam stack). Stack terdiri dari 2 jenis yaitu :
1.
Single Stack
2.
Double Stack
a. Single Stack
Single Stack dapat
direpresentasikan menggunakan array satu dimensi. Pada single stack berlaku
aturan LIFO (Last In First Out), yaitu elemen yang terakhir masuk akan pertama
kali diambil atau dilayani.
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)
{
Top = Top + 1;
S[Top] = x;
}
else
cout<<“Stack
Penuh”;
ALGORITMA
POP
if (Top > -1)
{
x = S[Top];
Top = Top - 1;
}
else
cout<<“Stack
Kosong”;
l Contoh
Program stack memeriksa kelengkapan pasangan kurung buka dan kurung tutup suatu
pernyataan aritmatika :
Misal :
Pernyataan
benar : (a+b)*(c-d)/e
Pernyataan
salah : (a+b * (c-d)/e
#include <conio.h>
#include <iostream.h>
void main()
{
char kata[100];
cout<<"Inputkan Rumus Aritmatika :
";
cin.getline(kata, 100);
int jumlahkurungtutup = 0, jumlahkurungbuka = 0;
for (int i = 0; i < strlen(kata); i++)
{
if(kata[i] =='(')
jumlahkurungtutup = jumlahkurungtutup +
1;
else if(kata[i] ==')')
jumlahkurungbuka = jumlahkurungbuka + 1;
}
if(jumlahkurungbuka == jumlahkurungtutup)
cout<<"Rumus Aritmatika BENAR";
else
cout<<"Rumus Aritmatika SALAH";
getch();
}
b. Double Stack
Double Stack atau Stack
Ganda adalah stack yang hanya terdiri dari dua single stack. Bila stack ini direpresentasikan
dengan array, maka pengisian dan penghapusan harus melalui salah satu arah.
Di dalam proses double
stack terdapat lima macam proses utama, yaitu :
– Inisialisasi
– PUSH1 (Proses Push untuk Single Stack
pertama)
– POP1 (Proses Pop untuk Single Stack
pertama)
– PUSH2 (Proses Push untuk Single Stack
kedua)
– POP2 (Proses Pop untuk Single Stack
kedua)
Kondisi dari 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 PUSH1
(mengisi Stack1)
·
Periksa apakah Stack1 BISA DIISI
if (Top2 – Top1 > 1)
{ Top1 = Top1 + 1;
S[Top1] = x;
}
else
cout<<“Stack Penuh”;
Algoritma POP1 (mengambil
isi Stack1)
·
Periksa apakah Stack1 ADA ISINYA
if (Top1 > -1)
{ x = S[Top1];
Top1 = Top1 - 1;
}
else
cout<<“Stack Kosong”;
Algoritma PUSH2
(mengisi Stack2)
·
Periksa apakah Stack2 BISA DIISI
if (Top2 – Top1 > 1)
{ Top2 = Top2 - 1;
S[Top2] = x;
}
else
cout<<“Stack Penuh”;
Algoritma POP2 (mengambil
isi Stack2)
·
Periksa apakah Stack2 ADA ISINYA
if (Top2 < n)
{ x = S[Top2];
Top2 = Top2 + 1;
}
else
cout<<“Stack Kosong”;
Contoh Program Double
Stack pada Bahasa C++ :
#include
<iostream.h>
#include
<conio.h>
int top=-1, data[100];
void pushdata()
{
cout<<"Masukkan Data Stack :
";
cin>>data[top];
}
void popdata()
{
top=top-1;
cout<<"Data Stack Teratas
Dihapus!"<<endl;
}
void viewdata()
{
cout<<endl;
for(int i=top-1;i>=-1;i--)
{
cout<<"||
DATA STACK = "<<data[i]<<" ||"<<endl;
}
}
void bersih()
{
top=-1;
cout<<"Data
Stack Telah Dibersihkan!";
}
void main()
{
char ulangi; int pilihan;
do
{
cout<<" Menu Pilihan
STACK"<<endl;
cout<<"
========================"<<endl;
cout<<" [
1. PUSH Data
]"<<endl;
cout<<" [
2. POP Data
]"<<endl;
cout<<" [
3. View Data
]"<<endl;
cout<<" [
4. Bersihkan Stack
]"<<endl;
cout<<"
========================"<<endl;
cout<<endl;
cout<<"Masukkan Nomor Pilihan
Anda: ";cin>>pilihan;
switch(pilihan)
{
case 1:
{
pushdata();
top=top+1;
}
break;
case 2:
{
if(top<=-1)
{
cout<<"Data Stack
Kosong!"<<endl;
}
else
popdata();
}
}
break;
case 3:
{
if(top<=-1)
{
cout<<"Data Stack
Kosong!"<<endl;
}
else
{
viewdata();
}
}
break;
case 4:
{
bersih();
cout<<endl;
}
break;
default:cout<<"Pilihan
Anda Tidak Termasuk Dalam Daftar!"<<endl;
break;
}
cout<<endl;
cout<<"Ingin Melakukan
Pengulangan?"<<endl;
cout<<"Yes = 'Ulangi' || No =
'Keluar' "<<endl;
cout<<"Masukkan Pilihan:
(Y/N):";cin>>ulangi;
}
while(ulangi=='y'||ulangi=='Y');
getch();
}
Hasil Program Double Stack ketika dijalankan!!!
DAFTAR PUSTAKA
- Anonim. 2015. Tumpukan Antrian Stack dan Queue. Diakses tanggal 05 Juni 2015 pada http://khabib.staff.ugm.ac.id/index.php?option=com_content&view=article&id=84:tumpukan-a-antrian-stack-a-queue&catid=28:introduction-to-algorithm-and-programming
Thankyou :)
SELAMAT MENCOBA!!!
Selain materi diatas terdapat juga beberapa materi struktur
data, silahkan klik link di bawah ini :
ini bknx single stack??
BalasHapuskl dble hrsx ada pop 1 sm pop 2