Anda di halaman 1dari 23

STACK

(TUMPUKAN) By Agung Wibowo

M.Kom
• Stack ( Tumpukan ) dapat diartikan sbg :
Suatu kumpulan data yang seolah-olah ada data yg
diletakkan diatas data yg lain, yg bisa menyisipkan (
menambah ) data serta mengambil ( menghapus data ).
• Cara penggambaran stack :
A
D
C Top

B
Bottom

• Operasi yg dpt dilakukan dalam stack :


1. Menyisipkan / menambahkan data pd ujung atas
stack → push
2. Menghapus / mengeluarkan data dr ujung atas
stack → pop
• Prinsip kerja stack adalah LIFO ( Last In First Out )
• B
Example A
: Kondisi awal 4
Stack Pop ( S )
1

A
2
5 Pop ( S )
Push ( S, A )
A

D
Push ( S, D )
B Push ( S, C B Push ( S, C
3 6
A ) Push ( S, B A ) Push ( S, B
C C
) )

Bentuk lain Stack (Tumpukan)


Dengan memperhatikan ilustrasi diatas maka dapat dilihat bahwa tumpukan
merupakan suatu senarai (list) yang mempunyai watak “masuk terakhir
keluar pertama” (last in first out – LIFO).

LIFO (Last In First Out).


• Dalam istilah pemrograman, upaya menambahkan elemen pada struktur data stack
disebut dengan push. Sedangkan proses menghapus atau menghilangkan elemen data
dari stack disebut pop.
• Kita dapat mengimplementasikan stack dengan bahasa
pemrograman seperti C, C++, Java, Python, atau C#.

Karakteristik Stack
• Stack diimplementasikan dengan struktur data array atau linked list.
• Mengikuti prinsip operasi Last In First Out, yaitu elemen yang dimasukkan
pertama akan muncul terakhir dan sebaliknya.
• Penyisipan dan penghapusan terjadi di satu ujung yaitu dari atas
tumpukan.
• Apabila ruang memori yang dialokasikan untuk struktur data stack sudah
penuh namun masih dilakukan operasi penyisipan eledmen maka akan
terjadi stack overflow
• Apabila struktur data tidak memiliki elemen data atau kosong, namun
tetap dilakukan operasi penghapusan maka akan terjadi stack underflow
Underflow & Overflow
• Stack underflow, yaitu keadaan dimana kita mencoba mengakses
atau menghapus elemen data pada stack yang kosong
• Stack overflow, yaitu keadaan di mana ruang memori yang
dialokasikan untuk struktur data stack sudah penuh namun masih
dilakukan operasi penyisipan elemen
Operasi-operasi Dasar pada Stack
• Push: Menyisipkan elemen ke bagian atas stack
• Pop: Menghapus elemen atas dari stack
• IsEmpty: Memeriksa apakah stack kosong
• IsFull: Memerika apakah stack sudah penuh
• Peek: Mendapatkan nilai elemen teratas tanpa menghapusnya
• Penyajian awal Stack :
Dalam Tipe data program ada type data terstruktur yg disebut
ARRAY (LARIK). Dapat digunakan untuk menyajikan sebuah
tumpukan. Tapi penyajian dg menggunakan ARRAY adalah
kurang tepat karena banyaknya elemen dalam array adalah
statis.
Sedangkan dalam tumpukan, banyaknya elemen dapat
bervariasi (dinamis).
Meskipun demikian, ARRAY dapat digunakan untuk
menyajikan sebuah tumpukan demgan anggapan bahwa
banyaknya elemen max dari tumpukan tsb tidak akan
melebihi batas max banyaknya elemen dalam array.

• Padasaat ukuran tumpukan = ukuran array, jika


ditambahkan data baru akan menyebabkan “OVERFLOW”.
• Dengan demikian perlu adanya data tambahan untuk
mencatat posisi ujung atas tumpukan.
• Dengan kebutuhan ini, penyajian tumpukan dapat dilakukan
dengan menggunakan type data terstruktur yang lain yaitu
RECORD ( Rekaman ) yg terdiri dari 2 field :
- Field 1 → Digunakan u menyimpan elemen tumpukan yg
bertype array
- Field 2 → Digunakan u mencatat posisi atas ujung
tumpukan.

Deklarasi STACK secara umum :


