Pertemuan 4,5(struktur data)

Download Report

Transcript Pertemuan 4,5(struktur data)

STRUKTUR DATA
STACK
Denny Agustiawan,M.pd
STMIK Asia Malang – 2011
LINEAR LIST






Linear List adalah suatu struktur data yang merupakan himpunan
terurut.
Misal didefinisikan suatu linear list A yang terdiri atas T buah
elemen sebagai berikut :
A = [a1, a2, .........., aT]
Jika T = 0, maka A dikatakan sebagai “Null List”.
Suatu elemen dari sembarang posisi pada linear list A dapat
dihilangkan.
Sebaliknya, suatu elemen baru dapat dimasukkan ke dalam list dan
dapat menempati sembarang posisi pada list tersebut.
Jadi suatu linear list dapat berkurang atau bertambah setiap saat.
DEFINISI STACK



Dalam istilah bahasa Indonesia, berarti tumpukan.
Dalam istilah struktur data, berarti setiap akses data (baik
penambahan atau pengurangan data) hanya dapat dilakukan
pada satu ujung saja (TOP).
Stack adalah suatu bentuk khusus dari linear list di mana
operasi penyisipan dan penghapusan atas elemen-elemennya
hanya dapat dilakukan pada satu sisi saja yang disebut sebagai
“TOP”
STACK
Misal diberikan Stack S sebagai berikut :
S = [ S1, S2, .........., ST ]  maka TOP(S) = ST
 Untuk menunjukkan jumlah elemen suatu stack digunakan
notasi NOEL.
 Dari stack di atas, maka NOEL(S) = T.
 Ada 2 istilah dalam operasi stack
◦ PUSH : penambahan data (insert / add)
◦ POP : pengurangan / penghapusan data (delete)

Contoh Stack
DELETE
B
TOP
TOP
TOP
B
A
A
A
PUSH A
PUSH B
POP
Proses Push dan Pop pada Stack
TOP
Penggambaran Stack

Selanjutnya, jika diberikan sebuah stack S = [A,B,C,D], maka
stack S ini dapat digambarkan sebagai berikut :
A
D
C
B
Top
A
B
C
D
B
Top
C
D
Top
D
A
Top
C
B
A
Penggunaan Vektor untuk Stack

Ada 2 data penting
◦ Maxstack = data yang menunjukkan jumlah
maksimum elemen stack yang dapat disimpan
dalam vektor
◦ TOP, variabel yang bertujuan mencatat lokasi
“puncak” dari stack.
Penggunaan Vektor untuk Stack









INITIALIZE (S)
MaxStack = 3
Push (S,”a”)
Push (S,”b”)
Push (S,”c”)
Push (S,”d”)
Pop(S,x)
Pop(S,y)
Pop(S,z)
message
“full stack”
a
1
2
c
c
b
b
b
a
a
a
3
4
message
“empty stack”
b
a
6
a
7
8
5
OPERASI DASAR PADA STACK

Ada empat operasi dasar yang didefinisikan pada
stack, yaitu :
◦
◦
◦
◦
CREATE(stack)
ISEMPTY(stack)
PUSH(elemen,stack)
POP(stack)
CREATE

Operator ini berfungsi untuk membuat
sebuah stack kosong dan didefinisikan
bahwa :
◦ NOEL(CREATE(S)) = 0 dan
◦ TOP(CREATE(S)) = null
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 NOEL(S) = 0
= false, jika NOEL(S) ≠0

Catatan : ISEMPTY(CREATE(S)) = true.
PUSH
Operator ini berfungsi untuk menambahkan satu
elemen ke dalam stack.
 Notasi yang digunakan adalah : PUSH(E,S)
 Artinya menambahkan elemen E ke dalam stack S
 Elemen yang baru masuk ini akan menempati posisi TOP.
 Jadi : TOP(PUSH(E,S)) = E
 Akibat dari operasi ini jumlah elemen dalam stack akan
bertambah, artinya NOEL(S) menjadi lebih besar atau
stack menjadi tidak kosong (ISEMPTY(PUSH(E,S)) =
false).

POP





Operator ini berfungsi untuk mengeluarkan satu elemen dari dalam
stack.
Notasinya :
POP(S)
Elemen yang keluar dari dalam stack adalah elemen yang berada
pada posisi TOP.
Akibat dari operasi ini jumlah elemen stack akan berkurang atau
NOEL(S) berkurang dan elemen pada posisi TOP akan berubah.
Operator POP ini tidak dapat digunakan pada stack kosong, artinya
:
POP(CREATE(S)) = error condition

