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).
Operasi-operasi Queue :
1. Create()
Untuk
menciptakan dan menginisialisasi Queue
2. IsEmpty()
Untuk memeriksa
apakah Antrian masih kosong
3. IsFull()
Untuk mengecek
apakah Antrian sudah penuh atau belum
4. Enqueue
()
Untuk
menambahkan elemen ke dalam Antrian, penambahan elemen selalu ditambahkan di
elemen paling belakang
5. Dequeue()
Digunakan untuk
menghapus elemen terdepan/pertama (head) dari Antrian
6. Clear()
Untuk menghapus
elemen-elemen Antrian dengan cara membuat Tail dan Head = -1
7. Tampil()
Untuk
menampilkan nilai-nilai elemen Antrian
Syntax Program :
//header file
# include <stdio.h>
# include <conio.h>
# include <stdlib.h>
# include <string.h>
# define QSIZE 5
//deklarasi
struct
typedef struct
{
int count;
int
head,tail;
char
names[QSIZE][30];
}QUEUE; //nama struct
char *enqueue(char *);
char* dequeue();
//deklarasikan
prototype fungsi
void tampil();
void
inisialisasi();
//deklarasi Node
QUEUE *pq;
//fungsi main
int main()
{
//deklarasi variabel
int pil;
char str[30];
QUEUE q;
pq=&q;
inisialisasi(); //panggil fungsi
inisialisasi
do{
system("cls");
//bersihkan layar
printf("\tMENU PILIHAN :
");
printf("\n\t______________");
printf("\n[1] Input
Data");
printf("\n[2] Delete
Data");
printf("\n[3] Show data
in queue");
printf("\n[4]
Exit\n");
printf("\nPilihan anda :
");
scanf("%d",&pil);
switch(pil){
case 1:
printf("\nSilahkan
memasukkan sebuah kata : ");
fflush(stdin); //menghapus
buffer data
gets(str);
puts(enqueue(str)); /*Mencetak string hasil penambahan data yang dilakukan oleh
fungsi enqueue()*/
break;
case 2:
puts(dequeue()); /*Mencetak string terhapus yang dilakukan oleh fungsi
enqueue()*/
break;
case 3:
tampil(); //panggil
fungsi tampil()
break;
case 4: exit(0);
default: printf("\nMasukkan anda salah!!");
}
printf("\nPress Any Key
to continue...");
fflush(stdin); //membersihkan
buffer data
while(!kbhit());
}
while(1); //perulanagan dijalankan terus
//return 0;
}
//fungsi untuk
inisialisasi awal
void
inisialisasi()
{
pq->head = pq->tail = pq->count= 0;
}
//fungsi untuk
menambah data string dalam queue
char* enqueue(char *p)
{
if(pq->count==QSIZE)
return "\n\n\t\t Error: Antrian penuh";
pq->tail= (pq->tail)%QSIZE;
strcpy(pq->names[(pq->tail)++],p);
pq->count++;
return "Data
telah berhasil dimasukkan";
}
//fungsi untuk
menghapus data string dalam queue
char* dequeue()
{
if(pq->count==0)
return "\n\n\t\t Error: Antrian kosong";
pq->head= (pq->head)%QSIZE;
pq->count--;
printf("\nData yang telah
dihapus adalah\n:");
return
pq->names[(pq->head)++];
}
//fungsi untuk
menampilkan data yang berada dalam antrian
void tampil()
{
int i=pq->head;
int x=0;
if(pq->count==0)
printf("Antrian
kosong\n");
else
{
while(x<pq->count)
{
if(i==QSIZE)
i%=QSIZE;
printf(":%s\n",pq->names[i]);
i++;
x++;
}
}
}
scere shot hasil program :
contoh study kasus :
1. Buatlah
program dengan queue untuk menampung data mahasiswa yang terdiri dari nim, nama
dan ipk mahasiswa
Listing programnya adalah
Listing programnya adalah
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<iostream.h>
#define
n 20
int
f, r;
typedef
struct
{
char nim[15];
char nama[50];
float ipk;
}mahasiswa;
void
awal()
{
f=0;
r=-1;
}
void
main()
{
mahasiswa data[n];
int pilih;
awal();
atas:
cout<<"QUEUE DATA
MAHASISWA"<<endl<<endl;
do{
cout<<endl<<"1. INSERT
DATA"<<endl;
cout<<"2. DELETE
DATA"<<endl;
cout<<"3.
EXIT"<<endl<<endl;
cout<<"MASUKKAN PILIHAN ANDA :
";
cin>>pilih;
switch(pilih)
{
case 1 :
if(r<n-1)
{
r++;
cout<<endl<<"MASUKKAN NIM : ";
cin>>data[r].nim;
cout<<"MASUKKAN NAMA :
";
gets(data[r].nama);
cout<<"MASUKKAN IPK :
";
cin>>data[r].ipk;
}
else
{
cout<<"ANTRIAN PENUH"<<endl;
}
break;
case 2 :
if(f<r+1)
{
cout<<endl<<"DATA YANG
DIINPUTKAN"<<endl<<endl;
cout<<"NIM MAHASISWA :
"<<data[f].nim<<endl;
cout<<"NAMA MAHASISWA :
"<<data[f].nama<<endl;
cout<<"IPK MAHASISWA :
"<<data[f].ipk<<endl;
f++;
if(f==r+1 && r==n-1)
{
awal();
}
}
else
{
cout<<"ANTRIAN
KOSONG"<<endl;
}
break;
case 3 :
cout<<"TERIMA
KASIH";
exit;
break;
default :
cout<<endl<<"MASUKKAN ANGKA ANTARA
1-3"<<endl;
goto atas;
}
}
while((pilih>=1)&&(pilih<=2));
getch();
}
Tidak ada komentar:
Posting Komentar