const MaxElemen =255;
type Tumpukan = record
Isi : array[1..MaxElemen] of string;
atas : 0..MaxElemen
end;
var T : Tumpukan;
• Operasi PUSH :
procedure PUSH ( var T : Tumpukan; X : string
); begin
T.Atas :=T.Atas + 1;
1
T.Isi[T.Atas] := X
end;
procedure PUSH ( var T : Tumpukan; X : string
); begin
if T.Atas = MaxElemen then
writeln ( ‘ TUMPUKAN SUDAH PENUH ‘ )
else
2
begin
T.Atas :=T.Atas + 1;
T.Isi[T.Atas] := X
end
end;
Panggil Push
Pemanggilan prosedur push dari program utama atau dari bagian lain
dilaksanakan dengan:
PUSH (T, Penuh, X);
Dengan T adalah perubah bertipe Tumpukan, Penuh bertipe boolean
dan x bertipe integer (dalam contoh ini). Berdasarkan nilai perubah
penuh dapat ditentukan langkah selanjutnya yang perlu diambil.
• Operasi POP :

procedure POP ( var T : Tumpukan);


begin
1
T.Atas :=T.Atas - 1
end;

procedure POP ( var T : Tumpukan);


begin
if T.Atas = 0 then
writeln ( ‘ TUMPUKAN SUDAH KOSONG ‘ )
2
else
begin
T.Atas :=T.Atas - 1
end
end;
Panggil POP
Pemanggilan prosedur POP dari program utama atau dari bagian lain
dilaksanakan dengan:
X := POP (T);
Dengan T adalah perubah bertipe Tumpukan, Penuh bertipe boolean
dan x bertipe integer (dalam contoh ini). Berdasarkan nilai perubah
penuh dapat ditentukan langkah selanjutnya yang perlu diambil.
PENULISAN UNGKAPAN NUMERIS DALAM STACK
• Salah satu aplikasi STACK adalah untuk menulis ungkapan
dengan menggunakan notasi tertentu.
• Cara penulisan ungkapan dapat dilakukan dengan
menggunakan :
1. Notasi INFIX
Operator diletakkan diantara 2 operand
ex : A+B → dimana A,B sbg operand dan + sbg operator
2. Notasi PREFIX ( POLISH )
Operator diletakkan sebelum 2 operand
disajikan ex : +AB
3. Notasi POSTFIX ( SUFFIX )
operator diletakkan setelah 2 operand disajikan
ex : AB+
• Dalam penulisan ungkapan, khususnya ungkapan numeris seringkali
digunakan tanda kurung untuk mengelompokkan bagian mana yg
harus dikerjakan lebih dahulu.
• Dalam ungkapan2 yg rumit, pemakaian tanda kurung ini tidak bisa
dihindari.
• “Semakin rumit ungkapan maka semakin banyak dibutuhkan tanda
kurung “.
• Hal ini membawa suatu konsekwensi bahwa penulisan tanda kurung
itupun harus benar2 terhindar dari kesalahan.

• Contoh : (dalam notasi infix) DG METODE SUBSTITUSI 1.


A + B x C Notasi Prefix Notasi Postfix
1 xBC → 1 BCx → 1 +A1
2 → 2 A1+ → 2

Contoh
Subtitusikanlah operator berikut dengan
notasi prefix dan notasi postfix :

