1. Pengertian Queue
Kaidah utama dalam
konsep queue adalah FIFO yang merupakan singkatan dariFirst
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 terlbih dahulu, dan
akan selesai lebih dulu dari orang-orang yang datang setelahnya. Gambar di
bawah ini mengilustrasikan kerja sebuah queue:
2. Deklarasi queue dalam
program
Sebuah queue di
dalam program komputer dideklarasikan sebagai sebuah tipe bentukan baru, di
dalam Bahasa C, biasa disebut struct. Sebuah struktur data dari
sebuah queue setidaknya harus mengandung dua tiga variabel,
yakni variabel HEADyang akan berguna sebagai penanda bagian depan
antrian, variabel TAIL yang akan berguna sebagai penanda
bagian belakang antrian dan ARRAY DATA dari yang akan
menyimpan data-data yang dimasukkan ke dalam queue tersebut.
Berikut adalah syntax untuk mendeklarasikan struktur data dari
sebuah queuemenggunakan Bahasa C:
typedef struct
{
int HEAD, TAIL;
int data[max+1];
}Queue;
dimana, nilai MAX
didefinisikan sebagai jumlah tumpukan maksimum yang dapat disimpan dalam queue.
Setelah struktur data dari queue didefinisikan dengan syntaxdi
atas, maka setelah itu dapat dibuat variabel-variabel baru yang mengacu pada
tipe data Queue di atas, misalkan membuat sebuah variabel
bernama antrian yang bertipe Queue:
Queue antrian; 8
Dalam tulisan ini,
sebuah queue didefinisikan dengan array berukuran
MAX + 1, maksudnya adalah agar elemen array ke-0 tidak
digunakan untuk menyimpan data, melainkan hanya sebagai tempat „singgah‟
sementara untuk variabel HEAD dan TAIL. Sehingga, jika HEAD dan TAIL berada
pada elemen array ke-0, berartiqueue tersebut
dalam kondisi kosong (tidak ada data yang disimpan). Berikut adalah ilustrasi
dari sebuah queue kosong dengan ukuran nilai MAX = 8:
3. Operasi-operasi
dasar dalam queue
Pada dasarnya, operasi-operasi dasar pada queue mirip
dengan operasi-operasi dasar pada stack. Perbedaannya hanya pada
prosedur push dan pop saja. Pada queue, prosedur yang berfungsi
untuk memasukkan data/ nilai ke dalam antrian adalah enqueue,
sedangkan prosedur untuk mengeluarkan data/ nilai dari antrian adalah dequeue.
a. Prosedur
createEmpty
Sama pada stack,
prosedur ini berfungsi untuk mengosongkan queue dengan cara
meletakkan HEAD dan TAIL pada indeks array ke-0. Berikut
deklarasi prosedur createEmpty pada queue dalam Bahasa C:
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. Berikut deklarasi prosedur enqueue dalam Bahasa C:
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;
}
Pada deklarasi prosedur
enqueue di atas, prosedur memiliki sebuah parameter formal yang bernama „x‟
yang bertipe integer. Parameter formal „x‟ ini berguna untuk
menerima kiriman nilai dari program utama (void main()) yakni berupa sebuah
bilangan integer yang akan dimasukkan ke dalam queue.
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.
Berikut
deklarasi prosedur pop dalam Bahasa C:
void Dequeue(){
if (q.head >
q.tail) {
q.head = 0;
q.tail = 0;
}
q.head = q.head + 1;
}
Ketika 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
Sama seperti fungsinya
pada stack, 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 queuetersebut
tidak kosong/ berisi (artinya, HEAD dan TAIL tidak berada pada posisi 0), maka
fungsi akan mengembalikan nilai 0 (false). Berikut deklarasi fungsi
IsEmpty dalam Bahasa C:
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). Berikut
deklarasi fungsi IsFull dalam Bahasa C:
int IsFull()
{
if (antrian.TAIL ==
max)
return 1;
else
return 0;
}
4. Contoh program
implementasi queue
Berikut adalah contoh kode
program dalam Bahasa C yang mengimplementasikan konsep queue.
Dan hasilnya akan sebagai berikut
Pilihan 1
Pilihan 2
Pilihan 3
Pilihan 4
Pilihan 5
Sumber:
-http://suputradwipratama274.blogspot.com/2015/06/penjelasan-tentang-queue-contoh-program.html
-http://piticom.blogspot.com/2015/06/pengertian-queue-dan-contoh-program-c.html
0 komentar:
Posting Komentar