TUMPUKAN (STACK)
A
• STACK berarti tumpukan.
• Konsep STACK digunakan
dalam struktur data.
Maximum 5
Isi [5]
4
Isi [4]
3
Isi [3] Deklarasi Struktur Data
2
Isi [2] Stack = Record
1
Isi [1] Isi : array[1..n] of Tipe
0
Data Atas : integer
Stack S End
Algoritma PUSH Algoritma POP
if (Top < n-1) if (Top > -1)
{ {
Top = Top+1; x = S[Top];
S[Top]=x; Top = Top-1;
} }
else else
cout<<“Stack cout<<“Stack
Penuh”; Kosong”;
Kondisi Single Stack
• Kondisi Stack ditentukan oleh posisi atau isi TOP.
s.isi[s.atas] = x Atas = 1
Else
stack sudah
penuh
fi Stack S
Push(x,s)
Else
stack sudah penuh
fi
Stack S
Push(x,s)
Else
stack sudah penuh
fi
Stack S
Push(x,s)
Else
stack sudah penuh
fi
Stack S
Push(x,s)
Atas = 5
Stack 1 Stack 2
-1 0 1 2 3 4 5 6 7 8 9 10 11 12
S[12] 25 12 17 50 44 6 23
TOP 1 TOP 2
2 8
TOP 1 TOP 2 X
Prinsip dan Konsep Proses Double
Stack
• Prinsip proses :
LIFO (Last In First Out) baik untuk Stack1 maupun
untuk Stack2
Polindrom
K Hasil =‘’
A A Hasil = K
K Hasil = KA
K K Hasil = KAK
A A A A Hasil = KAKA
Hasil = KAKAK
K K K K K
Contoh 1: Program Single stack
#include <cstdlib> void cetak() //mencetak
#include <string>
#include {
<iostream> if(top<0)
{
using namespace std; //stack 7
cout<<"stack kosong" <<endl;
int top=-1; return ;
char stack[2];//asumsi max }
stack 100
char x;
int i=0;
void push() //menyimpan
{ for(i=top;i>=0;i--)
cout<<"masukkan satu karakter: "; cout<<stack[i]<<endl;
cin>>x; }
top++;
stack[top]=x;
} int main(int argc, char
{ *argv[])
if(top<0)
{ {
cout<<"stack kosong"<<endl; int input;
return; cout<<"MASUKKAN
} PILIHAN: "<<endl;
x=stack[top];
cout<<"karakter yang di 'POP' adalah cout<<"\t1. PUSG"<<endl;
"<<x<<endl;
top--; cout<<"\t2. POP"<<endl;
}
cout<<"\t3. PRINT"<<endl;
cout<<"\t4. QUIT"<<endl;
while(true)
Contoh: Program Single stack
{
cout<<"\nMasukan pilihan:
"; cin>>input; Output:
if(input==1) {push();}
else if(input==2)
{pop();}
else if(input==3) {cetak();}
else if(input==4) {break;}
else
{
cout<<"Perintah '
"<<input<<" tidak dikenal"<<endl;
}
}
system("PAUSE
"); return
EXIT_SUCCESS;
}
Konversi Bilangan Desimal ke Biner
Contoh 2: Konversi 17910 ke
biner:
179 / 2 = 89 sisa 1 (LSB)
/ 2 = 44 sisa 1
/ 2 = 22 sisa 0
/ /22==115 sisa 01
/ 2 = 2 sisa 1
/ 2 = 1 sisa 0
/ 2 = 0 sisa 1 (MSB)
17910 = 101100112
MSB LSB
Contoh 2: Konversi Desimal ke Biner
#include<iostream> void push(itemtype x, stack *s)
#include<stdio.h> {
#include<conio.h> if(full(s))
int MAXSTACK; printf("stack penuh !\n");
typedef int else
itemtype; {
s->item[s-
typedef struct >count]=x; ++(s-
{ >count);
itemtype }
item[300]; int }
count;
}
stack; int pop(stack *s)
void {
initializestack(stack if(empty(s))
*s) printf(" Stack Kosong ");
{ else
s->count = 0; {
}
--(s->count);
return *s)
int empty(stack (s->count == return (s->item[s-
MAXSTACK)
{ } >count]);
;return (s->count
}
== 0); }
}
using namespace std; m=0;
main() for(n=input;n>0;n=n/2)
{
{
l=n%2;
int i, n, m, l, z; int push(l,&tumpukan);
input; stack tumpukan; ++m;
printf(" Program }
Pengkonversi Desimal ke cout<<endl;
Biner ");
printf(" Hasil
cout<<endl<<endl; Konversi Ke Bilangan
initializestack(&tumpukan); Biner : ");
Desimal
printf(" : ");
Masukkan for(i=MAXSTACK;i>0;i--)
{
scanf("%d",
Bilangan &input);
printf("%d",
for(z=1,n=input;n>0;n=n/2, z+ pop(&tumpukan))
+) ;
{ }
MAXSTACK=z; getch();
return 0;
}
}