Queue (Antrian) dalam Bahasa C
Queue merupakan jenis Linked list yang menerapkan konsep FIFO (First In First Out) atau kebalikan dari Stack (LIFO). pada Queue elemen yang dimasukkan pertama kali apabila dilakukan pemrosesan makan elemen tersebut yang akan diproses terlebih dahulu. ilustrasinya seperti saat kita akan membeli tiket di Bioskop, disitu orang yang datang untuk mengantri pertama kali akan dilayani terlebih dahulu dan yang mengantri terakhir akan dilayani terakhir.
Terdapat 2 Operasi dasar dari Queue:
- Enqueue: proses penambahan elemen di posisi belakang
- Dequeue: proses pengambilan elemen di posisi depan Selain operasi dasar di atas,
Dalam Implementasinya terdapat 3 Alternatif Implementasi dalam Queue:
Queue Alternatif 1:
Queue Alternatif 2:
Queue Alternatif 3:
Contoh Program Queue dalam Bahasa C
Link Download: (Queue Alternatif 1, Alternatif 2, Alternatif 3, Teori)
Queue Alternatif 1:
drvqueue1.c
#include "queue1.h"
int main()
{
int max,i,x,y,j;
Queue F;
printf("======================================\n");
printf("===== Program Queue Alternatif 1 =====\n");
printf("======================================\n\n");
printf("Input Max element dari queue F : "); scanf("%d",&max);
CreateEmpty(&F,max);
printf("IsFull? %d\n",IsFull(F));
printf("IsEmpty? %d\n\n",IsEmpty(F));
printf("Inputkan jumlah elemen yang akan dimasukkan : ");
scanf("%d",&j);
for(i=1;i<=j;i++){
printf("Input nilai [%d] : ",i); scanf("%d",&x);
Add(&F,x);
}
printf("\nIsi F: \n");
printf("\nCek posisi HEAD : %d\n",F.Head);
printf("Cek posisi TAIL : %d\n",F.Tail);
printf("Cek jumlah elemen : %d\n",NBElmt(F));
printf("IsFull? %d\n",IsFull(F));
printf("IsEmpty? %d\n",IsEmpty(F));
printf("\nElemen pertama keluar (First In First Out)....\n");
Del(&F,&y);
printf("Nilai yang keluar adalah : %d\n",y);
printf("\nIsi F: \n");
printf("\nCek posisi HEAD : %d\n",F.Head);
printf("Cek posisi TAIL : %d\n",F.Tail);
printf("IsFull? %d\n",IsFull(F));
printf("IsEmpty? %d\n",IsEmpty(F));
printf("Cek jumlah elemen : %d\n",NBElmt(F));
DeAlokasi(&F);
return 0;
}
queue1.c
#include "queue1.h"
boolean IsEmpty (Queue Q)
{
if(HEAD(Q)==Nil&&TAIL(Q)==Nil)
{
return true;
}else{
return false;
}
}
boolean IsFull (Queue Q)
{
if(HEAD(Q)==1&&TAIL(Q)==MaxEl(Q))
{
return true;
}else{
return false;
}
}
int NBElmt (Queue Q)
{
int jumlah;
if(IsEmpty(Q))
{
jumlah=0;
}else{
jumlah=TAIL(Q);
}
return jumlah;
}
void CreateEmpty (Queue *Q, int Max)
{
(*Q).T=(infotype *)malloc((Max+1)*sizeof(infotype *)); //mengalokasikan memori untuk q.t sebanyak max+1
if ((*Q).T != NULL) //jika berhasil maka maxel di isi maxnya head&tail dibuat nil
{
MaxEl(*Q) = Max;
HEAD(*Q)=Nil;
TAIL(*Q)=Nil;
}else{ //kalo gagal maxel dibuat kosong/nil
MaxEl(*Q) = Nil;
}
}
void DeAlokasi (Queue *Q)
{
free((*Q).T); //membuat dealokasikan memori yang dipesan
MaxEl(*Q) = Nil; // maxelnya di nilkan atau dibuat ke awalnya
}
void Add (Queue *Q, infotype X)
{
if(IsEmpty(*Q)) //kalo queue masih kosong maka langsung diinputkan
{
HEAD(*Q)=1;TAIL(*Q)=1; //index/address head dan tail di set ke 1
InfoTail(*Q)=X; //q.t[q.tail]/(q.t[1])index yang pertama diisi elemen X
}else{ //jika *q tidak kosong maka dicek apakah queuenya penuh.
if(IsFull(*Q))
{
printf("\nQUEUEnya penuh...");
}else { //jika tidak TAIL(Q)(q.tail) ditambah/diincrementkan
TAIL(*Q)++;
InfoTail(*Q)=X; // setelah TAIL(Q) di incrementkan maka infotail(Q) diisikan elemen
}
}
}
void Del (Queue *Q, infotype *X)
{
int i;
if(IsEmpty(*Q)) //jika kosong maka infokan ke user
{
printf("\nQUEUEnya Kosong...");
}else{ //jika tidak maka infohead(q)/elemen pertama queue disimpan sementara ke variabel *X
(*X)=InfoHead(*Q); //TAILnya dikkurangi/decrementkan
TAIL(*Q)--;
if(TAIL(*Q)==0) //jika setelah didecrementkan tailnya kosong maka headnya dibuat kosong juga
{
HEAD(*Q)=0;
}else{ //kl tidak maka isi queue dari head+1 sampai tail digeser ke kiri
i=1;
while(i<=TAIL(*Q))
{
(*Q).T[i]=(*Q).T[i+1];
i++;
}
}
}
}
queue1.h
#ifndef QUEUE1_H_INCLUDED
#define QUEUE1_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
#include "boolean.h"
#define Nil 0
typedef int infotype;
typedef int address;
typedef struct{
infotype *T;
address Head;
address Tail;
int MaxEl;
}Queue;
/********** AKSES (Selektor) **********/
/* Jika Q adalah Queue, maka akses elemen : */
#define HEAD(Q) (Q).Head
#define TAIL(Q) (Q).Tail
#define InfoHead(Q) (Q).T[(Q).Head]
#define InfoTail(Q) (Q).T[(Q).Tail]
#define MaxEl(Q) (Q).MaxEl
boolean IsEmpty (Queue Q);
boolean IsFull (Queue Q);
int NBElmt (Queue Q);
void CreateEmpty (Queue *Q, int Max);
void DeAlokasi (Queue *Q);
void Add (Queue *Q, infotype X);
void Del (Queue *Q, infotype *X);
#endif // QUEUE1_H_INCLUDED
Link Download: (Queue Alternatif 1, Alternatif 2, Alternatif 3, Teori)
Sekian artikel tentang Queue dalam Bahasa C, semoga artikel ini dapat bermanfaat bagi sobat MARKIJAR.
Queue (Antrian) dalam Bahasa C
MARKIJAR: MARi KIta belaJAR
mba?? mnta hasil outputnya beserta contoh permasalahannya... boleh??? klau boleh, kirim di e-mail saya Ono_ahazuz@yahoo.co.id untk tgas kuliah mba :(
BalasHapussemua contoh permasalahan / program Queue beserta materinya (Modul ITB) sudah ada di dalam link download, silakan langsung download saja :D
Hapuskak link downloadnya mati ya ? tolong diperbaiki, kalau boleh kirim ke email jendralbadak@gmail.com buat tugas kuliah soalnya :D
BalasHapusLink masih aktif kok kak, coba cek lagi, klo blum bisa silakan kontak kami melalui email: imamprayogopujiono@gmail.com
Hapus