Transcript queue

Queue
3. Queue (Antrian)
3.1. Definisi
Queue (Antrian) adalah list linier yang :
1. Dikenali elemen pertama (Head) dan elemen
terakhirnya (Tail)
2. Aturan penyisipan dan penghapusan
elemennya disefinisikan sebagai berikut :
- Penyisipan selalu dilakukan setelah
elemen terakhir
- Penghapusan selalu dilakukan pada
elemen pertama
3. Satu elemen dengan elemen lain dapat
diakses melalui informasi Next
Struktur data ini banyak dipakai dalam informatika
misalnya untuk merepresentasi :
1. Antrian job dalam sistem operasi
2. Antrian dalam dunia nyata
Maka secara lojik, sebuah Queue dapat digambarkan
sebagai list linier yang setiap elemennya adalah :
Type ElmtQ = record
<Info : InfoType,
Next : address >
dengan InfoType terdefinisi yang menentukan
informasi yang disimpan pada setiap elemen
queue, dan address adalah “alamat” dari
elemen
Selain itu alamat elemen Pertama (Head) dan
elemen
terakhir (Tail) dicatat.
 FIFO
(First In First Out)
rpos
0
spos
1
2
elemen
queue
 isi antrian
 Setiap elemen memiliki index
 rpos menunjukkan index elemen yang siap
diambil
 spos menunjukkan index yang siap ditempati
elemen antrian berikutnya
 STORE (S), memasukkan elemen
 RETRIEVE (R), mengambil elemen
 elemen
 FIFO
(First In First Out)
0
1
2


STORE, memasukkan elemen
RETRIEVE, mengambil elemen
rpos: 0
0
1
2
spos: spos:
0
spos:
1
spos:
2
3
STOR
E
rpos: 0
rpos: 1
rpos: 2
rpos: 3
RETRIEV
E
0
1
2
spos: 3
 Queue
 Buat
array untuk queue
 Buat variabel bertipe int untuk rpos dan spos

Contoh:
#define MAX 20
int queue[MAX];
int rpos;
int spos;
 Fungsi
STORE
 Masukkan
elemen ke queue dengan index spos
sekarang
queue[top] = elemen;
 Naikkan
/ tambahkan nilai spos dengan 1
spos++ ;
 Fungsi
RETRIEVE
 Naikkan
/ tambahkan nilai rpos dengan 1
rpos++;
 Kembalikan
nilai queue pada index rpos
sekarang
return queue[rpos];
 Memutar
nilai spos kembali ke 0 ketika
sudah mencapai nilai MAX
 Memutar nilai rpos kembali ke 0 ketika
sudah mencapai nilai MAX
Queue






Penambahan data dilakukan pada sebuah ujung sebuah list, sedangkan
penghapusan data dilakukan pada ujung yang lain
Data yang dihapus adalah data yang paling awal ditambahkan
Nama lain: FIFO (First In First Out)
Operasi ENQUEUE: menambahkan data pada sebuah list
Front : untuk menunjuk pengantri paling depan (front = depan)
Rear : untuk menunjuk pengantri yang paling belakang (Rear =belakang)
ENQUEUE
1
front==rear
Queue






Penambahan data dilakukan pada sebuah ujung sebuah list,
sedangkan penghapusan data dilakukan pada ujung yang lain
Data yang dihapus adalah data yang paling awal ditambahkan
Nama lain: FIFO (First In First Out)
Operasi ENQUEUE: menambahkan data pada sebuah list
Front : untuk menunjuk pengantri paling depan (front = depan)
Rear : untuk menunjuk pengantri yang paling belakang (Rear
=belakang)
ENQUEUE
1
front
2
rear
Queue




Penambahan data dilakukan pada sebuah ujung sebuah list,
sedangkan penghapusan data dilakukan pada ujung yang lain
Data yang dihapus adalah data yang paling awal ditambahkan
Nama lain: FIFO (First In First Out)
Operasi ENQUEUE: menambahkan data pada sebuah list
ENQUEUE
1
front
2
3
rear
Queue




Penambahan data dilakukan pada sebuah ujung sebuah list,
sedangkan penghapusan data dilakukan pada ujung yang lain
Data yang dihapus adalah data yang paling awal ditambahkan
Nama lain: FIFO (First In First Out)
Operasi ENQUEUE: menambahkan data pada sebuah list
ENQUEUE
1
front
2
3
4
rear
Queue




