Title: QUEUE
1QUEUE
Pertemuan ke-6T 0026
2Queue
- Bentuk khusus dari ordered list
- Data di insert di akhir list
- Data di delete di awal list
3Queue sebagai ADT
Misal, queue Q terdiri dari n elemen Q ( ao ,
a1 , , ai , ai1 , , an-1 )
Elemen paling depan FRONT
Elemen paling belakang REAR
- ao elemen yang diinsert pertama kali
- an-1 elemen yang diinsert terakhir
4Representasi Queue
- Yang paling sederhana array 1-D
- Disebut Sequential Queue
- 2 variabel indikator REAR dan FRONT
- define MAX_QUEUE_SIZE 100
- eltype queueMAX_QUEUE_SIZE
- int rear -1
- int front -1
5Aplikasi Queue dengan Array 1-D
front rear Q0 Q1 Q2 Q3 Comments
-1 -1 Queue kosong
-1 0 J1 Masuk Job 1
-1 1 J1 J2 Masuk Job 2
-1 2 J1 J2 J3 Masuk Job 3
0 2 J2 J3 Hapus Job 1
1 2 J3 Hapus Job 2
6Sequential Queue Add Queue
- void addq (int rear, eltype item)
- if (rear MAX_QUEUE_SIZE-1)
- printf (Queue penuh\n)
- return
-
- queuerear item
-
- / indeks rear di-increment sebelum insert data
baru /
7Sequential Queue Delete Queue
- eltype deleteq(int front, int rear) if (front
rear) - printf (queue empty\n)
- return
-
- return queue(front)
-
- /indeks front di-increment sebelum passing nilai
yang disimpan di queue /
8Kekurangan Sequential Queue
- Setelah beberapa data insert dan delete dari
queue, REAR dan FRONT bergerak ke kanan, hingga
REAR mencapai MAX_QUEUE_SIZE-1. - Jika REAR mencapai maksimum, queue akan dideteksi
PENUH, meskipun beberapa lokasi di depan FRONT
kosong. - Solusi elemen queue harus digeser ke depan shg
FRONT-1 dan REAR ! MAX_QUEUE_SIZE-1 - Tetapi perlu waktu untuk menggeser elemen satu
persatu. - Lebih baik gunakan circular array untuk queue
9Circular Queue Empty
10Circular Queue Full
- Full
- front (rear 1) MAX_QUEUE_SIZE
11Circular Queue Insert
2
3
R
J2
J1
1
4
0
5
F
Insert REAR berubah, FRONT tetap rear
(rear1) MAX_QUEUE_SIZE
12Circular Queue Delete
R
F
- Delete FRONT berubah, REAR tetap
- front (front1) MAX_QUEUE_SIZE
13Circular Queue Add Queue
- void addq(int front,int rear, eltype item)
-
- rear (rear1)MAX_QUEUE_SIZE
- if (front rear)
- printf (Queue full\n)
- return
-
- queuerear item
14Circular Queue Delete Queue
- eltype deleteq (int front, int rear)
- eltype item
- if (front rear)
- printf (Queue empty\n)
- return
-
- front (front1)MAX_QUEUE_SIZE
- return queuefront
-
15Implementasi Queue dengan Single Linked-List
nama
ip
nama
ip
link
nama
ip
front
link
link
Dewi
4.0
Tono
3.8
Ani
3.7
NULL
rear
- Typedef struct elqueue
- char name10
- float ip
- struct elqueue link