Anda di halaman 1dari 31

STACK (Tumpukan)

Tumpukan Koin Tumpukan Kotak


Defenisi :
 Secara sederhana, tumpukan bisa diartikan sebagai suatu
kumpulan data yang seolah-olah ada data yang diletakan diatas
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).

 Untuk menjelaskan pengertian diatas kita ambil contoh sebagai


berikut. Misalnya kita mempunyai dua buah kotak yang kita
tumpuk, sehingga kotak kita letakkan diatas kotak yang lain.
Jika kemudian tumpukan duah buah kotak itu kita tambah
dengan kotak ketiga, keempat dan seterusnya, maka akan kita
peroleh sebuah tumpukan kotak yang terdiri dari N kotak.
Dari gambar ini kita bisa mengatakan

D bahwa kotak B ada diatas kotak A dan


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

A
Deklarasi Struktur Data
Maximum 5 Stack = Record
Isi [5]
4 Isi : array[1..n] of Tipe Data
Isi [4]
3 Atas : integer
Isi [3]
2 End
Isi [2]
1
Isi [1]
0

Stack S
Operasi
Operasi dasar yang dilakukan Dalam Stack ada dua yaitu :
1. Menambah Komponen (Push)
2. Menghapus Komponen (Pop)

Operasi Push
Operasi Push adalah Menambah elemen kedalam 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 kedalam 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
stack sudah penuh Atas = 0

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
S.Atas = s.atas + 1 Atas = 2

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
POP(S)
Pop(s) adalah menghapus elemen dari stack, dimana elemen yang dihapus
adalah elemen yang terakhir Masuk (LIFO Last In First Out) atau elemen
penghapusan, dimana proses penghapusan dapat dilakukan jika stack tidak
dalam keadaan Kosong

If S.Atas > 0 then stack tidak kosong


Dimana Setiap melakukan penghapusan, maka posisi yang paling atas akan
berkurang 1 (S.Atas = S.Atas -1)
Procedure Pop( S: Stack)
If S.atas>0 then
Write S.isi[S.atas]
S.Atas= S.Atas – 1
Else
Stack Kosong
Fi
Pop(s) Atas = 5

Procedure Pop( S: Stack)


If S.atas>0 then
Write S.isi[S.atas]
S.Atas= S.Atas – 1
Else
Stack Kosong
Fi

Stack S
Pop(s)
Procedure Pop( S: Stack) Atas = 4

If S.atas>0 then
Write S.isi[S.atas]
S.Atas= S.Atas – 1
Else
Stack Kosong
Fi

Stack S
Pop(s)
Procedure Pop( S: Stack) Atas = 4

If S.atas>0 then
Write S.isi[S.atas]
S.Atas= S.Atas – 1
Else
Stack Kosong
Fi

Stack S
Pop(s)
Procedure Pop( S: Stack)
If S.atas>0 then Atas = 3
Write S.isi[S.atas]
S.Atas= S.Atas – 1
Else
Stack Kosong
Fi

Stack S
Pop(s)
Procedure Pop( S: Stack)
If S.atas>0 then
Write S.isi[S.atas]
S.Atas= S.Atas – 1
Else
Stack Kosong
Atas = 0
Fi

Stack S
Contoh Penggunaan Stack
1. Untuk mencek kalimat Polindrom
2. Untuk Mengubah Desimal ke Biner
Mencek Kalimat Polindrom
Kalimat : KAKAK
K
A A
K K K
A A A A
K K K K K

Operasi Push
Operasi Pop

K Hasil =‘’

A A Hasil = K
Hasil = KA
K K K Hasil = KAK
Hasil = KAKA
A A A A
Hasil = KAKAK
K K K K K

Kalimat = hasil
Operasi POP
 Polindrom
Algoritma
Inisialisasi Struktur Data
Stack = record
isi : Array[1..255] of char
atas : integer
End
Kalimat, Hasil : string

Procedure push( x : Char, s : Stack)


If s.atas < 255
Then
s.atas = s.atas+1
s.isi[s.atas] = x
Else
stack sudah penuh
fi
Procedure Pop(S:Stack)
While S.atas>0 do
If S.atas>0 then
Write s.isi[s.atas] pop(s)
Hasil = hasil +s.isi[s.atas] E-while
s.atas= s.atas-1
If kalimat = hasil
Else
Stack Kosong Then
Fi Polindrom
//modul utama Else
i=1
While i<= length(kalimat) Tidak polindrom
Do fi
Push(Kalimat[i],s)
i=i+1
E-while
Tugas
Buat Algoritma dan Program Untuk
Mengkonversi Bilangan desimal menjadi
bilangan Biner.
Ungkapan Aritmatika
Untuk menuliskan ungkapan aritmatika
dapat dilakukan dengan tiga metode
Infix  Operan Operator Operan
A+B
Prefix  Operator Operan Operan
+AB
Postfix  Operan Operan Operator
AB+
Contoh :
1.Infix A + B + C 2. Infix A+B * C
Prefix Prefix
+AB + A+*BC
C
+A*BC
++ABC
Postfix A+ BC*
Postfix AB+ + C
AB+C+ ABC*+

Derajat Operator
(, ^ , * dan /,+ dan -
InfixA*B + C*D
Prefix Postfix
*AB + C * D AB* + C*D
*AB + *CD
AB* + CD*
+*AB*CD
AB*CD*+
Infix : A + B * (C – D) / E

Prefix Postfix
A + B * -CD / E A + B * CD- / E
A + *B-CD / E A + BCD-* / E
A + /*B-CDE A + BCD-*E/
+A/*B-CDE ABCD-*E/+

Contoh :
1. Infix (A+B)*C^D/E-F+G
2. Infix (A+B*C)*(D+E)/F*G
Stack Untuk Konversi Infix ke postfix
Algoritma
Langkah 0 : inisialisasi struktur data dengan membuat sebuah stack
kosong, baca ungkapan dalam bentuk infix, dan tentukan
derajat operator misalnya
( :0; + & - : 1;* & / : 2;^ : 3
Langkah 1 : Lakukan pembacaan karakter dari Infix, berikan ke R
Langkah 2 : Test Nilai R, Jika
a. ( Langsung di Push
b. Operand, Langsung di Tulis
c. ) lakukan Pop sampai ketemu buka
kurung ,
tetapi tanda kurung tidak perlu di
tulis.
d. Operator, Jika stack dalam keadaan
kosong atau derajat R lebih tinggi dibandingkan dengan di
ujung stack, lakukan Push, jika tidak lakukan POP.
Langkah 3 : Jika pembacaan terhadap infix sudah selesai, namun stack
belum kosong lakukan POP.
Contoh A+B*(C+D/E)

Anda mungkin juga menyukai