Anda di halaman 1dari 30

PERTEMUAN 6

Algoritma dan Struktur Data

TUMPUKAN (STACK)

Dosen: Irvan, S.Kom., M.Kom


Pengertian STACK
• Dalam Struktur Stack digunakan istilah :
– PUSH : Simpan,Masuk,Insert,Tulis
– POP : Ambil,Keluar,Delete,Baca
IN OUT

• STACK ada 2 jenis :


– Single Stack TOP D
Berlaku prinsip
LIFO (Last In First Out)
– Double Stack C

A
• STACK berarti tumpukan.
• Konsep STACK digunakan
dalam struktur data.

D • Dari gambar disamping


kita bisa mengatakan
bahwa kotak B ada diatas
kotak A dan ada
dibawah kotak C.
C
AB
• Gambar dibawah ini hanya menunjukkan bahwa dalam tumpukan
kita hanya bisa menambah atau mengambil sebuah kotak lewat satu
ujung, yaitu ujung bagian atas .

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.

Kondisi Stack Posisi TOP


KOSONG Top = -1
PENUH Top = n-1
BISA DIISI Top < n-1
ADA ISINYA Top > -1
Ilustrasi Stack pada kondisi Full  IsFull
Max_Stack
9 HARDISK
Top=1
8 MOUSE
Fungsi IsFull
7 SPEAKER
• Untuk memeriksa apakah stack sudah penuh?
6 MEJA • Dengan cara memeriksa top of stack, jika sudah
sama dengan MAX_STACK-1 maka full, jika belum
5 KEYBOARD (masih lebih kecil dari MAX_STACK maka belum
full
4 LAPTOP
3 PRINTER
2 MONITOR
1 VCD
0 TV
Fungsi IsEmpty
• Untuk memeriksa apakah data Stack masih kosong?
• Dengan cara memeriksa top of stack, jika masih -1
maka berarti data Stack masih kosong!
Operasi Push adalah menambah elemen ke dalam
stack S, dimana penambahan dapat dilakukan jika
stack itu belum penuh.
Stack dikatakan penuh Jika posisi atas sudah
berada pada posisi N
(if S.atas = n then stack penuh)
Push( x,s) adalah memasukkan x ke dalam Stack
S
Push(x,s)

Procedure Push(x :Tipe


data, S : Stack)
If s.atas< n then
s.atas= s.atas+1
s.isi[s.atas] = x
Else Atas = 0
stack sudah
penuh
fi
Stack S
Push(x,s)

Procedure Push(x :Tipe


data, S : Stack)
If s.atas< n then
S.Atas = s.atas + 1

s.isi[s.atas] = x Atas = 1

Else
stack sudah
penuh
fi Stack S
Push(x,s)

Procedure Push(x :Tipe


data, S : Stack)
If s.atas< n then
S.atas= s.atas+1
S.isi[S.atas] = k Atas = 1

Else
stack sudah penuh
fi
Stack S
Push(x,s)

Procedure Push(x :Tipe


data, S : Stack)
If s.atas< n then
Atas = 2
S.Atas = s.atas + 1
s.isi[s.atas] = x
Else
stack sudah
penuh
fi
Stack S
Push(x,s)

Procedure Push(x :Tipe


data, S : Stack)
If s.atas< n then
S.atas= s.atas+1 Atas = 2
S.isi[S.atas] = k

Else
stack sudah penuh
fi
Stack S
Push(x,s)

Procedure Push(x :Tipe


data, S : Stack)
Atas = 3
If s.atas< n then
S.Atas = s.atas + 1
s.isi[s.atas] = x
Else
stack sudah
penuh
fi
Stack S
Push(x,s)

Procedure Push(x :Tipe


data, S : Stack) Atas = 3
If s.atas< n then
S.atas= s.atas+1
S.isi[S.atas] = k

Else
stack sudah penuh
fi
Stack S
Push(x,s)
Atas = 5

Procedure Push(x :Tipe


data, S : Stack)
If s.atas< n then
S.atas= s.atas+1
S.isi[S.atas] = k
Else
stack sudah penuh
fi
Stack S
Double Stack
• Disebut juga Stack Ganda.

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

• Proses pada Double Stack :


• AWAL (Inisialisasi)
• PUSH1 (Push
untuk Stack1)
• POP1 (Pop untuk
Stack1)
• PUSH2 (Push
untuk Stack2)
Kondisi Double Stack
Kondisi Stack Posisi TOP

Stack1 KOSONG Top1 = -1

Stack2 KOSONG Top2 = n

Stack PENUH (baik Stack1 maupun Top2 – Top1 = 1


Stack2 tidak BISA DIISI)
Stack BISA DIISI (baik Top2 – Top1 > 1
Stack1 maupun Stack2 BISA
DIISI)
Stack1 ADA ISINYA Top1 > -1

Stack2 ADA ISINYA Top2 < n


Algoritma PUSH1 Algoritma POP1
(mengisi Stack1) (mengambil isi Stack1)
• Periksa apakah Stack1 • Periksa apakah Stack1
BISA DIISI ADA ISINYA

if (Top2 – Top1 > 1) if (Top1 > -1)


{ x = S[Top1];
{ Top1 = Top1 + 1; Top1 = Top1 -
S[Top1] = x; 1;
} }
else else
cout<<“Stack cout<<“Stack
Penuh”; Kosong”;
Algoritma PUSH2 Algoritma POP2
(mengisi Stack2) (mengambil isi Stack2)
• Periksa apakah Stack2 • Periksa apakah Stack2
BISA DIISI ADA ISINYA

if (Top2 – Top1 > 1) if (Top2 < n)


{ {
Top2 = Top2 - 1; x = S[Top2];
S[Top2] = x; Top2 = Top2 + 1;
} }
else else
cout<<“Stack cout<<“Stack
Penuh”; Kosong”;
1. Untuk mencek kalimat Polindrom
2. Untuk Mengubah Desimal ke Biner

Mencek kalimat Polindrom  Kalimat : KAKAK


K
A A
K K K Operasi Push
A A A A
K K K K K
Operasi Pop
Kalimat = hasil


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;
}
}

Anda mungkin juga menyukai