1. (A + B) x (C –(D ^ E))
Algorithma Konversi dari Infix ke Postfix
• Langkah 0 ( Awal )
- Baca ungkapan dalam notasi infix, misalnya = S
- Tentukan panjang ungkapan tersebut, misalnya N karakter - Siapkan
sebuah tumpukan kosong & siapkan derajad masing2 operator, misalnya
:
^ pangkat = bernilai 3
x , / = bernilai 2
+ , - = bernilai 1
) , ( = bernilai 0
• Langkah 1
Dimulai dari I=1 sampai N, kerjakan langkah2 berikut
a. R = S [ I ]
b. Test nilai R, jika R adalah :
operand : langsung ditulis
kurung buka : push ke dalam tumpukan
kurung tutup : pop dan tulis semua isi tumpukan sampai ujung
tumpukan = ‘(‘. Pop juga tanda ‘(‘ ini, tapi tidak
usah ditulis.
operator : jika tumpukan kosong, atau derajad R
lebih tinggi dibanding derajad ujung
tumpukan, push operator ke dalam
tumpukan. Jika tidak, pop ujung
tumpukan da tulis, kemudian ulangi
pembandingan R ujung tumpukan.
Kemudian R di push.
• Langkah 2
Jika akhir notasi infix telah tercapai, dan tumpukan masih
belum kosong, pop semua isi tumpukan dan tulis hasilnya.
1. ( A + B ) x ( C – D ) → N = 11 karakter
+ +(
Proses ke B A
Isi Stack
1 Karakter AB
tercatat
2
3 (
4 B
Karakter dibaca
(R) Notasi
Postfix
terbentuk
( A
A
5 8 ) C- Kosong *
6 9 * D) (*
7 10 11 (
+
-(* D- AB+CD
* AB+C AB+CD
* C AB+ AB+CD-*
Kosong
2. (A + B) * (C – D) ^ E → N = 13 karakter
+ +(
Proses ke B A
Isi Stack
1 Karakter AB
tercatat
2
3 (
4 B
Karakter dibaca
(R) Notasi
Postfix
terbentuk
( A
A
5 8 * D)
6 9 12 13 (
7 10 11 ) C- ^
E Kosong ^ AB+CD-*
Kosong * D-
(* Kosong * AB+C AB+CD-*E
+ AB+CD-*E^
-(* E^ AB+CD
AB+ AB+CD
* C
• Cara Substitusi : Infix Postfix ( A x B ) x ( C – D ) 1.
A*B 1. AB*
12

3 1. A + B * C – D ^ E
2. C-D 2. CD 3. 1*2 3. 12* 4.
AB*CD-*
LATIHAN :
2. (A * B) – ( C + D ) / ( E * ( F – G ))
Algorithma Konversi dari Infix ke Prefix
• Langkah 0 ( Awal )
- Baca ungkapan dalam notasi infix, misalnya = S
- Tentukan panjang ungkapan tersebut, misalnya N karakter - Siapkan
sebuah tumpukan kosong & siapkan derajad masing2 operator, misalnya
:
$ pangkat = bernilai 3
x , / = bernilai 2
+ , - = bernilai 1
) , ( = bernilai 0
• Langkah1
Dimulai dari I=N sampai 1, kerjakan langkah2 berikut
a. R = S [ I ]
b. Test nilai R, jika R adalah :
operand : langsung ditulis & simpan ke var T
kurung tutup : push ke dalam tumpukan
kurung buka : pop dan tulis semua isi tumpukan sampai ujung
tumpukan = ‘)‘. Pop juga tanda ‘)‘ ini, tapi tidak
usah ditulis.
operator : jika tumpukan kosong, atau derajad R
lebih tinggi atau sama dibanding
derajad ujung tumpukan, push
operator ke dalam tumpukan. Jika
tidak, pop ujung tumpukan dan tulis
disimpan ke var T, kemudian ulangi
pembandingan R ujung tumpukan.
Kemudian R di push.

• Langkah2
Jika akhir notasi infix telah tercapai, dan tumpukan masih
belum kosong, pop semua isi tumpukan dan tulis hasilnya,
kemudian simpan ke var T.
• Langkah 3
Baca data dalam variabel T, dimulai dari N sampai 1 dan tulis
ke dalam notasi prefix.
•( A + B ) x ( C – D ) → N = 11 karakter
tercatat terbentuk B+
Pro ses ke A(
1 ) Kosong *
2 )*
3
4 C +)*
Karakter 5
dibaca ( R )
D Isi Variabel T ( 6
-) Notasi Postfix ) 7 *
Kosong
) 8 -
D D 9
- 10 11 12 13
C DC ( B
Isi Stack Notasi Prefix *
Karakter )
DC DC-BA+*
A+ DC-BA *+AB-CD
* DC-B DC-BA+
Tugas mandiri

1. Mengapa cara penyusunan elemen pada Stack sering disebut


tersusun secara LIFO?
2. Sebutkan Kelebihan dan kekurangan mengunakan stuktur data
STUCK (Tumpukan)
3. Buatkan Tabel Notasi Postfix berikut
(A x B) – ( C + D ) / ( E x ( F – G ) )
4. Buatkan Tabel Notasi Prefix berikut
(A x B) – ( C + D ) / ( E x ( F – G ) )

Anda mungkin juga menyukai