STRUKTUR DATA - 3 SKS - 2011

Download Report

Transcript STRUKTUR DATA - 3 SKS - 2011

PERTEMUAN KE-6
QUEUE (Antrian)
Definisi:
Queue (Antrian) adalah suatu bentuk khusus dari List
Linier dengan operasi penyisipan (insertion) hanya
diperbolehkan pada salah satu sisi, yang disebut sisi
belakang (REAR), dan operasi penghapusan (deletion)
hanya diperbolehkan pada sisi yang lainnya, yang
disebut dengan sisi depan (FRONT).
Pemrosesan elemen bersifat FIFO (First In First Out)
QUEUE (Antrian)
• Suatu antrian Q = [Q1, Q2, Q3, …, QN]
FRONT(Q) = Q1; REAR(Q) = QN
NOEL(Q) = jumlah elemen dalam antrian pada suatu
saat tertentu.
Operasi-Operasi dasar pada struktur Queue:
CREATE(Q) = membentuk struktur antrian Q.
FRONT(Q) dan REAR(Q) tidak terdefinisi
ISEMPTY(Q) = menentukan apakah antrian Q kosong
(true/false)
INSERT(E,Q) = menambahkan elemen E ke dalam
antrian Q.
REMOVE(Q) = menghapus elemen pada FRONT
QUEUE (Antrian)
CREATE(Q)
Antrian Q = []
FRONT: Tak terdefinisi
REAR: Tak terdefinisi
NOEL(Q) = 0
INSERT(A,Q)
Antrian Q = [A]
FRONT: A
REAR: A
NOEL(Q) = 1
INSERT(B,Q)
Antrian Q = [A,B]
FRONT: A
REAR: B
NOEL(Q) = 2
1
2
A
A
B
3
4
5
6
7
…
N
QUEUE (Antrian)
INSERT(C,Q)
Antrian Q = [A,B,C]
FRONT: A
REAR: C
NOEL(Q) = 3
REMOVE(Q)
Antrian Q = [B,C]
FRONT: B
REAR: C
NOEL(Q) = 2
REMOVE(Q)
Antrian Q = [C]
FRONT: C
REAR: C
NOEL(Q) = 1
A
B
C
1
2
3
B
C
C
4
5
6
7
…
N
Jika sebuah bank memiliki
nasabah sebanyak 1500 orang,
apakah bank tersebut perlu
menyediakan kursi sebanyak 1500
agar nasabahnya dapat dilayani
semuanya?
Queue (Antrian) dengan Array Sirkular
FRONT=0
REAR = 0
INSERT A dan B
1
2
FRONT = 1
A
B
A
B
REAR = 2
3
4
5
C
D
E
D
E
D
E
INSERT C, D dan E
FRONT = 1
REAR = 5
REMOVE A,B dan C
FRONT = 4
REAR = 5
INSERT F
FRONT = 4
REAR = 1
F
REAR = 1
F
REMOVE
FRONT = 5
E
INSERT G dan H
FRONT = 5
REAR = 3
F
G
H
REAR = 3
F
G
H
REMOVE
FRONT = 1
E
Algoritma QINSERT
(Array Sirkular)
QINSERT(QUEUE, N, FRONT, DATA)
1. {Apakah Antrian Penuh}
Jika FRONT=1 dan REAR=N, atau jika FRONT=REAR+1,
maka WRITE: OVERFLOW, RETURN
2. Jika FRONT=NULL, maka FRONT:=1
REAR:=1
dalam hal lain
jika REAR = N, maka
REAR:=1
dalam hal lain
REAR:=REAR + 1
3. QUEUE(REAR) := DATA {masukkan elemen baru}
4. RETURN
Algoritma QDELETE
QDELETE(QUEUE, N, FRONT, REAR, DATA)
1. {Apakah antrian kosong}
Jika FRONT=NULL maka write “UNDERFLOW”;
RETURN
2. DATA := QUEUE(FRONT)
3. (FRONT mendapat nilai baru)
Jika FRONT = REAR, maka (Antrean memuat hanya 1
elemen) FRONT:=NULL; REAR:=NULL;
dalam hal lain
jika FRONT = N, maka FRONT:=1 dalam hal lain
FRONT := FRONT + 1
4. RETURN
Apakah orang yang sudah masuk
dalam antrian dapat keluar dari
antrian sebelum dilayani?
DEQUEUE
Definisi:
DEQUEUE adalah suatu list linier yang
penambahan dan pengurangan elemennya
boleh dilakukan di kedua ujung list, tetapi tidak
boleh di tengah-tengah list.
DEQUEUE
Ada 2 macam Dequeue, yaitu:
1. Dequeue input terbatas, yaitu dequeue yang
penambahan elemennya hanya boleh pada salah
satu sisi, sedangkan penghapusan boleh dari kedua
sisi.
2. Dequeue output terbatas, yaitu dequeue yang
penghapusan elemennya hanya boleh pada salah
satu sisi, sedangkan penambahan elemen baru
boleh pada kedua sisi.
Pada bagian ICU (Intensive Care Unit)
sebuah rumah sakit, sudah antri pasien
dengan jenis masalah terurut sbb:
1. keseleo, 2. disengat lebah, 3. digigit
pacar.
Terakhir datang pasien gagal jantung.
Apakah pasien terakhir harus antri
sampai gilirannya?
PRIORITY QUEUE
(Antrian Berprioritas)
Antrian Berprioritas adalah himpunan elemen yang
setiap elemennya diberikan tingkat prioritas
tertentu, dan urutan pemrosesan elemennya
didasarkan atas prioritas tersebut sbb:
1. Elemen yang prioritasnya lebih tinggi diproses
lebih dulu.
2. Dua elemen dengan prioritas yang sama
diproses berdasarkan urutan kedatangannya,
yaitu yang datang lebih dulu diproses lebih dulu
(FIFO).
PRIORITY QUEUE dengan
ONE-WAY LIST
Representasi antrian berprioritas antara lain
dilakukan dengan one-way list, sbb:
a. Setiap simpul memiliki 3 field, yaitu: INF
(informasi), PRN (nomor prioritas), dan LINK
(penunjuk ke elemen berikutnya)
b. Simpul X mendahului simpul Y dalam list :
- jika prioritas X lebih tinggi daripada prioritas Y
- jika prioritas keduanya sama, tetapi X lebih
dulu masuk ke dalam antrian.
PRIORITY QUEUE with One-Way List
INFO
PRN
LINK
1
AA
2
5
2
BB
4
3
3
CC
4
7
4
DD
1
1
5
EE
2
8
6
FF
5
0
7
GG
4
6
8
HH
2
2
Urutan kedatangan
START
4
9
10
11
12
PRIORITY QUEUE with One-Way List
START
DDD
1
HHH
AAA
2
2
BBB
EEE
2
4
CCC
GGG
4
4
FFF
5
X
Algoritma untuk Menghapus Elemen
pada Priority Queue dengan One-Way List
1. ITEM := INFO(START) {Langkah ini untuk
menyimpan data dalam simpul pertama}
2. START := LINK(START)
3. Hapus Simpul Pertama dari List
4. Proses ITEM
5. Exit
Algoritma untuk Menambah Elemen
pada Priority Queue dengan One-Way List
a. Telusuri one-way list sampai ditemukan suatu
Simpul X yang nomor prioritasnya melebihi
N. Sisipkan ITEM di depan Simpul X.
b. Jika tidak ditemukan Simpul semacam ini,
sisipkan ITEM sebagai elemen terakhir List.
PRIORITY QUEUE with One-Way List
XXX
START
DDD
2
1
HHH
AAA
4
2
BBB
EEE
2
4
CCC
GGG
4
4
FFF
5
X
PRIORITY QUEUE dengan
Array Dimensi 2
• Penyajian lain Antrian Berprioritas adalah
dengan menggunakan Array dimensi 2.
• Tiap baris array berisi elemen yang
prioritasnya sama dan dikelola secara sirkular.
• Diperlukan array lain untuk menyimpan
FRONT dan REAR dari setiap baris.
FRONT
REAR
1
1
2
2
1
2
1
3
2
3
0
0
3
4
5
1
4
5
4
4
5
2
3
4
5
6
DDD
EEE
AAA
BBB
CCC
XXX
FFF
GGG
PRIORITY QUEUE
dengan Array Dimensi 2
Algoritma REMOVE
1. Cari Antrian Tidak Hampa Yang Pertama.
2. Cari K (nilai prioritas) yang tertinggi,
sedemikian sehingga FRONT(K) tidak NULL.
3. Hapus dan proses elemen dari baris K.
4. Exit.
PRIORITY QUEUE
dengan Array Dimensi 2
Algoritma INSERT
1. Sisipkan ITEM sebagai elemen belakang dari
baris M (nilai prioritas).
2. Exit.
Perbandingan
Perbandingan antara implementasi Priority
Queue menggunakan One-Way List dan Array.
• Keunggulan menggunakan Array :
Efisiensi Waktu
• Keunggulan menggunakan one-way list:
Efisiensi Space (Ruang)