Maximum
Isi [5]
D 4
3 Isi [4]
C 2 Isi [3]
B 1 Isi [2]
0 Isi [1]
A
Stack S
Pengertian STACK
STACK berarti tumpukan.
Konsep STACK digunakan dalam struktur
data.
IN OUT
TOP D
C Berlaku prinsip
LIFO (Last In First Out)
B
A
STACK (TUMPUKAN)
Stack Termasuk ADT (Abstrak Data Type)
Bentuk khusus dari Ordered List
Struktur data linier dimana hanya bagian TOP-nya saja yang bisa
diakses.
Bisa diimplementasikan menggunakan array atau Linked List.
Bersifat LIFO: Last In First Out, berarti benda yang terakhir masuk
ke dalam stack akan menjadi yang pertama keluar dari stack.
Operasi pada Stack :
IsFull : mengecek apakah STACK sudah penuh
IsEmpty : mengecek apakah STACK sudah kosong
Push : menambahkan item pada posisi paling atas (TOP).
Pop : mengeluarkan item pada posisi paling atas (TOP).
Clear : digunakan untuk mengosongkan stack
Print : Mencetak stack
Jenis Stack
Single Stack: dapat direpresentasikan
STACK ada 2 jenis :
menggunakan array satu dimensi.
Single Stack Gambar di bawah ini adalah gambaran
single stack.
Double Stack
0 1 2 3 4 5 6 7 8 9
S[10] 25 12 17 15 33
TOP
4 33
TOP X
Konsep dan Proses Single Kondisi Single Stack
Stack
MAX _ STACK
Pada mulanya:
4
TOP = -1 3 PUSH ELEMEN Radio
Selanjutnya 2 Radio
Top = Top+1=2
TOP = TOP+1
= -1 +1 1 VCD Jika Top mula-mula=1
=0 0 TV
Push( x,s) adalah Memasukkan x kedalam Stack S
PUSH(X,S)
Procedure Push(x :Tipe
data, s : stack)
If s.top< n then
s.top= s.top+1
s.isi[s.top] = x
Else
stack sudah penuh top = 0
Endif
stack s
PUSH(X,S)
Procedure Push(x :Tipe
data, s : stack)
If s.top< n then
s.top = s.top + 1
s.isi[s.top] = x
top = 1
Else
stack sudah penuh
endif
stack s
PUSH(X,S)
Procedure Push(x :Tipe
data, s : stack)
If s.top< n then
s.top= s.top+1
s.isi[s.top] = k
top = 1
Else
stack sudah penuh
endif
stack s
PUSH(X,S)
Procedure Push(x :Tipe
data, s : stack)
If s.top< n then
s.top = s.top + 1 top = 2
s.isi[s.top] = x
Else
stack sudah penuh
endif
Stack s
PUSH(X,S)
Procedure Push(x :Tipe
data, s : stack)
If s.top< n then
s.top= s.top+1 top = 2
s.isi[s.top] = k
Else
stack sudah penuh
endif
stack s
PUSH(X,S)
Procedure Push(x :Tipe
data, s : stack)
top = 3
If s.top< n then
s.top = s.top + 1
s.isi[s.top] = x
Else
stack sudah penuh
endif
stack s
PUSH(X,S)
Procedure Push(x :Tipe
data, s : stack)
top = 3
If s.top< n then
s.top= s.top+1
s.isi[s.top] = k
Else
stack sudah penuh
Endif
stack s
PUSH(X,S) top = 5
stack s
FUNGSI POP
Algoritma POP
Digunakan untuk mengambil/ menghapus
elemen yang berada pada posisi paling if (Top > -1)
atas dari stack. { x = S[Top];
Top = Top - 1;
}
Dengan cara : else
1) Tampilkan terlebih dahulu nilai cout<<“Stack Kosong”;
elemen teratas stack dengan mengakses
TOP of STACK (indeknya).
2) Baru dilakukan decrement nilai TOP of Function POP dalam C
STACK, sehingga jumlah elemen stack
void Pop()
berkurang 1. {
printf("Data yang di POP = %s\n",
Fungsi Peek tumpuk.data[tumpuk.top]);
tumpuk.top--;
Digunakan untuk melihat top of stack: }
int peak{
Return tumpuk.data[tumpuk.top];
}
POP(S)
Pop(s) adalah menghapus elemen dari
Setiap melakukan penghapusan, maka
stack, elemen yang dihapus adalah posisi yang paling atas akan berkurang 1
elemen terakhir masuk (LIFO=Last (s.top = s.top -1)
In First Out)
Proses penghapusan dapat dilakukan Procedure Pop( s: stack)
jika stack tidak dalam keadaan If s.top>0 then
Kosong. (If s.top > 0 then stack tidak Write s.isi[s.top]
kosong) s.top= s.top – 1
Else
stack Kosong
endif
POP(S) atas = 5
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
Endif
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
Endif
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
endif atas = 0
stack s
Fungsi IsFull Fungsi IsEmpty
Untuk memeriksa apakah stack sudah
penuh?
Untuk memeriksa apakah stack masih
kosong?
Dengan cara memeriksa TOP of Stack.
Jika TOP of STACK = MAX_STACK-1
Dengan cara memeriksa top of stack,
maka FULL (Penuh). Jika TOP of jika masih -1 maka berarti stack
STACK < MAX_STACK-1 maka belum masih kosong!
penuh.
4 MAX _ STACK
Jika kita ingin mengeprint elemen
3 stack, kita harus membaca elemen
Array dari indeks yang ada isinnya
2 Radio Top
tertinggi, yaitu Top down to 0
1 VCD
Sehingga kita akan menampilkan
0 TV elemen: Radio, VCD dan TV.
PSEUDOCODE STACK
Algoritma Stack
{algoritma stack / tumpukan} procedure
createEmpty(input/output s :
Deklarasi stack)
type NilaiKuliah = record <
nama : string Deklarasi
nilai : integer {tidak ada}
>
Deskripsi
const MAX = 10 s.top -1
type stack = record <
top : integer
data : array [1 .. MAX] of NilaiKuliah function isEmpty (input s : stack) boolean
>
St : stack Deklarasi
hasil : boolean
Deskripsi
procedure createEmpty(input/output s : stack) hasil false
function isEmpty (input s : stack) boolean
function isFull(input s : stack) boolean if s.top=-1 then
procedure push(input nama : string, input nilai hasil true
:integer , input/output end if
s : stack)
procedure pop (input/output s: stack) return hasil
procedure printStack (input s: stack)
PSEUDOCODE STACK
procedure pop (input/output s: stack)
function isFull(input s : stack) boolean {menghapus elemen di dalam stack}
Deklarasi Deklarasi
hasil : boolean {tidak ada}
Deskripsi Deskripsi
hasil false if s.top = 1 then
if s.top=MAXthen s.top -1
hasil true else
end if if s.top <> -1 then
return hasil s.top s.top – 1
else
write(‘Stack Kosong’)
procedure push(input nama : string, input
nilai :integer , input/output s : stack) endif
{menambah elemen di dalam stack} end if
Deklarasi
{tidak ada} procedure printStack (input s: stack)
Deskripsi {Menampilkan isi Stack ke layar}
Prinsip proses :
LIFO (Last In First Out) baik
untuk Stack1 maupun untuk Kondisi Double Stack
Stack2
Kondisi Stack Posisi TOP
Proses pada Double Stack : Stack1 KOSONG Top1 = -1
AWAL (Inisialisasi) Stack2 KOSONG Top2 = n
PUSH1 (Push untuk Stack PENUH (baik Stack1 Top2 – Top1
Stack1) maupun Stack2 tidak BISA DIISI) =1
POP1 (Pop untuk Stack1) Stack BISA DIISI (baik Stack1 Top2 – Top1
PUSH2 (Push untuk maupun Stack2 BISA DIISI) >1
Stack2) Stack1 ADA ISINYA Top1 > -1
POP2 (Pop untuk Stack2) Stack2 ADA ISINYA Top2 < n
Algoritma PUSH1 (mengisi Stack1) dan
Algoritma PUSH2 (mengisi Stack 2)
Periksa apakah Stack1 BISA Periksa apakah Stack2 BISA
DIISI DIISI
Kalimat : KAKAK
7. Lalu 15*(((3-2)*(4+10))/7),
5. Proses selanjutnya, ditemukan ditemukan tanda kurung tutup )
operator - maka aturan ke 3 sehingga aturan ke 4
dikerjakan, yaitu push operator dikerjakan yaitu pop stack dan
tersebut ke dalam stack. cetak data paling atas stack ke
layar.
8. Proses kita lanjutkan, dan 10. Proses kita lanjutkan, dan
ditemukan operator * maka ditemukan operator +, maka aturan
aturan ke 3 dikerjakan, yaitu ke 3 dikerjakan, yaitu push operator
push operator tersebut ke tersebut ke dalam stack.
dalam stack.
9. 15*(((3-2)*(4+10))/7), kurung
buka ( ditemukan, jadi abaikan 11. 15*(((3-2)*(4+10))/7), Ditemukan
saja. Selanjutnya kita temukan bilangan 10 (operan) maka aturan
angka 4 (operan) maka aturan nomor 1 harus dikerjakan yaitu
nomor 1 dikerjakan yaitu mencetak angka 10 ke layar.
mencetak bilangan 4 tersebut
ke layar.
12. Kemudian tanda kurung 14. Proses kita lanjutkan, dan
tutup ) kita temukan sehingga kita menemukan operator /
aturan ke 4 harus dikerjakan yaitu maka aturan ke 3 dikerjakan,
pop stack dan cetak data paling yaitu push operator tersebut ke
atas stack (operator +) ke layar. dalam stack.
Note: Urutan perhitungan harus 3–2 bukan 2–3 atau data yang kedua
yang di pop di kurang data yang pertama sekali di pop dari stack.
15 3 2 - 4 10 + * 7 / *
5. Ditemukan operan dengan 7. Proses dilanjutkan, ditemukan operator + oleh
nilai 4, maka aturan nomor 1 karena itu aturan nomor 2 harus dikerjakan. pop
dikerjakan lagi, yaitu push stack dua kali dan hitung menggunakan nilai
nilai tersebut ke dalam stack. yang di pop dan operator yang dijumpai. Hasil
perhitungan ini kemudian dipush kembali ke
dalam stack.
15 3 2 - 4 10 + * 7 / *
6. Ditemukan operan dengan 15 3 2 - 4 10 + * 7 / *
nilai 10, maka aturan nomor 8. Di temukan lagi operator * oleh karena itu
1 dikerjakan, yaitu push nilai aturan nomor 2 dikerjakan. pop stack dua kali
tersebut ke dalam stack. dan hitung menggunakan nilai yang di pop dan
operator yang dijumpai. Hasil perhitungan ini
kemudian di push kembali ke dalam stack.
15 3 2 - 4 10 + * 7 / *
9. Selanjutnya ditemukan kembali
operan dengan nilai 7, maka
aturan nomor 1 dikerjakan lagi,
yaitu push nilai tersebut ke dalam
stack.
15 3 2 - 4 10 + * 7 / *
10. Kemudian kita temukan operator *,
maka aturan nomor 2 dikerjakan lagi.
15 3 2 - 4 10 + * 7 / *
1. Operasi Stack yang digunakan 3. Jika pada stack terdapat kondisi TOP of
untuk memeriksa apakah stack STACK = MAX_STACK - 1 maka stack
berada dalam keadaan ...
sudah penuh, adalah …..
a. ISEMPTY c. RETREIVE
a. PUSH c. ISEMPTY
b. CLEAR d. FULL
b. POP d. ISFULL
4. Pada saat awal, Top of Stack selalu bernilai :
2. Menambah satu (increment) nilai a. Top = 0 c. Top = Max_Stack
TOP of STACK setiap ada b. Top = 1 d. Top = -1
penambahan elemen stack
selama stack masih belum 5. Diberikan perintah/instruksi pada program C+
penuh, merupakan langkah awal +, yaitu tumpuk.top++; Maksud dari
pada operasi STACK yaitu ….. perintah/instruksi tersebut adalah ….