QUEUE
1.
Pengertian
Queue
konsep queue adalah
FIFO yang merupakan singkatan dari First In
First Out, artinya adalah data yang pertama kali dimasukkan atau
disimpan, maka data tersebut adalah yang pertama kali akan diakses atau
dikeluarkan. Analoginya sama dengan antrian di sebuah loket pembelian tiket
kereta, orang yang datang lebih dahulu, maka akan dilayani terlebih dahulu, dan
akan selesai lebih dulu dari orang-orang yang datang setelahnya.
2.
Operasi
Penting Queue
a.
Add yang
berfungsi menambah sebuah elemen ke dalam antrian.
b. Delete
yang berfungsi menghapus atau mengeluarkan elemen dari antrian.
3.
Operasi
Dasar Queue
a. Prosedur createEmpty
Prosedur ini berfungsi untuk mengosongkan queue dengan cara meletakkan HEAD dan TAIL pada indeks array ke-0.
Contoh:
void createEmpty()
{
antrian.HEAD = 0;
antrian.TAIL = 0;
}
b. Prosedur Enqueue
Prosedur
ini digunakan untuk memasukkan sebuah data/ nilai
ke dalam queue. Sebelum sebuah data/ nilai dimasukkan ke dalam queue, maka prosedur ini
terlebih dahulu melakukan pengecekan terhadap posisi HEAD dan TAIL. Jika posisi
HEAD dan TAIL masih berada pada indeks ke-0 (artinya queue masih kosong), maka
prosedur ini akan menempatkan HEAD dan TAIL pada indeks ke-1 terlebih dahulu,
baru setelah itu memasukkan data/ nilai ke dalam array data queue. Namun, jika
posisi HEAD dan TAIL tidak berada pada posisi ke-0, maka posisi TAIL yang akan
dinaikkan satu level. Jadi, pada proses enqueue, TAIL-lah yang berjalan seiring
masuknya data baru ke dalam antrian, sedangkan HEAD akan tetap pada posisi ke-1.
Contoh :
void
enqueue(int x)
{
if
((antrian.HEAD == 0) && (antrian.TAIL == 0))
{
antrian.HEAD
= 1;
antrian.TAIL
= 1;
}
else
{
antrian.TAIL
= antrian.TAIL + 1;
}
antrian.data[antrian.TAIL]
= x;
}
c. Prosedur Dequeue
Prosedur
ini digunakan untuk mengeluarkan atau membuang
sebuah data/ nilai yang paling awal masuk (yang berada pada posisi HEAD, yakni
yang paling depan dari antrian) ke dalam queue. Pekerjaan yang dilakukan oleh prosedur ini adalah menaikkan
nilai HEAD satu level. Jadi, setiap satu kali data dikeluarkan, maka posisi
HEAD naik bertambah satu level. Misalkan HEAD berada pada indeks ke-1, maka
ketika akan mengeluarkan/ menghapus data pada posisi paling depan (pada posisi
HEAD), prosedur ini akan menaikkan posisi HEAD ke indeks array ke-2.
Contoh:
void
Dequeue(){
if (q.head
> q.tail) {
q.head =
0;
q.tail =
0;
}
q.head =
q.head + 1;
}.
Posisi
HEAD sudah melewati posisi TAIL (HEAD > TAIL), berarti sudah tidak ada lagi
data/ nilai di dalam queue tersebut, maka saat itu terjadi,
HEAD dan TAIL dikembalikan ke posisi ke-0.
d. Fungsi IsEmpty
Fungsi
ini berfungsi untuk melakukan pengecekan terhadap queue, apakah queue tersebut kosong atau tidak. Jika queuetersebut kosong
(artinya, HEAD dan TAIL berada pada posisi 0, atau bisa juga ketika HEAD >
TAIL), maka fungsi akan mengembalikan nilai 1 (true), tetapi jika queue tersebut tidak kosong/ berisi (artinya, HEAD dan TAIL
tidak berada pada posisi 0), maka fungsi akan mengembalikan nilai 0 (false).
Contoh:
int IsEmpty()
{
if ((antrian.HEAD> antrian.TAIL) || (antrian.HEAD == 0)
&&
(antrian.TAIL == 0))
return 1;
else
return 0;
}
e. Fungsi IsFull
Fungsi ini berfungsi untuk melakukan pengecekan terhadap queue, apakah queuetersebut penuh atau tidak. Jika queue tersebut penuh
(artinya, TAIL berada pada posisi MAX), maka fungsi akan mengembalikan nilai 1 (true), tetapi jika queuetersebut tidak
penuh (artinya, TAIL tidak berada pada posisi MAX), maka fungsi akan
mengembalikan nilai 0 (false).
Contoh
:
Int IsFull()
{
if (antrian.TAIL == max)
return 1;
else
return 0;
}.
Tidak ada komentar:
Posting Komentar