Matakuliah
Tahun
Versi
: T0026/Struktur Data
: 2005
: 1/1
Pertemuan 6
Queue dengan Array
1
Learning Outcomes
Pada akhir pertemuan ini, diharapkan mahasiswa
akan mampu :
• Mahasiswa dapat menghasilkan program
modular ADT queue yang
diimplementasikan dengan array
2
Outline Materi
•
•
•
•
•
Pengertian Queue
Kegunaan dan spesifikasi Queue
Implementasi queue dengan array
Operasi Queue
Circular Queue
3
Queue
• Bentuk khusus dari ordered list
• Data di insert di akhir list
Data di delete di awal list
A
R
F
B
A
R
F
C
B
A
R
F
D
C
B
A
R
D
C
B
R
F
F
4
Queue sebagai ADT
Misal, queue Q terdiri dari n elemen
Q = ( ao , a1 , … , ai , ai+1 , …, an-1 )
Elemen paling depan
FRONT
Elemen paling belakang
REAR
• ao : elemen yang diinsert pertama kali
• an-1 : elemen yang diinsert terakhir
5
Representasi Queue
• Yang paling sederhana : array 1-D
• Disebut Sequential Queue
• 2 variabel indikator REAR dan FRONT
#define MAX_QUEUE_SIZE 100
eltype
queue[MAX_QUEUE_SIZE];
int rear = -1;
int front = -1;
6
Aplikasi Queue dengan Array 1-D
front rear Q[0] Q[1] Q[2] Q[3] Comments
-1
-1
Queue kosong
-1
0
J1
-1
1
J1
J2
-1
2
J1
J2
J3
Masuk Job 3
0
2
J2
J3
Hapus Job 1
1
2
J3
Hapus Job 2
Masuk Job 1
Masuk Job 2
7
Sequential Queue : Add Queue
void addq (int *rear, eltype item) {
if (*rear == MAX_QUEUE_SIZE-1) {
printf (“Queue penuh\n”);
return;
}
queue[++*rear] = item;
}
/* indeks rear di-increment sebelum
insert data baru */
8
Sequential 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 */
9
Kekurangan 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
10
Circular Queue : Empty
[2]
[3]
[1]
[0]
F=0
R=0
[2]
[4]
[5]
Empty :
[3]
F=4
[4]
R=4
[1]
[0]
[5]
front = rear
11
Circular Queue : Full
[2]
[3]
R
[2]
J2 J3
[1] J1
J8
J4 [4]
[1] J7
J6
J5
[0]
F
F
[3]
[5]
R
[0]
J4 [4]
J5
[5]
Full :
front = (rear + 1) % MAX_QUEUE_SIZE
12
Circular Queue : Insert
[2]
[3]
R [2]
[3]
J2
R [1] J1
[0]
F
[4]
[5]
[1] J1
[0]
F
[4]
[5]
Insert : REAR berubah, FRONT tetap
*rear = (*rear+1) % MAX_QUEUE_SIZE
13
Circular Queue : Delete
R
[2]
F
[3]
R
[2]
J8
[1] J7
J6
[0]
[3]
J8
J4 [4]
[1] J7
J5
J6
[5]
[0]
J4 [4] F
J5
[5]
Delete : FRONT berubah, REAR tetap
*front = (*front+1) % MAX_QUEUE_SIZE
14
Circular Queue : Add Queue
void addq(int front,int *rear, eltype
item){
*rear = (*rear+1)%MAX_QUEUE_SIZE;
if (front = *rear) {
printf (“Queue full\n”);
return;
}
queue[*rear] = item;
}
15
Circular Queue : Delete Queue
eltype deleteq (int *front, int rear){
eltype item;
if (*front == rear) {
printf (“Queue empty\n”);
return;
}
*front = (*front+1)%MAX_QUEUE_SIZE;
return queue[*front];
}
16
© Copyright 2026 Paperzz