STACK & QUEUE
-
Upload
undar-jombang -
Category
Documents
-
view
0 -
download
0
Transcript of STACK & 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