Lanjutan Queue

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.

  1. 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;
}