1
PENGERTIAN STACK
Secara sederhana diartikan dengan :
sebagai tumpukan dari benda
sekumpulan data yang seolah-olah diletakkan di atas data yang
lain
koleksi dari objek-objek homogen
Suatu urutan elemen yang elemennya dapat diambil dan
ditambah hanya pada posisi akhir (top) saja
Metode / teknik dalam menyimpan atau mengambil data ke
dan dari memori.
2
Ilustrasi Stack
Terdapat dua buah kotak yang ditumpuk, kotak yang satu
akan ditumpuk diatas kotak yang lainnya. Jika kemudian stack
2 kotak tadi, ditambah kotak ketiga, keempat, kelima, dan
seterusnya, maka akan diperoleh sebuah stack kotak yang
terdiri dari N kotak.
3
Ilustrasi Stack - Contoh.
4
Kaidah Stack (tumpukan)
5
Cara kerja Stack
Stack umumnya digunakan untuk menyimpan nilai data
/ekspresi matematis.
Selain menyimpan & mengambil data, stack juga memeriksa
apakah ekspresi matematis yg dimasukkan sesuai dgn kaidah
penulisan ekspresi matematis atau belum, misal kurang 1
tanda kurung, tanda operasi yg lbh dsb.
Misal akan dimasukkan data berturut2 “R”, “O”,”M”,”A”
kedalam stack.
Langkah 1 : komputer akan melakukan pembuatan (create)
stack, misal untuk 4 lokasi memori
CREATE (S)
6
Maka proses memasukkan elemen data secara berturut2
adalah sbb:
1003 1003
1005
1002 1002
1003
1001 Top O 1001
1001
Top=bottom R 1000 bottom R 1000
1000
S Alamat Alamat
S Alamat S
7
Lanjut:
Masukkan “M” kedlm Masukkan “A” kedlm stack Masukkan “N” kedlm
stack PUSH (“M”,”S”) PUSH (“A”,”S”) stack PUSH (“N”,”S”)
8
Selanjutnya,mengeluarkan isi seluruh stack dengan
cara:
Keluarkan 1 isi stack Keluarkan 1 isi stack Keluarkan 1 isi stack
POP (S) POP (S) POP (S)
9
Lanjut:
1003
1002
1001
1000
S Alamat
Hasil
“A”,”M”,”O”,”R”
10
Dari contoh diatas, perintah/operasi yg ada pada stack
adalah :
a. CREATE : untuk menciptakan suatu stack
b. PUSH : untuk memasukkan elemen data kedlm stack
c. POP : untuk mengeluarkan elemen data dari dlm stack
11
Operasi Stack:
Push : digunakan untuk menambah item
pada stack pada tumpukan paling atas
Pop : digunakan untuk mengambil item
pada stack pada tumpukan paling atas
Clear : digunakan untuk mengosongkan
stack
IsEmpty : fungsi yang digunakan untuk
mengecek apakah stack sudah kosong
IsFull : fungsi yang digunakan untuk
mengecek apakah stack sudah penuh
12
APLIKASI STACK
Penggunaan ADT dalam tumpukan
digunakan untuk mengevaluasi ekspresi
matematika yg sering dijumpai dlm kode2
pemrograman.
13
Tumpukan & Evaluasi Ekspresi
Ekspresi matematis seperti A+B*C yang sering digunakan
dikategorikan sebagai notasi infix dimana operator berada
diantara operand.
Operator adalah lambang operasi matematis
Operand adalah nilai data atau variabel penampung nilai data.
Tidak selamanya ekspresi matematis disimpan secara infix di
komputer. Ada yang menyimpan ekspresi tersebut secara
Postfix
14
Ekspresi postfix
Postfix adalah metode penulisan ekspresi matematis yang
operatornya berada dibelakang operandnya.
Contoh:
Ekspresi Infix Ekspresi Postfix
A+B AB+
A+B*C ABC*+
(A + B ) * C AB+C*
A*B+C AB*C+
15
Bukti bahwa notasi infix A * B + C akan menjadi A
B * C + pada notasi Postfix
1. Pada A * B + C maka operasi pertama yang dilakukan
adalah A * B
2. Jika A * B dimisalkan D, maka akan menjadi D + C
3. Penulisan notasi postfix untuk D + C adalah D C +
4. Sedangkan D adalah A * B, yang notasi postfixnya adalah A
B*
5. Sehingga notasi postfix lengkapnya adalah A B * C +
Catatan: Jadi pernyataan “ A ditambah “B dalam notasi
infix menjadi “ A dan “B ditambahkan pada Notasi
Postfix
16
Persamaan postfix kalau dilakukan proses pembacaan
dari kiri ke kanan, maka operand2 akan ditemukan
sebelum operator2 yg sesuai.
Proses pembacaan postfix yg paling mudah adalah dgn
menggunakan tumpukan
Persamaan postfix ditelusuri dr kiri ke kanan dan
setiap waktu operand dijumpai.
Postfix diaplikasikan pada 2 operand terakhir yg
masuk ke tumpukan (yg sebelumnya dikeluarkan
terlebih dahulu/pop), selanjutnya hasil dr operasi
dimasukkan/push ke tumpukan.
17
Contoh : persamaan postfix 4 8 7 3 + * 2 / +
TOS 3
7
8
4
18
Selanujutnya tanda + dibaca shg 2 elemen teratas dikeluarkan dan
hasilnya adalah (hasil penjumlahan 2 operan tersbt) sebesar 10,
dimasukkan kembali ke tumpukan , shg menghasilkan gambar
berikut:
TOS 10
8
4
19
Simbol yg kemudian dibaca adalah operan *, maka 10 & 8
dikeluarkan dr tumpukan dan dihitung, kemudian hasilnya 80
dimasukkan kembali ke tumpukan shg tumpukan dpt dilukiskan
sebagai berikut:
80
TOS
4
20
Berikut nilai 2 dimasukan kedlm tumpukan:
2
TOS
80
4
21
Sehingg hasilnya adalah :
40
TOS
4
22
Maka hasil tersebut dimasukkan kembali kedlm tumpukan.
TOS 44
S
Sebagai kesimpulan bahwa persamaan postfix mudah untuk
dievaluasi karen aturan yg mendahului harus diaplikasikan
selama evauasi. Hal yg sama tdk bisa dilakukan dalam ekspresi
infiks.
Yg menjadi permasalahan adalah bagamana melakukan konversi
notasi infix ke postfix.
23
Konversi infix ke postfix
Proses konversi yg yg dimaksud adalah bagaimana
menerima persamaan infix sebagai masukan,
kemudian menghasilkan persamaan postfix
sebagai keluaran.
Bentuk umum yg digunakan adalah tumpukan
untuk menyimpan operan yg dijumpai dan
mengeluarkan operan yg mengikuti apa yg
menjadi pendahulunya.
24
Secara spesifik, ekspresi infix ditelusuri dr kiri ke kanan &
memprosesnya mengikuti aturan dibawah ini:
25
Notasi Infix Prefix
Cara penulisan ungkapan yaitu dengan menggunakan notasi infix, yang artinya operator
ditulis diantara 2 operator.
Seorang ahli matematika bernama Jan Lukasiewiccz mengembangkan suatu cara penulisan
ungkapan numeris yang disebut prefix, yang artinya operator ditulis sebelum kedua
operand yang akan disajikan.
Contoh :
26
Notasi Infix Postfix
Cara penulisan ungkapan yaitu dengan menggunakan notasi postfix, yang
artinya operator ditulis sesudah operand.
Contoh :
Proses konversi
dari infix ke postfix : Infix Postfix
=(6-2)*(5+4) 16 / 2 16 2 /
=[62-]*[54+]
( 2 + 14 ) * 5 2 14 + 5 *
=[62-][54+]*
=62-54+* 2 + 14 * 5 2 14 5 * +
(6–2)*(5+4) 62–54+*
27
Contoh:
Penggunaan notasi postfix dalam stack, misal :
2 14 + 5 * = 80
14 5
2 16 16 80
28
Stack with Array of Struct
Definisikan Stack dengan menggunakan struct
Definisikan konstanta MAX_STACK untuk menyimpan
maksimum isi stack
Buatlah variabel array data sebagai implementasi stack
Deklarasikan operasi-operasi/function di atas dan buat
implemetasinya
Program Stack
Deklarasi MAX_STACK
#define MAX_STACK 10
Deklarasi STACK dengan struct dan array data
typedef struct STACK{
int top;
char data[10][10];
};
Deklarasi/buat variabel dari struct
STACK tumpuk;
Program Stack
Inisialisasi Stack
Pada mulanya isi top dengan -1, karena array dalam C
dimulai dari 0, yang berarti stack adalah KOSONG!
Top adalah suatu variabel penanda dalam STACK yang
menunjukkan elemen teratas Stack sekarang. Top Of
Stack akan selalu bergerak hingga mencapai MAX of
STACK sehingga menyebabkan stack PENUH!
Program Stack
Fungsi IsFull
Untuk memeriksa apakah stack sudah penuh?
Dengan cara memeriksa top of stack, jika sudah sama dengan
MAX_STACK-1 maka full, jika belum (masih lebih kecil dari
MAX_STACK-1) maka belum full
Program Stack
43
OPERASI PADA STACK
1. buat stack (stack) - create
membuat sebuah stack baru yang masih kosong
spesifikasi:
tujuan : mendefinisikan stack yang kosong
input : stack
syarat awal : tidak ada
output stack : - (kosong)
syarat akhir : stack dalam keadaan kosong
44
45
OPERASI PADA STACK – Cont.
2. stack kosong (stack) - empty
fungsi untuk menentukan apakah stack dalam keadaan
kosong atau tidak
spesifikasi:
tujuan : mengecek apakah stack dalam keadaan kosong
input : stack
syarat awal : tidak ada
output : boolean
syarat akhir : stack kosong bernilai true jika stack dalam
keadaan kosong
46
OPERASI PADA STACK – Cont.
3. stack penuh (stack) - full
fungsi untuk memeriksa apakah stack yang ada sudah
penuh
spesifikasi:
tujuan : mengecek apakah stack dalam keadaan penuh
input : stack
syarat awal : tidak ada
output : boolean
syarat akhir : stack penuh bernilai true jika stack dalam
keadaan penuh
47
OPERASI PADA STACK – Cont.
4. push (stack, info baru)
menambahkan sebuah elemen kedalam stack.
spesifikasi:
tujuan : menambahkan elemen, info baru pada stack pada
posisi paling atas
input : stack dan Info baru
syarat awal : stack tidak penuh
output : stack
syarat akhir : stack bertambah satu elemen
48
OPERASI PADA STACK – Cont.
5. pop (stack, info pop)
mengambil elemen teratas dari stack
spesifikasi:
tujuan : mengeluarkan elemen dari stack yang berada pada
posisi paling atas
input : stack
syarat awal : stack tidak kosong
output : stack dalam info pop
syarat akhir : stack berkurang satu elemen
49
Contoh
Sebagai contoh, misalkah ada data sebagai
berikut : 1 3 5 6, maka data tersebut dapat
tersimpan dalam bentuk sebagai berikut :
50
Contoh
Contoh lain adalah ada sekumpulan perintah stack yaitu push(5),
push(7), pop, push(3), pop. Jika dijalankan, maka yang akan
terjadi adalah :
51
Representasi stack dalam pemrograman
52
53
54
Pendeklarasian stack
Proses pendeklarasian stack adalah proses
pembuatan struktur stack dalam memori.
Karena stack dapat direpresentasikan dalam
2 cara, maka pendeklarasian stack pun ada 2
yaitu :
a. Pendeklarasian stack yang menggunakan
array.
55
Sambungan
Suatu stack memiliki beberapa bagian yaitu
top yang menunjuk posisi data terakhir
(top)
elemen yang berisi data yang ada dalam
stack. Bagian ini lah yang berbentuk array.
maks_elemen yaitu variable yang
menunjuk maksimal banyaknya elemen
dalam stack.
56
Sambungan
Dalam bahasa C, pendeklarasiannya adalah :
#define maks 100
//pendeklarasian struktur stack
struct tstack{
int top;
int maks_elemen;
int elemen[maks];
};
//pendeklarasian stack
tstack stack;
57
Pendeklarasian stack yang menggunakan
single linked list
Adapun stack yang menggunakan single
linked list, hanya memerlukan suatu pointer
yang menunjuk ke data terakhir. Setiap
elemen linked list mempunyai 2 field yaitu
elemen datanya dan pointer bawah yang
menunjuk posisi terakhir sebelum proses
push.
58
59
Inisialisasi stack
adalah proses pembuatan suatu stack kosong
a. Inisialisasi stack yang menggunakan array. Proses
inisialisasi untuk stack yang menggunakan array
adalah dengan mengisi nilai field top dengan 0 (nol)
jika elemen pertama diawali dengan nomor 1. Kalau
elemen pertama array dimulai dengan 0 (contoh
bahasa C), maka top diisi dengan nilai -1.
60
Sambungan
Implementasinya dalam bahasa C adalah :
void inisialisasi(tstack *stack)
{
stack->top=-1;//karena dalam C array dimulai dgn 0
stack->maks_elemen=maks;
}
Cara pemanggilannya adalah
inisialisasi(&stack);
61
b. Inisialisasi stack yang menggunakan single linked list Proses
inisialisasi untuk stack yang menggunakan single linked list adalah
dengan mengisi nilai pointer stack dengan NULL.
Implementasi dalam bahasa C adalah :
void inisialisasi(PStack *stack)
{
*stack=NULL;
}
Cara pemanggilannya adalah :
inisialisasi(&stack);
62
CONTOH PEMANFAATAN STACK
63
64
65
Contoh :
66