Implementasi Queue di C++
Queue atau antrian merupakan suatu kumpulan data yang memiliki head/front dimana data dikeluarkan (dequeue) dan tail/rear dimana data dimasukkan (enqueue) ke antrian.
Proses QUEUE
Seperti halnya pada antrian yang biasa kita lakukan sehari-hari, di manapun. Antrian dimulai dari depan ke belakang, jika didepan belum pergi meninggalkan antrian maka antrian terus bertambah dari belakang dan antrian paling belakang disini dinamakan rear/tail.
Jadi selama antrian terus bertambah (enqueue) maka antrian yang paling akhir adalah tail/rear.
Operasional Queue
1. Preprocessor dan Header File
#include <iostream> #define MAX 20 //maksimum data queue using namespace std;
2.Prosedur enqueue (menambahkan antrian)
void Enqueue(int data)//menginput sebah dta { if(IsEmpty() == 1) { antrian.head = antrian.tail = 0; antrian.data[antrian.tail] = data; printf("%d Data Telah Masuk !", antrian.data[antrian.tail]); } else if(IsFull() == 0) { antrian.tail = antrian.tail + 1; antrian.data[antrian.tail] = data; printf("%d masuk !", antrian.data[antrian.tail]); } }
3.Prosedur dequeue(mengeluarkan atau membuang sebuah data/ nilai)
int Dequeue() { int i; int e = antrian.data[antrian.head]; for(i=antrian.head;i<=antrian.tail-1;i++) { antrian.data[i] = antrian.data[i+1]; } antrian.tail--; return e; }
4.Tampil(menmpilkan semua data yang ada dalam antrian)
void Tampil() { if (IsEmpty()==0) { for (int i=antrian.head;i<=antrian.tail; i++) { printf("%d ",antrian.data[i]); } } else { printf("Data Kosong\n"); } }
5.clear (membersihkan semua daftar antrian)
void Clear() { antrian.head = antrian.tail = -1; printf("Data Clear"); }
contoh program
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define MAX 5
#include <iostream>
using namespace std;
typedef struct
{
int data [MAX];
int head;
int tail;
}Queue;
Queue antrian;
void Create()
{
antrian.head = antrian.tail = -1;
}
int IsEmpty()
{
if(antrian.tail == -1)
return 1;
else
return 0;
}
int IsFull()
{
if(antrian.tail == MAX-1)
return 1;
else
return 0;
}
void Enqueue(int data)//menginput sebah dta
{
if(IsEmpty() == 1)
{
antrian.head = antrian.tail = 0;
antrian.data[antrian.tail] = data;
printf("%d Data Telah Masuk !", antrian.data[antrian.tail]);
}
else if(IsFull() == 0)
{
antrian.tail = antrian.tail + 1;
antrian.data[antrian.tail] = data;
printf("%d masuk !", antrian.data[antrian.tail]);
}
}
int Dequeue()
{
int i;
int e = antrian.data[antrian.head];
for(i=antrian.head;i<=antrian.tail-1;i++)
{
antrian.data[i] = antrian.data[i+1];
}
antrian.tail--;
return e;
}
void Clear()
{
antrian.head = antrian.tail = -1;
printf("Data Clear");
}
void Tampil()
{
if (IsEmpty()==0)
{
for (int i=antrian.head;i<=antrian.tail; i++)
{
printf("%d ",antrian.data[i]);
}
}
else
{
printf("Data Kosong\n");
}
}
int main()
{
int pil;
int data;
Create();
do
{
system("cls");
printf ("\n MENU PILIHAN PROGRAM QUEUE\n");
printf ("1. Enqueue\n");
printf ("2. Dequeue\n");
printf ("3. Tampil\n");
printf ("4. Clear\n");
printf ("5. Keluar\n");
printf ("Masukkan Pilihan Anda : ");
scanf("%d",&pil);
switch(pil)
{
case 1:
printf("Data : ");
scanf("%d",&data);
Enqueue(data);
break;
case 2:
printf("Elemen yang keluar : %d", Dequeue());
break;
case 3:
Tampil();
break;
case 4:
Clear();
break;
case 5:
return 0;
break;
}
getch();
} while(pil!=5);
}
Sebenarnya di C++ sudah ada library untuk membuat queue, jadi untuk membuat queue kita cukup menambahkan header file
queue
pada awal baris dan selanjutnya kita bisa menggunakan method dan fungsi yang telah disediakan untuk membuat antrian seperti empty
, size
, front
, back
, push_back
, pop_front
dan lainnya.
Program kita disini hanya untuk mempelajari dasar dari queue itu sendiri, jadi mungkin banyak sekali perbedaan dengan yang ada di library. Nah, jangan sungkan untuk menyalin, memodifikasi dan mempelajari program yang telah kita buat diatas, dan mohon gunakan untuk kebaikan ya.
referansi
https://www.geeksforgeeks.org/queue-cpp-stl/
Tidak ada komentar:
Posting Komentar