Catatan :
TOP(PUSH(E,S)) = E
Procedure & Function dlm Stack
1. Function Full (S : Stacktype)
{untuk mengetahui apakah S sudah penuh atau belum}
BEGIN
Full := (S.Top = maxstack)
END
Jika Stack S full, maka nilai ini = true, atau jika S belum penuh, maka
nilai menunjukkan false.
2. Function Empty (S : Stacktype)
{untuk mengetahui apakah S sudah kosong atau belum}
BEGIN
Empty := (S.Top = 0)
END
Jika stack S empty, maka nilai = true, jika stack S tidak kosong nilai
= false.
Procedure & Function dlm Stack
3. Function Top Value :Tdata
BEGIN
Top_Value := S.Isi[S.Top]
END
4. Function Pop :Tdata
BEGIN
Pop := S.Isi [S.Top];
S.Top := S.Top – 1;
END
5. Procedure Push (Data :Tdata)
BEGIN
S.Top := S.Top + 1
S.Isi[S.Top] := Data
END
DEKLARASI STACK PADA
BAHASA PEMROGRAMAN







Dalam bahasa pemrograman, untuk menempatkan stack biasanya
digunakan sebuah array.
Tetapi perlu diingat di sini bahwa stack dan array adalah dua hal
yang berbeda.
Misalkan suatu variabel S adalah sebuah stack dengan 100 elemen.
Diasumsikan elemen S adalah integer dan jumlah elemennya
maksimum adalah 100 elemen.
Untuk mendeklarasikan stack dengan menggunakan array, harus
dideklarasikan pula variabel lain yaitu TOP_PTR yang merupakan
indeks dari array.
Variabel TOP_PTR ini digunakan untuk menyatakan elemen yang
berada pada posisi TOP dalam stack tersebut.
Selanjutnya gabungan kedua variabel ini diberi nama
STACK_STRUCT.

Kemudian didefinisikan bahwa :
NOEL(S)
= TOP_PTR
ISEMPTY(S)
= TRUE
jika TOP_PTR = 0 dan
= FALSE
jika TOP_PTR > 0

Maka bentuk deklarasinya dalam PASCAL
adalah :
TYPE Stack_Struct = Record
Stack : array[1..100] of integer;
TopPtr : integer;
End;
VAR S : Stack_Struct;

Selanjutnya, untuk keperluan operasi PUSH dan POP
harus dibuat suatu prosedur tersendiri, yaitu :
PROCEDURE PUSH(Eon : integer);
Begin
If (S.TopPtr < NoelMax) Then Begin
S.TopPtr := S.TopPtr + 1;
S.Stack [S.TopPtr] := Eon
End
Else Overflow_Condition
End;
PROCEDURE POP(Eoff : integer);
Begin
If (S.TopPtr > 0) Then Begin
Eoff := S.Stack[S.TopPtr];
S.TopPtr := S.TopPtr - 1
End
Else Underflow_Condition
End;

Catatan :
◦ Overflow adalah suatu keadaan di mana kita melakukan operasi PUSH terhadap
stack dalam keadaan penuh.
◦ Underflow adalah keadaan di mana kita melakukan operasi POP terhadap stack
kosong.
◦ Eon adalah elemen yang akan dimasukkan ke dalam stack dan
◦ Eoff adalah elemen yang akan dikeluarkan dari dalam stack.
PENGGUNAAN/ APLIKASI
STACK



Logika stack digunakan untuk menyelesaikan
berbagai macam masalah.
Antara lain digunakan pada compiler, operating
system dan dalam program-program aplikasi.
Berikut ini tiga buah contoh aplikasi stack:
◦ MATCHING PARENTHESES
◦ NOTASI POSTFIX
◦ PROSES REKURSIF
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 :
◦ Elemen-elemen suatu ekspresi aritmetik (string) di-Scan dari kiri ke
kanan.
◦ Jika ditemukan simbol "(" atau "Left parenthesis", maka simbol tersebut
di-push ke dalam stack.
◦ 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.

Misalkan NEXT CHAR adalah suatu karakter terakhir dalam suatu string.
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.

PROSES REKURSIF




Stack juga dapat digunakan untuk menelusuri suatu program atau
procedure yang rekursif.
Berikut ini sebuh contoh yang menyelesaikannya menggunakan proses
rekursif.
Persoalan :
Agar diperoleh uang sebanyak 1.000.000 rupiah pada 25 tahun yang akan
datang, berapakah banyak uang yang harus didepositokan saat ini? dianggap
bahwa tingkat bunga tidak berubah selama 25 tahun yaitu sebesar 8%
per/tahun.
Penyelesaian :
Untuk menyelesaikan masalah ini akan digunakan logika stack yaitu :
- pada tahun ke-25 jumlah uang = Rp. 1.000.000,- pada tahun ke-24 jumlah uang = Rp. 1.000.000 / (1 + 0.8)
- pada tahun ke-23 jumlah uang =
.
dst
Polish Notation

