QUEUE

Share:
 

A. Pengertian Queue
queue adalah FIFO yang merupakan singkatan dari First In First Out, artinya adalah data yang pertama kali dimasukkan atau disimpan, maka data tersebut adalah yang pertama kali akan diakses atau dikeluarkan. Analoginya sama dengan antrian di sebuah loket pembelian tiket kereta, orang yang datang lebih dahulu, maka akan dilayani terlbih dahulu, dan akan selesai lebih dulu dari orang-orang yang datang setelahnya.

B. Deklarasi Antrian dengan array
            Proses pendeklarasian 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;
};

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

D. Operasi cek kosong
            Operasi ini digunakan untuk memeriksa apakah antrian dalam keadaan kosong. Opersai ini penting dilakukan dalam proses Dequeu. Ketika suatu antrian dalam keadaan kosong, maka proses Dequeu tidak bisa dilakukan. Opersai ini dilakukan dengan memeriksa tail. Jika yail bernilai -1, maka berarti antrian dalam keadaan empty (kosong).
Int isEmpty()
{
            If(antrian.tail==-1)
            Return 1;
            Else
            Return 0;
}

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

F. 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 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<   }
}

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

H. Operasi Clear
            Digunakkan 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.
{
            Antrian.head=antrian.tail=-1;
            Cout<<”data clear”;
}

I. Operasi Tampil
            Digunakkan 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);
}


Referensi :

Tidak ada komentar