Transcript Pengantar

1
STACK
By Serdiwansyah N. A.
2
PENDAHULUAN
• Penyimpanan dan pengambilan data yang sangat
efektif apabila data yang terakhir masuk adalah data
yang akan diambil pertama kali.
• Tumpukan memungkinkan akses ke satu item data
saja, yaitu item terakhir yang disisipkan.
• Bila kita menghilangkan item ini maka kita bisa
mengakses ke sebelah item terakhir yang disisipkan,
dan seterusnya.
3
SEJARAH
• Tumpukan pertama kali diusulkan pada tahun
1955, dan kemudian dipatenkan pada tahun
1957, oleh Friedrich L. Bauer Jerman.
• Konsep yang sama dikembangkan secara
independen, pada sekitar waktu yang sama,
oleh Leonard Charles Australia Hamblin.
4
PENGERTIAN
• Merupakan tumpukan data yang seolaholah diletakkan di atas data yang lain.
• Kita dapat menambahkan (menyisipkan)
data dan mengambil (menghapus) data
melalui ujung yang sama, yang disebut
sebagai ujung atas stack (top of stack).
5
• Stack bersifat LIFO (Last In First Out).
• Benda yang terakhir masuk ke dalam
stack akan menjadi yang pertama
keluar dari stack.
6
ILUSTRASI 1
A
B
C
C
A
B
B
A
A
Top of stack
7
ILUSTRASI 2
D
m
a
s
u
k
D
C
C
B
B
A
A
k
e
l
u
a
r
8
MISALNYA:
Terdapat stack S=(a1, a2, a3, …, an)
1. Elemen mana yang merupakan elemen
terbawah.
2. Elemen mana yang merupakan elemen
paling atas.
3. Elemen mana yang akan dikeluarkan.
4. Elemen mana yang paling akhir dikeluarkan.
9
KARAKTERISTIK STACK
• Elemen stack yaitu item-item data di
elemen stack.
• Top (elemen puncak dari stack)
• Jumlah elemen pada stack.
• Status / kondisi stack.
10
KONDISI STACK
Kondisi stack yang perlu diperhatikan
adalah:
1. Penuh: bila elemen stack mencapai kapasitas
maksimum. Pada kondisi ini tidak mungkin
dilakukan penambahan ke stack.
Penambahan elemen menyebabkan kondisi
kesalahan overflow.
11
2. Kosong: bila tidak ada elemen di stack. Pada
kondisi ini, tidak mungkin dilakukan
pengambilan elemen dari stack.
Pengambilan elemen menyebabkan kondisi
kesalahan underflow.
12
STACK REPRESENTASI STATIS
• Biasanya diimplementasikan dengan
menggunakan array.
• Karena itu, stack dengan representasi
statis dapat mengalami kondisi elemen
penuh.
13
STACK REPRESENTASI DINAMIS
• Biasanya diimplementasikan dengan
menggunakan pointer yang menunjuk pada
elemen-elemen yang dialokasikan pada memori.
• Elemen ditambahkan akan menggunakan
penambahan elemen pada awal stack (addfirst).
• Saat pengambilan atau penghapusan elemen
menggunakan penghapusan di awal stack
(delfirst).
14
OPERATOR-OPERATOR DI
DALAM STACK
15
OPERASI PUSH
• Adalah operasi menambahkan elemen baru pada
sebuah stack.
• Aturan penambahan stack:
▫ Sebagai kondisi awal ada sebuah stack yang telah
memiliki beberapa elemen dengan elemen paling
atas sebagai top.
▫ Dibuat sebuah elemen baru yang akan dimasukkan
ke dalam stack.
16
▫ Elemen baru dimasukkan ke dalam stack.
▫ Penunjuk top pada stack diubah menunjuk ke
elemen yang baru saja ditambahkan.
Elemen baru
top
top
17
OPERASI POP
• Adalah operasi mengambil sebuah elemen dari
sebuah stack. Aturan mengambil sebuah elemen dari
sebuah stack adalah sebagai berikut:
▫ Sebagai kondisi awal ada sebuah stack yang telah
memiliki beberapa elemen dengan elemen paling atas
sebagai top.
▫ Penunjuk top diubah menjadi menunjuk elemen di
bawah elemen atas.
▫ Elemen atas diambil dari stack.
18
ILUSTRASI
Elemen keluar
top
top
19
CONTOH
• Ada sekumpulan perintah stack yaitu push(3),
push(5), pop, push(2), pop, pop.
• Maka apabila dijalankan maka hasilnya adalah:
T
T
Top = 0
kosong
T
5
3
3
Push 3
Push 5
T
2
3
3
Pop
Push 2
T
3
Pop
Pop
Stack kosong
20
CREATE
• Operator ini berfungsi untuk membuat sebuah stack
kosong.
21
ISEMPTY
• Operator ini berfungsi untuk menentukan apakah
suatu stack adalah stack kosong. Operasinya akan
bernilai boolean, dengan definisi sebagai berikut :
ISEMPTY(S) = true, jika S adalah stack kosong
= false, jika S bukan stack kosong
atau
ISEMPTY(S) = true, jika (S) = NULL
= false, jika (S)= 1
Catatan :
ISEMPTY(CREATE(S)) = true.
22
ISFULL
• Operator ini berfungsi untuk menentukan apakah
suatu stack adalah stack penuh. Operasinya akan
bernilai boolean, dengan definisi sebagai berikut :
ISFULL(S) = true, jika S adalah stack penuh
= false, jika S bukan stack penuh
Catatan :
ISEMPTY(CREATE(S)) = true.
23
PENGGUNAAN STACK
• Dalam dunia komputer, penggunaan stack
(tumpukan) merupakan suatu hal yang umum
digunakan seperti untuk penentuan alamat memory,
penempatan ruang data dan aplikasi lain.
• Aplikasi stack juga digunakan untuk berbagai macam
keperluan seperti pengujian kalimat palindrome,
penguji tanda kurung (matching parentheses), dan
juga berfungsi sebagai konversi dari notasi infix
menjadi notasi postfix.
24
• Sebuah kompilator mempunyai tugas, salah satu di
antaranya adalah menyelidiki apakah Pemrogram
telah dengan cermat mengikuti aturan tata bahasa,
atau sintaks dari bahasa pemrograman yang
bersangkutan.
• Misalnya untuk parantheses kiri (tanda kurung buka)
yang diberikan, harus dipastikan adanya
parantheses kanan (tanda kurung tutup) yang
bersangkutan.
25
MATCHING PARENTHESES
• Proses ini dilakukan compiler untuk memeriksa
kelengkapan tanda kurung yang terdapat pada suatu
ekspresi aritmetik. Sedangkan stack di sini digunakan
sebagai tempat prosesnya.
• Algoritma yang digunakan adalah :
1. Elemen-elemen suatu ekspresi aritmetik (string) diScan dari kiri ke kanan.
2. Jika ditemukan simbol "(" atau "Left parenthesis",
maka simbol tersebut di-push ke dalam stack.
26
3. Jika ditemukan simbol ")" atau "Right
parenthesis", maka isi stack diperiksa.
 Jika stack kosong terjadi kesalahan.