Ada 3:
◦ Infix : operand operator operand
◦ Prefix : operator operand operand
◦ Postfix : operand operand operator
Contoh Operasi
Infix
Prefix
Postfix
A+B
A+B
+AB
AB+
A+B-C
((A + B) – C)
-+ABC
AB+C-
Konversi
Infix : 2 * 3 ^ 4 + 1 – 5
Prefix : 2 * (^34) + 1 – 5
(*2^34) + 1 – 5
(+*2^341) – 5
–+*2^3415
Postfix : 2 * (34^) + 1 – 5
(234^*) + 1 – 5
(234^*1+) – 5
234^*1+5–
Postfix

Postfix: operan di push dulu, jika ketemu
operator, baru di pop, hasilnya dipush lagi,
dst.
Kalkulasi PostFix dengan Stack
Contoh : 234^*1+5-
4
3
2
Push 2,3,4
Push ^
81
2
Pop 4,3
Calculate 3^4
= 81
Push 81
Push *
1
16
2
5
16
3
Pop 81,2
Calculate
2*81
Push 162
Push 1
Push +
Pop 1,162
Calculate
162+1
Push 163
Push 5
Push -
15
8
Pop 5,163
Calculate
163-5
Push 158
Prefix

Kalo Prefix : operator di push dulu, jika
ketemu dua operand berjejer, baru di pop,
hasilnya dipush lagi, dst.
Kalkulasi Prefix

Misal diberikan:
Infix : 2^3 / 6 – 1
Prefix : -/^2361
Ketemu operator  di-push
Ketemu 2 operand berurutan 
pop 2 operand, 1 operator, lalu
hitung hasilnya
3
2
6
^
8
1
/
/
8/6
-
-
-
Push -,/,^,2,3
Pop 3,2, ^
Calc: 2^3 = 8
Push 8,6
Pop 6,8,/
Calc: 8/6
Push 8/6, 1
Pop 1, 8/6, Calc: 8/6 – 1
2/6
Latihan
Latihan:
◦A+B*C*D–E
◦ A + (B – C) * D ^ E
◦A^B+C^D*E
buat notasi prefix & postfixnya
hitung hasilnya bila:
A = 5, B = 2, C = 1, D =4, E = 4.
Jawaban
Prefix
1. -+A**BCDE
2. +A*–BC^DE
3. +^AB*^CDE
Postfix
1. ABC*D*+E2. ABC-DE^*+
3. AB^CD^E*+
Jawaban
Hasil :
1. 5 + 2 * 1 * 4 – 4 = 9
2. 5 + (2 – 1) * 4 ^ 4 = 5 + 1 * 16 = 21
3. 5 ^ 2 + 1 ^ 4 * 4 = 25 + 4 * 4 = 25 + 16 =
41
MAPPING KE STORAGE DARI
STACK



Bentuk mapping ke storage dari stack yang paling
sederhana adalah dengan menggunakan pendekatan
array satu dimensi.
Hal ini karena sarana yang digunakan untuk menyatakan
suatu stack adalah array.
Jika diberikan stack S dengan m elemen maka bentuk
mappingnya seperti mapping array satu dimensi dengan
m elemen.
start
stack S
TOP
elemen
batas/start struktur data lain

Selanjutnya jika terdapat dua stack S1 dan S2 masing-masing
dengan jumlah maksimum elemennya adalah M dan N, maka
kedua stack ini dialokasikan dalam dengan bentuk sbb:
start S1

TOP S1
(sementara)
st art S2
TOP S2
start
(sementara) struktur data lain
Konsep mapping seperti diatas dianggap tidak efisien, terutama
jika S1 dan S2 tidak penuh pada saat yang bersamaan.

Cara yang dianggap lebih baik adalah :
◦ Jika diketahui bahwa jumlah elemen S1 dan S2 tidak melebihi
jumlah tertentu, misal N.


NOEL(S1) + NOEL(S2) <= N
Maka bentuk mapping yang digunakan adalah :
start s1
TOP s1
(sementara)
TOP s2
(sementara)
start s2
Latihan
Latihan:
1. Diberikan polish notation sbb:
a. 4^2 / 8 +5 * 2 – 4
b. 73*52*-4+3/
c. /^+-*635215
i) Buat ke dalam bentuk 2 polish notation lainnya
ii) konversi ke bentuk stack dengan algoritma prefix & hitung
hasilnya
iii) konversi ke bentuk stack dengan algoritma postfix & hitung
hasilnya
iv) Buat tree untuk masing-masing polish notation di atas
Tugas Kelompok
Masing-masing kelompok maksimal 3
orang
 Buat Program STACK

◦ maxstack : 50
◦ message (ada) : full/empty
◦ Bisa menginputkan sebuah polish notation