STRUKTUR DATA - 3 SKS - 2011

Download Report

Transcript STRUKTUR DATA - 3 SKS - 2011

LINEAR LIST (Daftar Linier)
• Daftar linier (Linear List) adalah suatu struktur data umum
yang terbentuk dari barisan hingga (yang terurut) dari
satuan data, atau pun dari record.
• Elemen dari daftar linier disebut simpul atau node.
• Daftar ini disebut linier karena susunan elemennya adalah
linier, yaitu bahwa bagi setiap elemen selalu ada elemen
setelah dan sebelumnya, kecuali pada elemen pertama dan
terakhir.
• Banyaknya simpul dalam suatu daftar linier dapat berubahubah, berbeda dengan array yang jumlah elemennya selalu
tetap.
Struktur mana yang Linier?
LINEAR LIST (Daftar Linier)
• List linier A yang mengandung T elemen pada
suatu saat ditulis sebagai A = {A1,A2,A3,…,AT}
• Jika T = 0 maka A disebut list hampa atau null
list.
• Penambahan (insert) elemen baru atau
penghapusan (delete) elemen boleh
dilakukan pada sembarang posisi.
STACK (Tumpukan)
• Stack atau Tumpukan adalah bentuk khusus dari
list linier (linear list) yang penambahan dan
penghapusan elemennya hanya boleh melalui
salah satu sisi.
• Posisi untuk menambah dan menghapus elemen
pada stack disebut TOP atau puncak.
• Elemen pada puncak stack diacu dengan TOP(S).
• Penambahan dan pengurangan elemen pada
STACK menggunakan prinsip LIFO (Last In First
Out).
STACK (Tumpukan)
• Stack atau Tumpukan adalah bentuk khusus
dari list linier (linear list) yang penambahan
dan penghapusan elemennya hanya boleh
melalui salah satu sisi.
• Posisi untuk menambah dan menghapus
elemen pada stack disebut TOP atau puncak.
• Elemen pada puncak stack diacu dengan
TOP(S).
Bila stack kosong, maka TOP(S) tidak
terdefinisi.
• Penambahan dan pengurangan elemen pada
STACK menggunakan prinsip LIFO (Last In
First Out).
STACK (Tumpukan)
• Operasi-operasi pada struktur data STACK:
CREATE = pembentukan stack (alokasi memori)
PUSH
= menambah elemen baru
POP
= mengambil/menghapus elemen dari stack
ISEMPTY = memeriksa apakah stack kosong
• Fungsi-fungsi untuk operasi stack adalah
TOP = menunjuk kepada elemen puncak pada stack
jika stack kosong maka TOP(S) tidak terdefinisi
NOEL = jumlah elemen dalam stack (Number Of
ELements)
•
•
•
•
CREATE(S)
NOEL(S) = 0
TOP(S) tidak terdefinisi
Stack S = []
•
•
•
•
PUSH elemen A
NOEL(S) = 1
TOP(S) = A
Stack S = [A]
A
•
•
•
•
PUSH elemen G
NOEL(S) = 2
TOP(S) = G
Stack S = [A,G]
•
•
•
•
PUSH elemen K
NOEL(S) = 3
TOP(S) = K
Stack S = [A,G,K]
G
A
K
G
A
•
•
•
•
POP
NOEL(S) = 2
TOP(S) = G
Stack S = [A,G]
•
•
•
•
PUSH elemen M
NOEL(S) = 3
TOP(S) = M
Stack S = [A,G,M]
G
A
M
G
A
•
•
•
•
PUSH elemen W
NOEL(S) = 4
TOP(S) = W
Stack S = [A,G,M,W]
•
•
•
•
PUSH elemen F
NOEL(S) = 5
TOP(S) = F
Stack S = [A,G,M,W,F]
W
M
G
A
F
W
M
G
A
Aplikasi Stack
• Stack sangat luas pemakaiannya dalam
penyelesaian berbagai macam problem.
Misalnya pada compiler, sistem operasi, dsb.
• Kasus yang sering menggunakan stack adalah
penjodohan tanda kurung (matching
parentheses)
Aplikasi Stack
• Algoritma matching parentheses:
Amati barisan elemen dari kiri ke kanan.
Jika ditemukan parenthesis kiri, maka PUSH
parenthesis kiri ke stack.
Jika ditemukan parenthesis kanan, maka periksa
apakah stack kosong. Jika ya  error,
jika tidak, POP elemen dari stack.
Jika penelusuran barisan elemen selesai tetapi
stack tidak kosong  error.
Aplikasi Stack
• Pembentukan Notasi Postfix
• Pembentukan Notasi Postfix bertujuan untuk
mempermudah pembentukan kode obyek pada proses
kompilasi bahasa pemrograman tingkat tinggi (high level
programming language)
• Notasi Postfix berarti posisi operator ditempatkan setelah
operan-operannya.
infix
postfix
Contoh:
A+B