Penambahan data dilakukan pada sebuah ujung sebuah list,
sedangkan penghapusan data dilakukan pada ujung yang lain
Data yang dihapus adalah data yang paling awal ditambahkan
Nama lain: FIFO (First In First Out)
Operasi ENQUEUE: menambahkan data pada sebuah list
ENQUEUE
1
front
2
3
4
5
rear
Queue




Penambahan data dilakukan pada sebuah ujung sebuah list,
sedangkan penghapusan data dilakukan pada ujung yang lain
Data yang dihapus adalah data yang paling awal ditambahkan
Nama lain: FIFO (First In First Out)
Operasi ENQUEUE: menambahkan data pada sebuah list
ENQUEUE
1
front
2
3
4
5
6
rear
Queue




Penambahan data dilakukan pada sebuah ujung sebuah list,
sedangkan penghapusan data dilakukan pada ujung yang lain
Data yang dihapus adalah data yang paling awal ditambahkan
Nama lain: FIFO (First In First Out)
Operasi DEQUEUE: menghapus data pada sebuah list
DEQUEUE
1
front
2
3
4
5
6
rear
Queue




Penambahan data dilakukan pada sebuah ujung sebuah list,
sedangkan penghapusan data dilakukan pada ujung yang lain
Data yang dihapus adalah data yang paling awal ditambahkan
Nama lain: FIFO (First In First Out)
Operasi DEQUEUE: menghapus data pada sebuah list
DEQUEUE
2
front
3
4
5
6
rear
Queue




Penambahan data dilakukan pada sebuah ujung sebuah list,
sedangkan penghapusan data dilakukan pada ujung yang lain
Data yang dihapus adalah data yang paling awal ditambahkan
Nama lain: FIFO (First In First Out)
Operasi DEQUEUE: menghapus data pada sebuah list
DEQUEUE
3
front
4
5
6
rear
Queue




Penambahan data dilakukan pada sebuah ujung sebuah list,
sedangkan penghapusan data dilakukan pada ujung yang lain
Data yang dihapus adalah data yang paling awal ditambahkan
Nama lain: FIFO (First In First Out)
Operasi DEQUEUE: menghapus data pada sebuah list
DEQUEUE
4
front
5
6
rear
Queue




Penambahan data dilakukan pada sebuah ujung sebuah list,
sedangkan penghapusan data dilakukan pada ujung yang lain
Data yang dihapus adalah data yang paling awal ditambahkan
Nama lain: FIFO (First In First Out)
Operasi DEQUEUE: menghapus data pada sebuah list
DEQUEUE
5
front
6
rear
Queue




