STACK & QUEUE

25
STACK & QUEUE STACK & QUEUE

Transcript of STACK & QUEUE

STACK & QUEUESTACK & QUEUE

STACKSTACK Dalam istilah bahasa Indonesia, Dalam istilah bahasa Indonesia, berarti tumpukan. berarti tumpukan.

Dalam istilah struktur data, berarti Dalam istilah struktur data, berarti setiap akses data (baik penambahan setiap akses data (baik penambahan atau pengurangan data) hanya dapat atau pengurangan data) hanya dapat dilakukan pada satu ujung saja (TOP). dilakukan pada satu ujung saja (TOP).

Ada 2 istilah dalam operasi stackAda 2 istilah dalam operasi stack• PUSH : penambahan data (insert / add)PUSH : penambahan data (insert / add)• POP : pengurangan / penghapusan data POP : pengurangan / penghapusan data (delete) (delete)

Contoh StackContoh Stack

TOP

PUSH A

ATOP

A

DELETE

TOP

POP

B

PUSH B

TOP

A

B

Proses Push dan Pop pada Stack

Penggunaan Vektor untuk Penggunaan Vektor untuk StackStack Ada 2 data pentingAda 2 data penting

• Maxstack = data yang menunjukkan Maxstack = data yang menunjukkan jumlah maksimum elemen stack yang jumlah maksimum elemen stack yang dapat disimpan dalam vectordapat disimpan dalam vector

• TOP, variabel yang bertujuan TOP, variabel yang bertujuan mencatat lokasi “puncak” dari mencatat lokasi “puncak” dari stack. stack.

Penggunaan Vektor untuk Penggunaan Vektor untuk StackStack INITIALIZE INITIALIZE

(S)(S) MaxStack = 3MaxStack = 3 Push (S,”a”)Push (S,”a”) Push (S,”b”)Push (S,”b”) Push (S,”c”)Push (S,”c”) Push (S,”d”)Push (S,”d”) Delete (S,x)Delete (S,x) Delete (S,y)Delete (S,y) Delete (S,z)Delete (S,z)

1 2

a

3

ab

4

ba

c

5

ba

c

message“full stack”

6

ab

7

a

8

message“empty stack”

Procedure & Function dlm Procedure & Function dlm StackStack1. Function Full (S : Stacktype)

{untuk mengetahui apakah S sudah penuh atau belum}BEGINFull := (S.Top = maxstack)ENDJika 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}BEGINEmpty := (S.Top = 0)ENDJika stack S empty, maka nilai = true, jika stack S tidak kosong nilai = false.

Procedure & Function dlm Procedure & Function dlm StackStack3. Function Top Value : Tdata3. Function Top Value : Tdata

BEGINBEGINTop_Value := S.Isi[S.Top] Top_Value := S.Isi[S.Top]

ENDEND4. Function Pop : Tdata4. Function Pop : Tdata

BEGINBEGINPop := S.Isi [S.Top]; Pop := S.Isi [S.Top]; S.Top := S.Top – 1; S.Top := S.Top – 1;

ENDEND5. Procedure Push (Data :Tdata)5. Procedure Push (Data :Tdata)

BEGINBEGINS.Top := S.Top + 1S.Top := S.Top + 1S.Isi[S.Top] := DataS.Isi[S.Top] := Data

ENDEND

QueueQueue Dalam Bahasa Indonesia disebut antrian. Dalam Bahasa Indonesia disebut antrian. Contoh antrian di loket Contoh antrian di loket FIFO (First FIFO (First In First Out)In First Out)

Dalam struktur data, semua akses Dalam struktur data, semua akses insert insert mengambil tempat pada satu ujung akhir mengambil tempat pada satu ujung akhir (REAR), sedangkan semua akses (REAR), sedangkan semua akses delete delete mengambil tempat pada ujung lainnya mengambil tempat pada ujung lainnya (FRONT)(FRONT)

FRONT (head) : menunjuk pada elemen FRONT (head) : menunjuk pada elemen pertama yang ada dalam queue.pertama yang ada dalam queue.

REAR (tail) : menunjuk pada elemen REAR (tail) : menunjuk pada elemen terakhir yang ada dalam queue. terakhir yang ada dalam queue.

QueueQueue Keadaan awal dari queue adalah Keadaan awal dari queue adalah F=R=0 (queue dalam keadaan F=R=0 (queue dalam keadaan kosong / “empty queue”)kosong / “empty queue”)

Data yang masuk dalam queue, Data yang masuk dalam queue, akan masuk dari bagian belakang akan masuk dari bagian belakang (REAR)(REAR)