AB+
(A+B)*C

AB+C*
Y=M/(X+C)-F

YMXC+/F-=
Pada notasi postfix, tanda kurung tidak digunakan.
Mengubah Infix  Postfix
Ekspresi dibaca per karakter dari kiri ke kanan.
Algoritma:
1) Jika dibaca tanda “(“ maka PUSH ke stack
2) Jika dibaca tanda “)” maka POP semua elemen dari stack sampai
ditemukan tanda “(“
3) Semua elemen yang di-POP ditulis kembali, kecuali tanda “(“
4) Jika simbol adalah operan maka operan tersebut langsung dioutput.
5) Jika dibaca simbol operator maka periksa apakah elemen TOP
merupakan operator yang levelnya sama atau lebih tinggi, jika ya,
POP dan output-kan operator dari stack. Lanjutkan proses ini
sampai TOP adalah “(“ atau operator dengan level lebih rendah.
Jika hal ini terjadi, operator yang diamati di PUSH
Mengubah Infix  Postfix
• Ada 3 level operator:
level tertinggi
: pemangkatan
level menengah : perkalian (*), pembagian (/)
level terendah
: penjumlahan (+), pengurangan (-)
• Operator dengan level lebih tinggi selalu diproses lebih
dulu.
Contoh : 3 + 4 * 5 = 3 + 20 = 23
12 / 3 + 3 = 4 + 3 = 7
1–2*3+4/2+7=1–6+2+7=4
START
Input E
N  Len(E)
i = 1 to N
cc  E[i]
cc = “(“
Y
cc = “)“
Y
PUSH (cc)
N
A
N
Y
cc in [“0”..”9”] or
cc in [“A”..”Z”]
Output (cc)
N
Y
cc in [“+”,”-”,”*”,”/”,”^”]
N
N
i >= N
Y
C
B
D
A
B
cc  POP
TOP(S)
Higher or Equal
cc
cc = “(“
Y
D
N
N
Output cc
D
ISEMPTY(S)
Y
END
N
ERROR
cc  POP
Output cc
PUSH (cc)
C
Y
• Ubahlah ekspresi berikut menjadi notasi
postfix
((A+B)*C/D+E^F)/G
Ekspresi dibaca dari kiri ke kanan
( ( A + B
)
* C / D + E ^ F
TOP 
( ( ( + +
(
* * /
/ + + ^ ^
(
(
Output
( ( (
(
(
(
A
B
(
(
)
/ G
/ /
( ( + +
( (
+
C * D / E
F ^+
G /
Infix  Postfix
• Cara lain mengubah notasi infix menjadi
postfix adalah dengan menggunakan struktur
pohon.
A+B
A+B*C
A * (B + C)
+
A
+
B
*
*
A
B
+
A
C
B
C
Infix  Postfix
• Y = ((A+B)*C/D+E^F)/G
=
/
Y
+
/
*
+
A
B
^
D
C
G
E
F