Penambahan data dilakukan pada sebuah ujung sebuah list,
sedangkan penghapusan data dilakukan pada ujung yang lain
Data yang dihapus adalah data yang paling awal ditambahkan
Nama lain: FIFO (First In First Out)
Operasi DEQUEUE: menghapus data pada sebuah list
DEQUEUE
6
front==rear
Animasi Queue
ENQUEUE dan DEQUEUE
Implementasi Queue
• Implementasi queue lebih sulit daripada stack. Pada stack,
penambahan dan penghapusan data hanya dilakukan pada satu
ujung saja, sehingga cukup mengubah posisi pointer sesuai dengan
penambahan/pengurangan data
• Implementasi queue, harus mengubah posisi DUA buah pointer,
yaitu pointer yang menunjuk ke FRONT, dan pointer yagn menunjuk
ke REAR
• Ada dua cara implementasi queue:
rear
stack
front
queue
Cara 1
• Tempatkan data pada sebuah array, dan setlah pointer
agar menunjuk ke posisi FRONT dan REAR
• Saat data ditambahkan ke queue, naikkan posisi pointer
REAR
• Saat data dihapus dari queue, naikkan posisi pointer
FRONT
front
Array x
…
rear
x3 x4 x5 x6 x7 x8 x9 x10 x11 x12
ujung depan
…
ujung belakang
Queue adalah pada
bagian yang berwarna hijau
Cara 1
• Tempatkan data pada sebuah array, dan setlah pointer
agar menunjuk ke posisi FRONT dan REAR
• Saat data ditambahkan ke queue, naikkan posisi
pointer REAR
• Saat data dihapus dari queue, naikkan posisi pointer
FRONT
front
Array x
…
rear
x3 x4 x5 x6 x7 x8 x9 x10 x11 x12
ujung depan
…
ujung belakang
Queue adalah pada
bagian yang berwarna hijau
Cara 1
• Tempatkan data pada sebuah array, dan setlah pointer
agar menunjuk ke posisi FRONT dan REAR
• Saat data ditambahkan ke queue, naikkan posisi
pointer REAR
• Saat data dihapus dari queue, naikkan posisi pointer
FRONT
front
Array x
…
rear
x3 x4 x5 x6 x7 x8 x9 x10 x11 x12
ujung depan
…
ujung belakang
Queue adalah pada
bagian yang berwarna hijau
Cara 1
• Tempatkan data pada sebuah array, dan setlah pointer
agar menunjuk ke posisi FRONT dan REAR
• Saat data ditambahkan ke queue, naikkan posisi pointer
REAR
• Saat data dihapus dari queue, naikkan posisi pointer
FRONT
front
Array x
…
rear
x3 x4 x5 x6 x7 x8 x9 x10 x11 x12
ujung depan
…
ujung belakang
Queue adalah pada
bagian yang berwarna hijau
Cara 1
• Tempatkan data pada sebuah array, dan setlah pointer
agar menunjuk ke posisi FRONT dan REAR
• Saat data ditambahkan ke queue, naikkan posisi pointer
REAR
• Saat data dihapus dari queue, naikkan posisi pointer
FRONT
front
Array x
…
rear
x3 x4 x5 x6 x7 x8 x9 x10 x11 x12
ujung depan
…
ujung belakang
Queue adalah pada
bagian yang berwarna hijau
Cara 1
• Tempatkan data pada sebuah array, dan setlah pointer
agar menunjuk ke posisi FRONT dan REAR
• Saat data ditambahkan ke queue, naikkan posisi pointer
REAR
• Saat data dihapus dari queue, naikkan posisi pointer
FRONT
front
Array x
…
rear
x3 x4 x5 x6 x7 x8 x9 x10 x11 x12
…
Queue adalah pada
bagian yang berwarna hijau
Cara 1
• Tempatkan data pada sebuah array, dan setlah pointer
agar menunjuk ke posisi FRONT dan REAR
• Saat data ditambahkan ke queue, naikkan posisi pointer
REAR
• Saat data dihapus dari queue, naikkan posisi pointer
FRONT
front
Array x
…
rear
x3 x4 x5 x6 x7 x8 x9 x10 x11 x12
…
Queue adalah pada
bagian yang berwarna hijau
Cara 1
• Tempatkan data pada sebuah array, dan setlah pointer
agar menunjuk ke posisi FRONT dan REAR
• Saat data ditambahkan ke queue, naikkan posisi pointer
REAR
• Saat data dihapus dari queue, naikkan posisi pointer
FRONT
front
Array x
…
rear
x3 x4 x5 x6 x7 x8 x9 x10 x11 x12
…
Queue adalah pada
bagian yang berwarna hijau
Cara 1
• Tempatkan data pada sebuah array, dan setlah pointer
agar menunjuk ke posisi FRONT dan REAR
• Saat data ditambahkan ke queue, naikkan posisi pointer
REAR
• Saat data dihapus dari queue, naikkan posisi pointer
FRONT
front
Array x
…
rear
x3 x4 x5 x6 x7 x8 x9 x10 x11 x12
…
Queue adalah pada
bagian yang berwarna hijau
Cara 1
• Tempatkan data pada sebuah array, dan setlah pointer
agar menunjuk ke posisi FRONT dan REAR
• Saat data ditambahkan ke queue, naikkan posisi pointer
REAR
• Saat data dihapus dari queue, naikkan posisi pointer
FRONT
front
Array x
…
rear
x3 x4 x5 x6 x7 x8 x9 x10 x11 x12
…
Queue adalah pada
bagian yang berwarna hijau
Cara 1
• Tempatkan data pada sebuah array, dan setlah pointer
agar menunjuk ke posisi FRONT dan REAR
• Saat data ditambahkan ke queue, naikkan posisi pointer
REAR
• Saat data dihapus dari queue, naikkan posisi pointer
FRONT
rear
front
Array x
…
x3 x4 x5 x6 x7 x8 x9 x10 x11 x12
…
Queue adalah pada
bagian yang berwarna hijau
Cara 1
• Tempatkan data pada sebuah array, dan setlah pointer
agar menunjuk ke posisi FRONT dan REAR
• Saat data ditambahkan ke queue, naikkan posisi pointer
REAR
• Saat data dihapus dari queue, naikkan posisi pointer
FRONT
• Saat front==rear, berarti queue kosong
front==rear
Array x
…
x3 x4 x5 x6 x7 x8 x9 x10 x11 x12
…
Queue adalah pada
bagian yang berwarna hijau
Masalah yang timbul pada Cara 1
Front dari rear selalu bertambah secara motononik,
sehingga memerlukan array dengan ukuran tak
terhingga
front
array x …
rear
x3 x4 x5 x6 x7 x8 x9 x10 x11 x12
…
Pointer selalu bergerak ke kanan,
tak pernah kembali
Menyambungkan FRONT dan REAR dari array itu
sehingga membentuk cincin (RING BUFFER)
Cara 1
n-2
n-1
rear
0
• Array dibuat seperti cincin,
dimana elemen terakhir
disambungkan dengan elemen
pertama
• Menambahkan data ke queue:
nilai rear dinaikkan satu
• Menghapus data dari queue:
nilai front dinaikkan satu
• Queue kosong pada saat
front==rear
1
front
Queue adalah pada
bagian yang berwarna hijau
Cara 1
n-2
n-1
rear
0
• Array dibuat seperti cincin,
dimana elemen terakhir
disambungkan dengan elemen
pertama
• Menambahkan data ke
queue: nilai rear dinaikkan
satu
• Menghapus data dari queue:
nilai front dinaikkan satu
• Queue kosong pada saat
front==rear
1
front
Queue adalah pada
bagian yang berwarna hijau
Cara 1
n-2
rear
n-1
0
• Array dibuat seperti cincin,
dimana elemen terakhir
disambungkan dengan elemen
pertama
• Menambahkan data ke
queue: nilai rear dinaikkan
satu
• Menghapus data dari queue:
nilai front dinaikkan satu
• Queue kosong pada saat
front==rear
1
front
Queue adalah pada
bagian yang berwarna hijau
Cara 1
n-2
n-1
0
• Array dibuat seperti cincin,
dimana elemen terakhir
disambungkan dengan elemen
pertama
• Menambahkan data ke
queue: nilai rear dinaikkan
satu
• Menghapus data dari queue:
nilai front dinaikkan satu
• Queue kosong pada saat
front==rear
1
rear
front
Queue adalah pada
bagian yang berwarna hijau
Cara 1
n-2
n-1
0
1
rear
• Array dibuat seperti cincin,
dimana elemen terakhir
disambungkan dengan elemen
pertama
• Menambahkan data ke queue:
nilai rear dinaikkan satu
• Menghapus data dari queue:
nilai front dinaikkan satu
• Queue kosong pada saat
front==rear
front
Queue adalah pada
bagian yang berwarna hijau
Cara 1
n-2
n-1
0
1
rear
• Array dibuat seperti cincin,
dimana elemen terakhir
disambungkan dengan elemen
pertama
• Menambahkan data ke queue:
nilai rear dinaikkan satu
• Menghapus data dari queue:
nilai front dinaikkan satu
• Queue kosong pada saat
front==rear
front
Queue adalah pada
bagian yang berwarna hijau
Cara 1
n-2
n-1
0
1
• Array dibuat seperti cincin,
dimana elemen terakhir
disambungkan dengan elemen
pertama
• Menambahkan data ke queue:
nilai rear dinaikkan satu
• Menghapus data dari queue:
nilai front dinaikkan satu
• Queue kosong pada saat
front==rear
rear
front
Queue adalah pada
bagian yang berwarna hijau
Cara 1
n-2
rear
n-1
0
1
• Array dibuat seperti cincin,
dimana elemen terakhir
disambungkan dengan elemen
pertama
• Menambahkan data ke queue:
nilai rear dinaikkan satu
• Menghapus data dari queue:
nilai front dinaikkan satu
• Queue kosong pada saat
front==rear
front
Queue adalah pada
bagian yang berwarna hijau
Cara 1
n-2
n-1
0
1
• Array dibuat seperti cincin,
dimana elemen terakhir
disambungkan dengan elemen
pertama
• Menambahkan data ke queue:
nilai rear dinaikkan satu
• Menghapus data dari queue:
nilai front dinaikkan satu
• Queue kosong pada saat
front==rear
rear==front
Queue adalah pada
bagian yang berwarna hijau
Masalah pada Ring Buffer
• Pada saat rear==front , ada dua interpretasi yang
muncul, “queue kosong” ataukah “queue full”
n-2
n-1
0
1
n-2
n-1
empty
rear==front
0
1
full
rear==front
Queue adalah pada
bagian yang berwarna hijau
Masalah pada Ring Buffer
• Solusi
– Menyiapkan sebuah FLAG untuk
memberi tanda kalau queue kosong
– Queue dijaga agar tidak pernah full,
dengan menyisakan sebuah elemen
yang kosong
n-2 n-1 0
1