Data yang dihapus dari queue, Data yang dihapus dari queue, akan dihapus dari bagian depan akan dihapus dari bagian depan (FRONT)(FRONT)

Contoh QueueContoh Queue

F = R =0

Delete Insert

insert “A” A

F=R=1

insert “B” A B

F=1 R=2

insert “C” A B C

F=1 R=3

Delete

F=2

B C

R=3

Delete C

F=R=3

Delete

F=R=0

Kelemahan QueueKelemahan Queue Walaupun masih ada tempat Walaupun masih ada tempat kosong dalam queue, tetapi bila kosong dalam queue, tetapi bila R=F=Max queue, maka tidak dapat R=F=Max queue, maka tidak dapat dilakukan penambahan elemen ke dilakukan penambahan elemen ke dalam queue. dalam queue.

Circular QueueCircular Queue

1

23

4

…i

n

Pada Circular queue, meskipun REAR = maxqueue,

tetap dapat menambahkan elemen lagi ke dalamnya selama masih ada

tempat yang tersedia dalam queue, hal ini

menyebabkan nilai REAR dapat lebih kecil dari nilai

FRONT.

Contoh Circular QueueContoh Circular QueueMisal : ada 4 elemen Misal : ada 4 elemen (j1-j4 dengan n>4)(j1-j4 dengan n>4)if R = n-1 then R if R = n-1 then R 0 0

else R else R R+1 R+1add: R add: R (R+1) mod n (R+1) mod ndelete: F delete: F (F+1) mod n (F+1) mod nif F = R, then full_queueif F = R, then full_queue

Polish NotationPolish Notation Ada 3: Ada 3:

• Infix : operand operator operandInfix : operand operator operand• Prefix : operator operand operandPrefix : operator operand operand• Postfix : operand operand Postfix : operand operand operatoroperatorContoh Operasi

Infix Prefix Postfix

A + B A + B +AB AB+A+B-C ((A + B) –

C)-+ABC AB+C-

KonversiKonversiInfix : 2 * 3 ^ 4 + 1 – 5Infix : 2 * 3 ^ 4 + 1 – 5Prefix : 2 * (^34) + 1 – 5Prefix : 2 * (^34) + 1 – 5(*2^34) + 1 – 5(*2^34) + 1 – 5(+*2^341)(+*2^341) – 5 – 5 –– ++ ** 22 ^̂ 33 44 11 55

Postfix : 2 * (34^) + 1 – 5Postfix : 2 * (34^) + 1 – 5(234^*) + 1 – 5(234^*) + 1 – 5(234^*1+) – 5(234^*1+) – 522 33 44 ^̂ ** 11 ++ 55 ––

Kalkulasi PostFix dengan Kalkulasi PostFix dengan StackStackContoh : 234^*1+5- Contoh : 234^*1+5-

Push 2,3,4Push ^

234

281

Pop 4,3Calculate 3^4 = 81Push 81Push *

1621

Pop 81,2Calculate 2*81Push 162Push 1Push +

Pop 1,162Calculate 162+1Push 163Push 5Push -

1635

Pop 5,163Calculate 163-5Push 158

158

PrefixPrefix Kalo Prefix : operator di push Kalo Prefix : operator di push dulu, jika ketemu dua operand dulu, jika ketemu dua operand berjejer, baru di pop, hasilnya berjejer, baru di pop, hasilnya dipush lagi, dst. dipush lagi, dst.

LatihanLatihanLatihan: Latihan:

• A + B * C * D – EA + B * C * D – E• A + (B – C) * D ^ E A + (B – C) * D ^ E • A ^ B + C ^ D * EA ^ B + C ^ D * E

buat notasi prefix & postfixnyabuat notasi prefix & postfixnyahitung hasilnya bila: hitung hasilnya bila: A = 5, B = 2, C = 1, D =4, E = 4. A = 5, B = 2, C = 1, D =4, E = 4.

JawabanJawabanPrefixPrefix1. -+A**BCDE1. -+A**BCDE2. +A*–BC^DE2. +A*–BC^DE3. +^AB*^CDE3. +^AB*^CDE

PostfixPostfix1. ABC*D*+E-1. ABC*D*+E-2. ABC-DE^*+2. ABC-DE^*+3. AB^CD^E*+3. AB^CD^E*+

JawabanJawabanHasil :Hasil :1. 5 + 2 * 1 * 4 – 4 = 91. 5 + 2 * 1 * 4 – 4 = 92. 5 + (2 – 1) * 4 ^ 4 = 5 + 1 * 2. 5 + (2 – 1) * 4 ^ 4 = 5 + 1 *

