Queue pada Struktur Data atau antrian adalah sekumpulan data yang mana
penambahan elemen hanya bisa dilakukan pada suatu ujung disebut dengan
sisibelakang(rear), dan penghapusan(pengambilan elemen) dilakukan lewat
ujung lain (disebut dengan sisi depan atau front).
Queue adalah kumpulan data dengan penambahan data hanya
melalui satu sisi,yaitu sisi blakang dan penghapusan data hanya melalui sisi
depan.
Queue merupakan salah satu struiktur data yang memiliki sistemkerja FIFO
(Fisrt In First Out). Dimana data yang pertama kali masuk maka data tersebut
akan keluar lebih dulu.
Di dalam Queue mempunyai dua kata kunci yaitu Head dan Tail.
Head adalah penanda urutan paling depan. Tail adalah penanda urutan paling
belakang.
Queue atau antrian banyak kita jumpai dalam kehidupan sehari-hari, ex:
antrian Mobil diloket Tol, Antrian mahasiswa Mendaftar, dll.
Contoh lain dalam bidang komputer adalah pemakaian sistem komputer
berbagi waktu(time-sharing computer system) dimana ada sejumlah pemakai
yang akan menggunakan sistem tersebut secara serempak.
Pada Queue atau antrian Terdapat satu buah pintu masuk di suatu ujung
dan satu buah pintu keluar di ujung satunya dimana membutuhkan variabel
Head dan Tail ( depan/front, belakang/rear).
Karakteristik Queue atau antrian :
1. elemen antrian
2. front (elemen terdepan antrian)
3. tail (elemen terakhir)
4. jumlah elemen pada antrian
5. status antrian
Operasi pada Queue atau antrian
1. Create
Untuk menciptakan dan menginisialisasi Queue
Dengan cara membuat Head dan Tail = -1
2. IsEmpty
Untuk memeriksa apakah Antrian sudah penuh atau belum
Dengan cara memeriksa nilai Tail, jika Tail = -1 maka empty
Kita tidak memeriksa Head, karena Head adalah tanda untuk kepala antrian
(elemen pertama dalam antrian) yang tidak akan berubah-ubah
Pergerakan pada Antrian terjadi dengan penambahan elemen Antrian
kebelakang, yaitu menggunakan nilai Tail.
3. IsFull
Untuk mengecek apakah Antrian sudah penuh atau belum
Dengan cara mengecek nilai Tail, jika
Tail >= MAX-1 (karena MAX-1 adalah batas elemen array pada C) berarti sudah penuh
4. Enqueue
Untuk menambahkan elemen ke dalam Antrian, penambahan elemen selalu ditambahkan di elemen paling belakang
Penambahan elemen selalu menggerakan variabel Tail dengan cara increment counter Tail terlebih dahulu
5. Dequeue
Digunakan untuk menghapus elemen terdepan/pertama (head) dari Antrian
Dengan cara menggeser semua elemen antrian kedepan dan mengurangi Tail dgn 1
Penggeseran dilakukan dengan menggunakan looping.
6. Clear
Untuk menghapus elemen-elemen Antrian dengan cara membuat Tail dan Head =
-1
Penghapusan elemen-elemen Antrian sebenarnya tidak menghapus arraynya,
namun hanya mengeset indeks pengaksesan-nya ke nilai -1 sehingga
elemen-elemen Antrian tidak lagi terbaca
7. Tampil
Untuk menampilkan nilai-nilai elemen Antrian
Menggunakan looping dari head s/d tail
Contoh Program Queue
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
#include <iomanip.h>
#define max 6
typedef struct
{
int head;
int tail;
}antrian;
antrian ue;
typedef struct
{
char *nm[max], *almt[max], *tgl[max];
} variabel;
variabel qu;
void creat()
{
ue.head=ue.tail=-1;
}
empty()
{
if(ue.tail==-1)
return 1;
else
return 0;
}
full()
{
if(ue.tail==max-1)
return 1;
else
return 0;
}
void en(char *a, char *b, char *c)
{
if(empty()==1)
{
ue.head=ue.tail=0;
qu.nm[ue.tail]=a;
qu.almt[ue.tail]=b;
qu.tgl[ue.tail]=c;
}
else if(full()==0)
{
ue.tail++;
qu.nm[ue.tail]=a;
qu.almt[ue.tail]=b;
qu.tgl[ue.tail]=c;
}
else if(full()==1)
{
cout<<"QUEUE PENUH";
}
}
de()
{
if(empty()==0)
{
int i;
char *aa=qu.nm[ue.tail];
char *bb=qu.almt[ue.tail];
char *cc=qu.tgl[ue.tail];
for(i=ue.head; 1<=ue.tail-1; i++)
{
qu.nm[i]=qu.nm[i+1];
qu.almt[i]=qu.almt[i+1];
qu.tgl[i]=qu.tgl[i+1];
}
ue.tail--;
cout<<"DATA YANG DIHAPUS ADALAH : \n";
cout<<"NAMA : "<<aa<<endl;
cout<<"ALAMAT : "<<bb<<endl;
cout<<"TANGGAL: "<<cc<<endl;
}
else if(empty()==1)
{ cout<<"DATA EROR......QUEUE KOSONG"; }
return 1;
}
void clear()
{
ue.head=ue.tail=-1;
cout<<"QUEUE CLEAR";
}
void view()
{
if(empty()==0)
{
cout<<"NO NAMA ALAMAT TANGGAL\n";
for(int i=ue.head; i<=ue.tail; i++)
{
cout<<setiosflags(ios::left)<<setw(3)<<i;
cout<<setiosflags(ios::left)<<setw(11)<<qu.nm[i];
cout<<setiosflags(ios::left)<<setw(18)<<qu.almt[i];
cout<<setiosflags(ios::left)<<setw(9)<<qu.tgl[i]<<endl;
}
}
else
{ cout<<"NO NAMA ALAMAT TANGGAL\n"; }
}
main()
{
int menu;
char nm[20], almt[40], tgl[20];
creat();
do{
clrscr();
cout<<"===========================\n";
cout<<" CONTOH MENU PROGRAM QUEUE\n";
cout<<"===========================\n";
cout<<"1.ENQUEUE\n";
cout<<"2.DEQUEUE\n";
cout<<"3.CLEAR\n";
cout<<"4.VIEW\n";
cout<<"5.EXIT\n";
cout<<"===========================\n";
cout<<"PILIH MENU : "; cin>>menu;
if(menu==1)
{ cout<<"MASUKAN NAMA ANDA : "; gets(nm);
cout<<"MASUKAN ALAMAT ANDA : "; gets(almt);
cout<<"MASUKAN TANGGAL ANDA : "; gets(tgl);
en(nm, almt, tgl);
}
else if(menu==2)
{
de();
}
else if(menu==3)
{
clear();
}
else if(menu==4)
{
view();
}
else if(menu==5)
{
cout<<"exiiitttt......";
}
getch();
}while(menu!=5);
}
#include <stdio.h>
#include <iostream.h>
#include <iomanip.h>
#define max 6
typedef struct
{
int head;
int tail;
}antrian;
antrian ue;
typedef struct
{
char *nm[max], *almt[max], *tgl[max];
} variabel;
variabel qu;
void creat()
{
ue.head=ue.tail=-1;
}
empty()
{
if(ue.tail==-1)
return 1;
else
return 0;
}
full()
{
if(ue.tail==max-1)
return 1;
else
return 0;
}
void en(char *a, char *b, char *c)
{
if(empty()==1)
{
ue.head=ue.tail=0;
qu.nm[ue.tail]=a;
qu.almt[ue.tail]=b;
qu.tgl[ue.tail]=c;
}
else if(full()==0)
{
ue.tail++;
qu.nm[ue.tail]=a;
qu.almt[ue.tail]=b;
qu.tgl[ue.tail]=c;
}
else if(full()==1)
{
cout<<"QUEUE PENUH";
}
}
de()
{
if(empty()==0)
{
int i;
char *aa=qu.nm[ue.tail];
char *bb=qu.almt[ue.tail];
char *cc=qu.tgl[ue.tail];
for(i=ue.head; 1<=ue.tail-1; i++)
{
qu.nm[i]=qu.nm[i+1];
qu.almt[i]=qu.almt[i+1];
qu.tgl[i]=qu.tgl[i+1];
}
ue.tail--;
cout<<"DATA YANG DIHAPUS ADALAH : \n";
cout<<"NAMA : "<<aa<<endl;
cout<<"ALAMAT : "<<bb<<endl;
cout<<"TANGGAL: "<<cc<<endl;
}
else if(empty()==1)
{ cout<<"DATA EROR......QUEUE KOSONG"; }
return 1;
}
void clear()
{
ue.head=ue.tail=-1;
cout<<"QUEUE CLEAR";
}
void view()
{
if(empty()==0)
{
cout<<"NO NAMA ALAMAT TANGGAL\n";
for(int i=ue.head; i<=ue.tail; i++)
{
cout<<setiosflags(ios::left)<<setw(3)<<i;
cout<<setiosflags(ios::left)<<setw(11)<<qu.nm[i];
cout<<setiosflags(ios::left)<<setw(18)<<qu.almt[i];
cout<<setiosflags(ios::left)<<setw(9)<<qu.tgl[i]<<endl;
}
}
else
{ cout<<"NO NAMA ALAMAT TANGGAL\n"; }
}
main()
{
int menu;
char nm[20], almt[40], tgl[20];
creat();
do{
clrscr();
cout<<"===========================\n";
cout<<" CONTOH MENU PROGRAM QUEUE\n";
cout<<"===========================\n";
cout<<"1.ENQUEUE\n";
cout<<"2.DEQUEUE\n";
cout<<"3.CLEAR\n";
cout<<"4.VIEW\n";
cout<<"5.EXIT\n";
cout<<"===========================\n";
cout<<"PILIH MENU : "; cin>>menu;
if(menu==1)
{ cout<<"MASUKAN NAMA ANDA : "; gets(nm);
cout<<"MASUKAN ALAMAT ANDA : "; gets(almt);
cout<<"MASUKAN TANGGAL ANDA : "; gets(tgl);
en(nm, almt, tgl);
}
else if(menu==2)
{
de();
}
else if(menu==3)
{
clear();
}
else if(menu==4)
{
view();
}
else if(menu==5)
{
cout<<"exiiitttt......";
}
getch();
}while(menu!=5);
}
Semoga artikel ini bisa bermanfaat ....
Sumber Refrensi :
Sumber Refrensi :
10 Langkah Belajar logika dan algoritma, menggunakan bahasa c dan c++
Tidak ada komentar:
Posting Komentar