pada materi sebelumnya sudah membahas tentang queue dengan konsep FIFO. ada beberapa method yang pada implementasi queue. materi ini akan membahas method-method tersebut. sebelum membahas method tersebut terlebih dahulu membahas deklarasi struct pada queue
misalkan kapasitas queue maksimal ada 5.
#define Kapasitas 5 //maksimum Kapasitas antrian
artinya bahwa jumlah antrian maksimal ada 5, jika ada antrian baru maka tidak dapat dieksekusi sebelum antrian pertama (head/front) dihapus.
selanjutnya membuat struct queue
struct Queue { int front, rear, data[Kapasitas]; }Q;
Langkah selanjutnya membuat method.
- method pengecekan apakan antrian masih kosong (isEmpty). artinya bahwa rear =0 atau head=rear=0
bool isEmpty() { return Q.rear == 0; }
jika masih kosong maka akan bernilai true
2. method pengecekan apakah antrian sudah penuh (isFull). artinya bahwa rear=kapasitas
bool isFull() { return Q.rear == Kapasitas; }
3. Method untuk menambahkan antrian. lakukan pengecekan terlebih dahulu apakah antian sudah penuh, jika sudah penuh maka antrian tidak bisa ditambahkan. jika tidak maka cek posisi terakhir rear/tail kemudian tambahkan. misalkan posisi terkahir rear/tail 3 maka antrian ditambahkan dan posisi rear/tail saat ini adalah 4.
//tambah data antrian void addqueue() { //mengecek apakah antrian penuh if (isFull()) { cout << "Antrian penuh!"<<endl; } //jika masih tersedia maka tambahkan else { int data; cout << "Masukkan Data : "; cin >> data; Q.data[Q.rear] = data; Q.rear++; cout << "Data ditambahkan\n"; tampildataQueue(); } }
4. Method untuk menghapuskan antrian. lakukan pengecekan apakah antrian masih kosong, jika antrian masih kosong berarti tidak ada data yang dihapus. jika tidak maka posisi data pada head/front akan dihapus dan data posisi head/front saat ini yaitu data kedua sebelum head/front dihapus. misalnya 3 <- 12 <- 70. kemudian delqueue (antrian dihapus) maka antrian saat ini menjadi 12 <- 70
void delqueue() { if (isEmpty()) { cout << "Antrian kosong"<<endl; } else{ cout << "Mengambil data \"" << Q.data[Q.front] << "\"..." << endl; for (int i = Q.front; i < Q.rear; i++) Q.data[i] = Q.data[i + 1]; Q.rear--; tampildataQueue(); } }
5. Method untuk menampilkan Antrian
void tampildataQueue() { if (isEmpty()) { cout << "Antrian kosong"<<endl; } else { cout << "Antrian : "; for (int i = Q.front; i < Q.rear; i++) cout << Q.data[i] << ((Q.rear-1 == i) ? "" : " <- "); cout << endl; } }
Full code.
#include <iostream> #define Kapasitas 5 //maksimum Kapasitas antrian using namespace std; struct Queue { int front, rear, data[Kapasitas]; }Q; bool isEmpty() { return Q.rear == 0; } bool isFull() { return Q.rear == Kapasitas; } void tampildataQueue() { if (isEmpty()) { cout << "Antrian kosong"<<endl; } else { cout << "Data Antrian : "; for (int i = Q.front; i < Q.rear; i++) cout << Q.data[i] << ((Q.rear-1 == i) ? "" : " <- "); cout << endl; } } void addqueue() { //mengecek apakah antrian penuh if (isFull()) { cout << "Antrian penuh!"<<endl; } //jika masih tersedia maka tambahkan else { int data; cout << "Masukkan Data : "; cin >> data; Q.data[Q.rear] = data; Q.rear++; cout << "Data ditambahkan\n"; tampildataQueue(); } } void delqueue() { if (isEmpty()) { cout << "Antrian kosong"<<endl; } else{ cout << "Data Front yang dihapus \"" << Q.data[Q.front] << "\"..." << endl; for (int i = Q.front; i < Q.rear; i++) Q.data[i] = Q.data[i + 1]; Q.rear--; tampildataQueue(); } } int main() { int pil; do { cout << "Pilihan Menu: \n" << " Pilihan 1. Tambah Antrian \n" << " Pilihan 2. Hapus Antrian \n" << " Pilihan 3. Keluar \n\n" << "-------------------\n" << "Masukkan pilihan : "; cin >> pil; switch (pil) { case 1: addqueue(); break; case 2: delqueue(); break; default: cout << "Pilihan hanya 1- 3"; break; } } while (pil !=3); return 0; }