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