Struktur Data
STRUKTUR DATA
MENGGUNAKAN TIPE DATA QUEUE
Pengertian Queue
Queue adalah suatu kumpulan data yang penambahan elemennya hanya bisa dilakukan pada suatu ujung ( disebut dengan sisi belakang / back ) dan penghapusan atau pengambilan elemen dilakukan lewat ujung yang lain ( disebut dengan sisi depan / front ).
Metode Pada Queue :
1. Enqueue = menambahkan data ke queue di paling belakang
2. Dequeue = mengambil dari antrian paling depan, elemen akan hilang
3. Peek = memeriksa data antrian pertama
4. IsEmpty = memeriksa apakah antrian kosong
Study Kasus
Cucian Mobil Gemilang
Dalam sebuah tempat cucian mobil, setiap mobil yang masuk hendak mencuci mobilnya mendapatkan sebuah kertas antrian yang ditulis dengan nomor sesuai urutan mobil yang masuk.
Implementasi antrian dengan struktur data tipe queue :
Dalam antrian dikenal dengan 2 operasi dasar yaitu menambah elemen baru yang akan diletakan dibagian belakang antrian dan menghapus elemen yang terletak di bagian depan antrian.
Dalam hal ini maka untuk membuat program kita harus menentukan ttitik poinnya terlebih dahulu.
Mobil depan keluar >>>>>>>>
Mobil masuk belakang <<<<<<<<
Gambar 1
Gambar Ilustrasi Queue 2 :

Operasi-operasi yang digunakan :
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 :
Mobil_1, Moibl_2, Mobil_3, Mobil_4, Mobil_5
Mobil_1 adalah mobil yang memiliki antrian dengan urutan 1 maka mobil ini, mobil yang pertama kali dicuci dan mobil yang pertama keluar.
Mobil_2, Mobil_3, Mobil_4, Mobil_5, mengikuti jadwal pencucian setelah Mobil_1
Apabila ada Mobil_6 dan Mobil_7 yang masuk hendak mencuci maka masuk di bagian belakang setelah Mobil_5
Contoh Source Code :
#include <iostream>
#define MAX 20 //maksimum data queue
using namespace std;
//Deklarasi struct antrian
struct Queue {
int front, rear, data[MAX];
}Q;
//cek apakah antrian penuh
bool isFull() {
return Q.rear == MAX;
}
//cek apakah antrian kosong
bool isEmpty() {
return Q.rear == 0;
}
//Menampilkan Queue
void printQueue() {
if (isEmpty()) {
cout << "Antrian kosong"<<endl;
}
else {
cout << "QUEUE : ";
for (int i = Q.front; i < Q.rear; i++)
//menambahkan koma jika data tidak terdapat di antrian pertama
cout << Q.data[i] << ((Q.rear-1 == i) ? "" : ",");
cout << endl;
}
}
//manambahkan data ke antrian
void enqueue() {
if (isFull())
{
cout << "Antrian penuh!"<<endl;
}
else {
int data;
//menambahkan data ke antrian
cout << "Masukkan Data : ";cin >> data;
Q.data[Q.rear] = data;
//menempatkan tail pada elemen data terakhir yang ditambahkan
Q.rear++;
cout << "Data ditambahkan\n";
printQueue();
}
}
// mengambil data dari antrian
void dequeue() {
if (isEmpty())
{
cout << "Antrian masih kosong"<<endl;
}
else{
cout << "Mengambil data \"" << Q.data[Q.front] << "\"..." << endl;
//menggeser antrian data ke head
for (int i = Q.front; i < Q.rear; i++)
Q.data[i] = Q.data[i + 1];
//menempatkan tail pada data terakhir yang digeser
Q.rear--;
printQueue();
}
}
int main() {
int choose;
do
{
//Tampilan menu
cout << "-------------------\n"
<< " Menu Pilihan\n"
<< "-------------------\n"
<< " [1] Enqueue \n"
<< " [2] Dequeue\n"
<< " [3] Keluar \n\n"
<< "-------------------\n"
<< "Masukkan pilihan : "; cin >> choose;
switch (choose)
{
case 1:
enqueue();
break;
case 2:
dequeue();
break;
default:
cout << "Pilihan tidak tersedia";
break;
}
} while (choose !=3);
return 0;
}
Screen Shoot : Hasil / Run File
Sumber Program : https://bekti.net/blog/implementasi-queue-di-cpp
Syukur alhamdulillah akhirnya bisa menyelesaikan tugas ini semoga bisa mendapatkan nilai yang baik dan bermanfaat. Sekian dan terimakasih.
"Wassalamu'alaikum Warrahmatullahi Wabarrokaatuh"



Komentar
Posting Komentar