A.
Queue
Queue adalah antrian, dimana data yang datang pertama
kali akan dipanggil pertama kali juga.
Dalam queue
sendiri terdapat beberapa operasi , yaitu :
· IsEmpty :
Mengecek apakah queue kosong atau tidak
·
IsFull : Mengecek apakah queue sudah penuh
atau belum
·
Enqueue : Menambahkan data di queue
·
Dequeue : Mengambil data dari queue
·
Clear : Menghapus data dalam antrian
·
View : melihat data dalam antrian
Berbeda dengan stack, queue mempunyai 2 kata kunci,
yaitu tail dan head. Fungsi nya buat
apa? Head adalah penanda urutan paling depan, sedangkan tail adalah penanda
urutan paling belakang. Karena jumlah
operasinya banyak, kita kerjakan secara modular aja ya biar lebih mudah.
1. Deklarasi Awal Queue
Variabel
yang akan digunakan adalah data (array sebagai tempat queue), head, tail. Sama seperti Stack, Nilai dari head dan tail
dimulai dari -1 yang menandakan queue kosong.
Sebagai contoh kita akan membuat queue dengan data maksimal sebanyak 7
data.
2. IsEmpty
Sama seperti
di Stack, IsEmpty berguna untuk mengecek apakah queue kosong atau tidak. Indikator bahwa queue kosong adalah nilai
dari head dan tail bernilai -1. Sehingga
kita tinggal buat fungsi nya sebagai berikut :
3. IsFull
Operasi
IsFull digunakan untuk mengecek apakah queue sudah penuh atau belum. Indikator kalau queue penuh adalah nilai tail
= max – 1. Mengapa? karena nilai
maksimal pada array yang mempunyai index 7 pada saat diakses akan mempunyai
nilai maksimal
B.
Enqueue
Enqueue
digunakan untuk memasukkan data kedalam queue.
Sama seperti push dalam stack.
Sebelum memasukkan data kedalam antrian, kita harus mengecek terlebih
dahulu apakah queue / antrian sudah penuh atau belum. Kalau belum maka kita harus mengecek apakah
head sudah berada pada nilai 0 atau belum.
Ini sangat penting karena nilai head tidak akan lebih dari 0. PERLU DIPERHATIKAN ! Yang akan bergerak terus adalah tail,
sedangkan head hanya penunjuk urutan paling depan, sehingga nilainya tidak
pernah lebih dari 0. Kecuali antrian
kosong, maka posisi head dan tail akan kembali menjadi -1.
Proses Enqueue
Saat memasukkan data pertama kali,
maka nilai head dan tail berubah menjadi 0. Tetapi saat data yang dimasukkan
sudah lebih dari 1 kali, maka yang akan terus berubah adalah tail, sedangkan
nilai head tetap.
C.
Dequeue
Kebalikan
dari fungsi enqueue, dequeue digunakan untuk mengambil data yang sudah masuk di
urutan pertama. Sehingga kita tinggal
membaca data yang ada di posisi head.
Nah inilah fungsi dari head.
Jangan lupa kita cek dulu apakah queue kosong atau tidak. Tapi jika ada isinya, setelah data diambil,
data dibelakangnya digeser ke depan.
·
Clear
Operasi
clear digunakan untuk menghapus data yang ada di dalam queue. Caranya cukup merubah nilai pada head dan
tail menjadi -1. Tidak perlu
diperhatikan data yang ada di dalam array
· View
Operasi ini
digunakan untuk melihat data yang ada didalam queue. Caranya adalah dengan membaca data pada index
yang terdapat diantara head sampai tail
Contoh Program :
#include <conio.h>
#include <iostream.h>
int tail, max, head;
int data[5];
int menu;
void create()
{
tail = -1;
head = 0;
max = 4;
}
bool isfull()
{
if (tail==max)
{
return true;
}
else
{
return false;
}
}
bool isempty()
{
if(tail<head) // tail == -1
{
return true;
}
else
{
return false;
}
}
void clear()
{
tail=-1;
}
void main()
{
create(); // panggil dulu prosedur create
home:
clrscr();
cout<<"Silahkan pilih salah satu"<<endl;
cout<<"=========================="<<endl;
cout<<"1. EnQueue"<<endl; // sama dengan (push) +
cout<<"2. DeQueue"<<endl; // sama dengan (pop) -
cout<<"3. Print"<<endl;
cout<<"4. Clear"<<endl;
cout<<"Pilih salah satu (1-4) : ";
cin>>menu;
switch(menu)
{
case 1:
if (isfull()==true)
{
cout<<"Antrian Penuh";
}
else
{
tail++;
cout<<"Masukan data ke - antrian : ";
cin>>data[tail];
}
getch();
goto home;
break;
case 2:
if(isempty()==true)
{
cout<<"Antrian kosong";
}
else
{
cout<<"Data yang keluar adalah : ";
cout<<data[head];
for (int i=0; i<tail; i++)
{
data[i] = data[i+1];
}
tail--;
}
getch();
goto home;
break;
case 3:
if(isempty()==true)
{
cout<<"Antrian kosong";
}
else
cout<<"Isi data pada antrian : ";
for(int i=head; i<=tail; i++)
{
cout<<data[i]<<" ";
}
getch();
goto home;
break;
}
getch();
}
please visit the link :
http://www.stikom-bali.ac.id/
Contoh Program :
#include <conio.h>
#include <iostream.h>
int tail, max, head;
int data[5];
int menu;
void create()
{
tail = -1;
head = 0;
max = 4;
}
bool isfull()
{
if (tail==max)
{
return true;
}
else
{
return false;
}
}
bool isempty()
{
if(tail<head) // tail == -1
{
return true;
}
else
{
return false;
}
}
void clear()
{
tail=-1;
}
void main()
{
create(); // panggil dulu prosedur create
home:
clrscr();
cout<<"Silahkan pilih salah satu"<<endl;
cout<<"=========================="<<endl;
cout<<"1. EnQueue"<<endl; // sama dengan (push) +
cout<<"2. DeQueue"<<endl; // sama dengan (pop) -
cout<<"3. Print"<<endl;
cout<<"4. Clear"<<endl;
cout<<"Pilih salah satu (1-4) : ";
cin>>menu;
switch(menu)
{
case 1:
if (isfull()==true)
{
cout<<"Antrian Penuh";
}
else
{
tail++;
cout<<"Masukan data ke - antrian : ";
cin>>data[tail];
}
getch();
goto home;
break;
case 2:
if(isempty()==true)
{
cout<<"Antrian kosong";
}
else
{
cout<<"Data yang keluar adalah : ";
cout<<data[head];
for (int i=0; i<tail; i++)
{
data[i] = data[i+1];
}
tail--;
}
getch();
goto home;
break;
case 3:
if(isempty()==true)
{
cout<<"Antrian kosong";
}
else
cout<<"Isi data pada antrian : ";
for(int i=head; i<=tail; i++)
{
cout<<data[i]<<" ";
}
getch();
goto home;
break;
}
getch();
}
please visit the link :
http://www.stikom-bali.ac.id/
Why casinos need no deposit bonus codes 2021
BalasHapusCasino Sites – 12bet What are 블랙 잭 무기 No Deposit Casinos for 2021? — No 아시안부키 deposit casino is one of the most popular 대딸 야동 casino games, with millions of players. They offer 서산휴게텔