Queue
Kaidah utama
dalam 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 terlbih dahulu, dan akan selesai
lebih dulu dari orang-orang yang datang setelahnya. Gambar di bawah ini
mengilustrasikan kerja sebuah queue:
Pendefinisian Struktur
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 HEAD yang 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 queue
menggunakan Bahasa C++ :
typedef
struct
{
int data[MAX]; int head; int tail;
}Queue;
Penjelasan :
Bagian program
diatas merupakan pendefinisian struct
bernama queue. Didalam struct tersebut terdapat variabel data[MAX]
sebagai array, variabel head
dan variabel tail. Ketiga variabel tersebut bertipe data integer.
a. Fungsi Create ()
Fungsi Create() berfungsi untuk
mengosongkan queue. Berikut syntax untuk fungsi Create():
void
Create()
{
antrian.head=antrian.tail=-1;
}
Penjelasan :
Bagian program diatas merupakan fungsi Create(),
yang berfungsi untuk mengosongkan queue dengan
cara meletakan antrian.head dan antrian.tail di
posisi awal yaitu -1.
b. Fungsi IsEmpty ()
Fungsi IsEmpty()
berfungsi untuk mengecek apakah queue
dalam keadaan kosong atau tidak. Berikut syntax
untuk fungsi IsEmpty() :
int
IsEmpty()
{
if(antrian.tail==-1)
return 1; else
return 0;
}
Penjelasan :
Pada fungsi IsEmpty() terdapat sebuah logika,
yaitu :
1.
Jika antrian.tail berada pada posisi -1, maka return
1 dijalankan, yang berarti antrian dalam kondisi kosong.
2.
Jika tidak, maka yang akan dijalankan adalah return
0, yang berarti didalam queue
terdapat data didalamnya.
c. Fungsi IsFull ()
Fungsi IsFull()
berfungsi untuk mengecek apakah queue
dalam keadaan penuh atau tidak. Berikut syntax
untuk fungsi IsFull() :
int
IsFull() {
if(antrian.tail==MAX-1)
return 1; else
return 0;
}
Penjelasan :
Pada fungsi IsFull() terdapat sebuah logika
yaitu :
1.
Jika antrian.tail
berada pada posisi MAX-1, maka return 1 dijalankan yang berarti
antrian dalam kondisi penuh.
2.
Jika tidak maka return
0 yang dijalankan, yang berarti antrian masih bisa diisi data.
d. Fungsi Enqueue(int data)
Fungsi Enqueue(int data)
berfungsi untuk memasukkan data kedalam queue,
berikut syntax untuk fungsi Enqueue(int
data) :
void
Enqueue(int data)
{
if(IsEmpty()==1)
{
antrian.head=antrian.tail=0;
antrian.data[antrian.tail]=data; printf("%d
|
sudah
|
dimasukan",antrian.data[antrian.tail]);
}
else
if(IsFull()==0)
{
antrian.tail++;
antrian.data[antrian.tail]=data; printf("%d
dimasukan",antrian.data[antrian.tail]); }
}
|
sudah
|
Penjelasan :
Pada fungsi Enqueue(int
data), sebelum memasukkan nilai maka dilakukan pengecekkan terhadap
fungsi IsEmpty(int
data) dan fungsi IsFull(). Terdapat 2 logika didalam fungsi Enqueue()
yaitu :
1.
Jika fungsi IsEmpty bernilai benar (1) berarti
antrian dalam kondisi kosong,
maka antrian.head dan antrian.tail
dinaikkan satu tingkat, berarti posisi head dan tail sekarang
berada pada posisi 0, baru kemudian data disimpan kedalam variabel data.
Lalu menampilkan pemberitahuan bahwa data sudah berhasil disimpan.
2.
Jika fungsi IsFull() bernilai salah (0)
berarti antrian belum penuh, maka antrian.tail
dinaikkan posisinya satu tingkat baru kemudian data yang diterima dari fungsi
main akan disimpan kedalam variabel data. Lalu menampilkan
pemberitahuan bahwa data sudah berhasil disimpan.
Baca juga : Aplikasi sederhana perentalan CD di toko
Baca juga : Aplikasi sederhana perentalan CD di toko
e. Fungsi Dequeue()
Fungsi Dequeue() berfungsi
untuk mengeluarkan data yang paling awal
masuk atau yang berada pada posisi head. Berikut syntax untuk fungsi Dequeue
:
int Dequeue()
{ int i;
int e = antrian.data[antrian.head];
for(i=antrian.head; i<=antrian.tail1;i++)
{
antrian.data[i]=antrian.data[i+1];
}
antrian.tail--;
return e;
}
|
Penjelasan :
Fungsi Dequeue() berfungsi
untuk mengeluarkan atau menghapus data yang pertama dimasukkan. Variabel i
dideklrarasikan sebagai antrian.head, e dideklarasikan sebagai array antrian.data[antrian.head];.
Maka kemudian perulangan, for(i=antrian.head; i<=antrian.tail-1;i++). Maksudnya ketika antrian.head lebih
kecil sama dengan antrian.tail-1, maka i++ yang berarti posisi antrian.head
dinaikkan satu tingkat. Kemudian antrian data yang berada pada head
dinaikkan indeks arraynya satu
tingkat. Lalu posisi antrian.tail diturunkan satu tingkat. Kemudian
menjalankan e, yang berarti mengembalikan posisi antrian.head
ke indeks nya semula.
f. Fungsi clear()
Fungsi clear()
berfungsi untuk membersihkan antrian. Syntax
nya adalah sebagai berikut :
void
Clear()
{
antrian.head=antrian.tail=-1;
printf("CLEAR");
}
Penjelasan :
Fungsi Clear() berfungsi
mengosongkan antrian dengan mengembalikan posisi head dan tailnya keposisi
-1, setelah itu akan muncul “CLEAR” berarti antrian telah dikosongkan.
g. Fungsi Tampil()
Fungsi Tampil()
berfungsi untuk menampilkan isi antrian. Syntax
nya adalah sebagai berikut:
void
Tampil()
{
if(IsEmpty()==0)
{
for(int
i=antrian.head;i<=antrian.tail;i++)
{
printf("%d",antrian.data[i]);
}
}else
printf("data kosong!\n"); }
|
Penjelasan :
Sebelum menampilkan isi antrian
fungsi Tampil()
akan melakukan pengecekkan ke fungsi IsEmpty().
Dalam fungsi Tampil() terdapat dua logika
yaitu :
1.
Jika fungsi IsEmpty() bernilai salah (0)
berarti antrian berisi data. Baru kemudian perulangan yang berfungsi untuk
menampilkan data dijalankan.
2.
Selain itu, berarti antrian tidak berisi data, maka
akan tampil “data kosong!”.
Untuk contoh program bisa di unduh dengan cara klik caption di bawah ini :
No comments:
Post a Comment