16 = 2116 = 213. 5 ^ 2 + 1 ^ 4 * 4 = 25 + 4 * 4 3. 5 ^ 2 + 1 ^ 4 * 4 = 25 + 4 * 4

= 25 + 16 = 41= 25 + 16 = 41

Tugas KelompokTugas KelompokBuat ProgramBuat ProgramSTACKSTACK

• maxstack : 5maxstack : 5• message (ada) : full/emptymessage (ada) : full/empty• dlldll

CIRCULAR QUEUECIRCULAR QUEUE• Maxqueue : 5Maxqueue : 5• Bentuk bisa memanjangBentuk bisa memanjang

Kalkulasi PrefixKalkulasi Prefix Misal diberikan: Misal diberikan: Infix : 2^3 / 6 – 1 Infix : 2^3 / 6 – 1 Prefix : -/^2361Prefix : -/^2361

Ketemu operator di-pushKetemu 2 operand berurutan pop 2 operand, 1 operator, lalu hitung hasilnya

- /^

Push -,/,^,2,3Pop 3,2, ^Calc: 2^3 = 8

23

- /86

Push 8,6Pop 6,8,/Calc: 8/6

- 8/61

Push 8/6, 1Pop 1, 8/6, -Calc: 8/6 – 1

2/6

LatihanLatihanLatihan: Latihan: 1. Diberikan polish notation sbb: 1. Diberikan polish notation sbb:

a. 4^2 / 8 +5 * 2 – 4a. 4^2 / 8 +5 * 2 – 4b. 73*52*-4+3/b. 73*52*-4+3/c. /^+-*635215c. /^+-*635215

i) i) Buat ke dalam bentuk 2 polish Buat ke dalam bentuk 2 polish notation lainnyanotation lainnya

ii) ii) konversi ke bentuk stack dengan konversi ke bentuk stack dengan algoritma prefix & hitung hasilnyaalgoritma prefix & hitung hasilnya

iii) iii) konversi ke bentuk stack dengan konversi ke bentuk stack dengan algoritma postfix & hitung hasilnyaalgoritma postfix & hitung hasilnya

iv)iv) Buat tree untuk masing-masing polish Buat tree untuk masing-masing polish notation di atasnotation di atas

Latihan (2)Latihan (2)2. Misal maxqueue = 72. Misal maxqueue = 7Ikuti perintah-perintah Ikuti perintah-perintah

berikut dan berikut dan ilustrasikan hasilnya ilustrasikan hasilnya (Linier Queue)(Linier Queue)

InitqueueInitqueueInsert LInsert LInsert AInsert AInsert TInsert TInsert IInsert IInsert HInsert HInsert AInsert AInsert NInsert N

DeleteDeleteDeleteDeleteDeleteDeleteDeleteDeleteInsert IInsert IInsert HInsert HDeleteDeleteDeleteDeleteDeleteDelete

3. Misal Maxstack = 5 Ikuti perintah-perintah di atas dan ilustrasikan hasilnya

LatihanLatihan4. Diberikan segmen program berikut4. Diberikan segmen program berikutTYPETYPE

tAlamat = RECORDtAlamat = RECORDJalan : STRING[30];Jalan : STRING[30];Kota : STRING[20];Kota : STRING[20];Kodepos : Word;Kodepos : Word;

END;END;tPegawai = RECORDtPegawai = RECORD

NIP : STRING[9];NIP : STRING[9];Nama : STRING[20];Nama : STRING[20];Alamat : tAlamat;Alamat : tAlamat;Anak : Byte;Anak : Byte;Tunjangan : Longint;Tunjangan : Longint;

END;END;VARVARDataPeg : ARRAY [1..3,6..10] of DataPeg : ARRAY [1..3,6..10] of

tPegawai;tPegawai;

Jika alamat awal Jika alamat awal pada lokasi 3100, pada lokasi 3100, Word = 2 byte, Word = 2 byte, Longint = 4 Byte, Longint = 4 Byte, Integer = 2 byte, Integer = 2 byte, tentukan alamat tentukan alamat dari: dari:

•DataPeg [2,9] DataPeg [2,9] secara CMOsecara CMO•Field Anak dari Field Anak dari DataPeg[1,8] DataPeg[1,8] secara RMOsecara RMO•Field Kota dari Field Kota dari DataPeg[1,7] DataPeg[1,7] secara CMOsecara CMO