▫ berarti : ada simbol ")", tetapi tidak ada simbol "("
yang seharusnya mendahului.
 Jika stack tidak kosong artinya ada pasangannya dan
langsung di-POP keluar stack.
27
INTERPRETER POSTFIX
• Contoh lain penggunaan stack adalah pemeriksaan
dan eksekusi ekpresi postfix.
• Ekspresi postfix merupakan ekpresi dengan aturan L
R B dengan L adalah operand kiri, R operand kanan
dan B adalah operatornya.
• Ekspresi yang kita biasa gunakan sehari-hari adalah
ekspresi infix dengan aturan L B R. Contoh, jika
ekspresi infixnya "6*7-2" maka ekspresi postfixnya
adalah "6 7 * 2 -".
28
NOTASI INFIX DAN POSTFIX
• Suatu perhitungan aritmatika biasanya
berhubungan dengan operand dan operator.
Operand merupakan suatu karakter atau
elemen yang nilainya dioperasikan dengan
bantuan suatu operator untuk menghasilkan
suatu solusi.
29
• Misalkan jika diberikan suatu ekspresi
aritmatika 2 * 3, maka elemen ‘dua’ dan
elemen ‘tiga’ merupakan operand dari
ekspresi tersebut dan elemen ‘*’ merupakan
operator perkalian atas dua operand yang
menghasilkan suatu solusi.
30
• Dalam penggunaannya, dalam kehidupan sehari-hari
notasi infix merupakan notasi aritmatika yang paling
banyak digunakan untuk mengekspresikan suatu
perhitungan artimatik dibanding dengan dua notasi yang
lain.
• Akan tetapi notasi Postfix merupakan notasi yang
digunakan oleh mesin kompilasi pada komputer dengan
maksud untuk mempermudah proses pengkodean,
sehingga mesin kompilasi membutuhkan stack untuk
proses translasi ekspresi tersebut.
31
NOTASI POSTFIX
• Bentuk aplikasi stack yang lain adalah mengubah
suatu ekspresi aritmatik (string) ke dalam notasi
postfix. Notasi postfix ini digunakan oleh compiler
untuk menyatakan suatu ekspresi aritmatik dalam
bahasa tingkat tinggi (high level language). Stack
digunakan oleh compiler untuk mentransformasikan
ekspresi aritmatik menjadi suatu ekspresi dalam
bentuk/notasi postfix.
32
Contoh :
• Misal diberikan ekspresi aritmatik : A + B ;
• Maka bentuknya dalam notasi postfix menjadi : AB+
33
Urutan (prioritas) dari operator adalah :
1. Perpangkatan (^)
2. Perkalian (*) atau Pembagian (/)
3. Penjumlahan (+) atau Pengurangan (-)
OPERATOR
ARTI
PRIORITAS
^
PANGKAT
3
* /
KALI BAGI
2
+ -
TAMBAH KURANG
1
34
ATURAN DALAM PROSES
TRANSFORMASI KE POSTFIX
• Ekspresi aritmatik yang diberikan di- "Scan" dari kiri ke kanan.
• Bila simbol yang di-scan adalah "(", maka simbol tersebut di
push ke dalam stack.
• Bila simbol yang di-scan adalah ")", maka seluruh isi stack di
pop keluar mulai dari simbol "(" yang pertama ditemukan
dalam stack.
• Bila simbol adalah operator, maka dilakukan perbandingan
dulu dengan simbol (operator) yang berada pada posisi top
dalam stack:
▫ Jika derajatnya setara atau lebih rendah dari simbol yang berada
pada posisi top, maka top stack di-pop keluar sebagai output dan
simbol yang baru di-push ke dalam stack.
35
▫ Jika derajatnya lebih tinggi dari simbol yang berada
pada posisi top, maka simbol (operator) yang di-scan
tersebut di-push ke dalam stack.
• Bila simbol yang di-scan adalah operand, maka
simbol tersebut langsung sebagai output.
• Bila simbol adalah ";" maka seluruh isi stack di-pop
sebagai output.
36
CONTOH
• 3+2*5
• (A + B) * (C – D) / E;