Mengenal Queue (Antrian) Pada C++


Queue / Antrian adalah suatu kumpulan data yang mana penambahan elemen hanya bisa dilakukan pada satu ujung (disebut dengan sisi belakang atau tail/rear) dan penghapusan atau pengambilan elemen dilakukan lewat ujung lain (disebut dengan sisi depan atau head/front). Antrian menggunakan prinsip Pertama Masuk Pertama Keluar – First In First Out (FIFO). Dengan kata lain urutan masuk sama dengan urutan keluar. Antrian banyak dijumpai dalam kehidupan sehari-hari. Mobil-mobil yang mengantri digerbang tol untuk membeli karcis tol; orang-orang yang mengantri di loket untuk membeli karcis film juga membentuk antrian. Elemen yang pertama kali masuk ke antrian akan keluar pertama kalinya. DEQUEUE adalah mengeluarkan satu elemen dari suatu antrian. Terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu keluar di ujung satunya sehingga membutuhkan variabel Head dan Tail.

1. Deklarasi Antrian dengan array
Proses pendeklarasi antrian adalah proses pembuatan struktur antrian dalam memori. Struktur antrian terdiri dari data dalam array, head untuk menunjukkan ujung antrian dan tail untuk menunjukkan akhir antrian.
#define MAX 6
struct Queue
{
   int data[MAX];
   int head;
   int tail;
};


2. Inisialisasi
Inisialisasi antrian adalah proses pembuatan suatu antrian kosong. Proses inisialisasi untuk antrian yang menggunakan array adalah dengan mengisi nilai field head dan tail dengan 0 (nol) jika elemen pertama diawali dengan nomor 1. Kalau elemen pertama array dimulai dengan 0 maka head dan tail diisi dengan nilai -1.
void Create()
{
    antrian.head=antrian.tail=-1;
}


3. Operasi cek kosong
Operasi ini digunakan untuk memeriksa apakah antrian dalam keadaan kosong. Operasi ini penting dilakukan dalam proses Dequeu. Ketika suatu antrian dalam keadaan kosong, maka proses Dequeue tidak bisa dilakukan. Operasi ini dilakukan dengan memeriksa tail. Jika tail bernilai -1, maka berarti antrian dalam keadaan empty (kosong).
int IsEmpty()
{
if(antrian.tail==-1)
return 1;
else
return 0;
}


4. Operasi cek penuh
Operasi ini berguna untuk memeriksa keadaan antrian apakah sudah penuh atau belum. Operasi ini akan memberikan nilai true (1) jika field tail sama dengan size-1.
int IsFull()
{
  if(antrian.tail==MAX-1)
     return 1;
  else
     return 0;
}


5. Operasi Enqueue
Operasi ini berguna untuk menambah suatu elemen data baru pada antrian dan disimpan pada posisi head dan tail yang akan mengakibatkan posisi tail akan berubah. Langkah operasi ini adalah :
    a. Periksa apakah kosong. Jika kosong maka ubah posisi head dan tail pada posisi 0, kemudian    masukkan datanya.
    b. Jika antrian tidak kosong maka naikkan posisi tail sebesar 1, kemudian masukkan datanya.
void Enqueue(int data)
{
   if(IsEmpty()==1)
   {
       antrian.head=antrian.tail=0;
       antrian.data[antrian.tail]=data;
      cout<    }
   else
   {
       antrian.tail++;
       antrian.data[antrian.tail]=data;
       cout<   }
}


6. Operasi Dequeue
Operasi ini berguna untuk mengambil elemen pertama (head) dari antrian. Penghapusan dilakukan dengan cara mengurangi counter Tail dan menggeser semua elemen antrian kedepan. Penggeseran dilakukan dengan menggunakan looping
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;
}


7. Operasi Clear
Digunakan 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
void Clear()
{
   antrian.head=antrian.tail=-1;
   cout<<"Data Clear";
}


8. Operasi Tampil
Digunakan untuk menampilkan nilai-nilai elemen antrian. Proses menampilkan data dalam antrian dilakukan dengan menggunakan looping dari head s/d tail
void Tampil()
{
  if (IsEmpty()==0)
  for (int i=antrian.head;i<=antrian.tail; i++)
     cout<  else
    cout<<"Data Kosong\n";
}


Program Lengkap:

#include <stdio.h>
#include <conio.h>
#include <iostream.h>
#define MAX 6

struct Queue
{
  int data[MAX];
  int head;
  int tail;
};

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)
{
  if(IsEmpty()==1)
  {
     antrian.head=antrian.tail=0;
     antrian.data[antrian.tail]=data;
     cout<<antrian.data[antrian.tail];
  }
  else
   //kodisi lainnya jika penuh() sama dengan 0 maka antrian.ekor ditambah 1
  {
     antrian.tail++;
     antrian.data[antrian.tail]=data;
     cout<<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;
  cout<<"Data Clear";
}

void Tampil()
{
  if (IsEmpty()==0)
    for (int i=antrian.head;i<=antrian.tail; i++)
      cout<<antrian.data[i]<<"  ";
  else
    cout<<"Data Kosong\n";
}

void main()
{
  int pil;
  int data;
  Create();
  do
  {
    clrscr();
    cout<<"\n============MENU PILIHAN============\n";
    cout<<"1. Enqueue\n";
    cout<<"2. Dequeue\n";
    cout<<"3. Tampil\n";
    cout<<"4. Clear\n";
    cout<<"5. Keluar\n";
    cout<<"--------------------------------------\n";
    cout<<"Masukkan Pilihan Anda -> ";
    cin>>pil;
    switch(pil)
    {
    case 1: 
      cout<<"Data : ";cin>>data;
      Enqueue(data);
      break;
     case 2:
      if (IsEmpty()==0)
        cout<<"Elemen yang keluar : "<<Dequeue();
      else
      cout<<"Data kosong"<<endl;
      break;
    case 3:
      Tampil();
      break;
    case 4:
      Clear();
      break;
    case 5:
      break;
    }
    getch();
} while(pil!=5);
}
Share on Google Plus

About Fery Rudiyanto

Aku bukanlah orang yang hebat, tapi aku mau belajar dari orang-orang yang hebat. Aku adalah orang biasa tapi aku ingin menjadi orang yang luar biasa. Dan aku bukanlah orang yang istimewa, tapi aku ingin membuat seseorang menjadi istimewa.
    Blogger Comment
    Facebook Comment

6 komentar:

  1. Replies
    1. coba dibagian tanda ';' atau mungkin enter biasanaya kesalahan pada bagian itu, terimaksh sudah berkunjung

      Delete
    2. mas tempat ane gak bsa :/

      Delete
  2. itu yang perlu diganti dibagian

    #include
    using namespace std;

    terima kasih sobat

    ReplyDelete
  3. sangat membantu gan, teruima kasih

    ReplyDelete

Kritik, Saran dan Komentar Kami tunggu

Entri Populer