Pertemuan 6,7(struktur data)

Download Report

Transcript Pertemuan 6,7(struktur data)

STRUKTUR DATA
QUEUE
Denny Agustiawan,M.pd
STMIK Asia Malang – 2011
Definisi


Queue adalah suatu linear list di mana operasi
DELETE terjadi pada sisi depan (FRONT) dan
operasi INSERT terjadi pada sisi belakang (REAR).
Jika diberikan suatu Queue Q dengan elemenelemennya yang terdiri atas Q1, Q2, ....., QT maka
queue Q dituliskan
Q = [ Q1, Q2, .........., QT ]
◦ FRONT(Q) = Q1
◦ REAR(Q) = QT


Selanjutnya untuk menyatakan jumlah elemen dalam
suatu queue Q digunakan notasi NOEL(Q).
Catatan : Satu pengoperasian berlaku hanya untuk
satu elemen.
Queue
Dalam Bahasa Indonesia disebut antrian.
Contoh antrian di loket  FIFO (First In First
Out)
 Dalam struktur data, semua akses insert
mengambil tempat pada satu ujung akhir
(REAR), sedangkan semua akses delete
mengambil tempat pada ujung lainnya (FRONT)
 FRONT (head) : menunjuk pada elemen
pertama yang ada dalam queue.
 REAR (tail) : menunjuk pada elemen terakhir
yang ada dalam queue.


Queue
Keadaan awal dari queue adalah F=R=0
(queue dalam keadaan kosong / “empty
queue”)
 Data yang masuk dalam queue, akan
masuk dari bagian belakang (REAR)
 Data yang dihapus dari queue, akan
dihapus dari bagian depan (FRONT)

Gambar Queue


Untuk menggambarkan suatu queue dapat dilakukan
beberapa cara
Misal : diberikan Queue Q = [A, B, C, D, E, F], maka
Queue Q dapat digambarkan sebagai berikut :
A
FRONT

B
C
D
E
F
F
REAR
REAR
E
D
C
atau dapat pula digambarkan dengan posisi tegak.
B
A
FRONT
Contoh Queue
Delete
Insert
F = R =0
insert “A”
A
Delete
F=R=1
insert “B”
A
A
F=1
C
F=2 R=3
B
Delete
F=1 R=2
insert “C”
B
B
C
F=R=3
C
R=3
Delete
F=R=0
Prinsip Kerja Queue
Prinsip
kerja Queue adalah FIFO
(First In First Out), di mana data yang
masuk terlebih dahulu akan keluar
pertama.
Operasi-operasi Pada Queue (Q)

Terdapat empat operasi dasar yang didefinisikan
pada queue, yaitu :
◦ CREATE
◦ ISEMPTY
◦ INSERT
◦ REMOVE
CREATE


Bentuk Umum : CREATE(Queue)
Suatu operasi CREATE(Q) akan menghasilkan
suatu queue kosong dengan nama Q, dan
didefinisikan bahwa :
NOEL(CREATE(Q)) = 0
FRONT(CREATE(Q)) = tidak terdefinisi
REAR(CREATE(Q)) = tidak terdefinisi
ISEMPTY
Bentuk Umumnya adalah : ISEMPTY(queue)
 Jika Q adalah Queue, maka ISEMPTY(Q) adalah suatu
operasi yang digunakan untuk memeriksa apakah Queue
Q adalah queue kosong.
 Jika hasil dari operasi ini akan berjenis data boolean
(true/false), dengan bentuk sebagai berikut :
ISEMPTY(Q)
= True, jika Q adalah queue kosong.
= False, jika Q bukan queue kosong.

INSERT





Bentuk Umumnya : INSERT(elemen, Queue)
INSERT(E,Q), di mana E = elemen dan Q = queue,
adalah suatu operasi yang digunakan untuk
memasukkan elemen E ke dalam queue Q.
Didefinisikan, bahwa elemen E akan menjadi elemen
yang berada pada posisi REAR dari queue Q. Akibat
dari operasi ini adalah :
- REAR(INSERT(E,Q)) = E
- NOEL(Q) bertambah satu dan QNOEL
adalah E
Jika Q adalah queue kosong, maka :
ISEMPTY(INSERT(E,Q)) = False
Dalam bentuk statement Pascal, biasanya dituliskan :
IF ISEMPTY(Q) Then front(insert(E,Q)) = E
Else front(insert(E,Q)) = front(Q) ;
REMOVE



Bentuk Umum : REMOVE(elemen, queue)
REMOVE(Q) berarti mengeluarkan elemen Q yang
berada pada posisi FRONT. Akibat dari operasi ini,
elemen Q akan berkurang satu dan elemen kedua
(elemen yang berada disebelahnya) akan menjadi
elemen yang berada pada posisi FRONT dari queue
Q ini.
Selanjutnya, jika Q adalah queue kosong, maka
REMOVE(Q) akan menghasilkan suatu Error.
IF NOEL(Q) = 0 Then Remove(Q) =
erroe_condition
Remove(create(Q)) = error_condition
Deklarasi Queue Dalam Pascal




Dalam bahasa pemrograman biasanya tidak ada fasilitas
queue (built in queue).
Untuk itu setiap programmer harus mendefinisikan
sendiri dengan bantuan fasilitas yang ada.
Pada umumnya fasilitas yang digunakan untuk
mendeklarasikan queue adalah Array.
Bentuk deklarasinya dalam bahasa Pascal adalah sebagai
berikut :
TYPE StrukQueue = Record
Q : Array[1..100] of integer;
Front, Rear : integer;
End;
VAR Q : StrukQueue;
Procedur dlm Bahasa Pemrograman
Selanjutnya untuk keperluan operasinya (bentuk
proses atau logikanya), harus dibuat suatu
procedure tersendiri dan disesuaikan dengan
aturan-aturan yang berlaku (yang telah
didefinisikan).
 Berikut ini contoh sebuah procedure yang
digunakan untuk menggantikan operator insert.
 Pada procedure berikut ini dimisalkan eon
adalah elemen yang akan dimasukkan ke dalam
queue dan noelmax adalah kapasitas maximum
elemen-elemen yang dapat ditampung dalam
queue.

Procedure INSERT
Procedure INSERT (eon : integer);
Begin
If (q.rear < noelmax) Then Begin
q.rear := q.rear + 1;
q.queue[q.rear] := eon;
If (q.front = 0) Then
q.front := 1
End
Else overflow_condition
End;
Procedure REMOVE
Procedure REMOVE(var eoff : integer);
Begin
If (q.front > 0)
Then Begin
eoff := q.queue[q.front];
If (q.front = q.rear)
Then Begin
q.front := 0;
q.rear := 0;
End
Else
q.front := q.front + 1
End
Else
underflow-condition
End;
Kelemahan Queue

Walaupun masih ada tempat kosong
dalam queue, tetapi bila R=F=Max queue,
maka tidak dapat dilakukan penambahan
elemen ke dalam queue.
Circular Queue
i
…
…
n
4
1
3
2
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 Queue
Misal : ada 4 elemen
(j1-j4 dengan n>4)
if R = n-1 then R  0
else R  R+1
add: R  (R+1) mod n
delete: F  (F+1) mod n
if F = R, then full_queue
Latihan
Misal maxqueue = 7
Ikuti perintah-perintah berikut dan ilustrasikan
hasilnya (Linier Queue)
Initqueue
Delete
Insert L
Delete
Insert A
Delete
Insert T
Delete
Insert I
Insert I
Insert H
Insert H
Insert A
Delete
Insert N
Delete
Delete