Minggu, 07 Juni 2015

Materi QUEUE

QUEUE

Karakteristik yang membedakan queue (antrian) dari stack adalah cara menyimpan dan mengambil data dengan struktur first in first out (FIFO). Hal ini berarti elemen pertama yang ditempatkan pada queue adalah yang pertama dipindahkan. Contoh yang paling populer untuk membayangkan sebuah queue adalah antrian pada kasir sebuah bank. Ketika seorang pelanggan datang, akan menuju ke belakang dari antrian. Setelah pelanggan dilayani, antrian yang berada di depan akan maju. Pada saat menempatkan elemen pada ujung (tail) dari queue disebut dengan enqueue, pada saat memindahkan elemen dari kepala (head) sebuah queue disebut dengan dequeue.


Karakteristik penting dari antrian adalah :

1. Elemen antrian yaitu item-item data yang terdapat di elemen antrian

2. Front (elemen terdepan dari antrian)

3. Rear (elemen terakhir dari antrian)

4. Jumlah elemen pada antrian (Count)
5. Status antrian


a. Linear Queue (Antrian Lurus)





Keterangan :
F = Front (depan)
R = Rear (belakang)
F menunjuk pengantri paling depan, yaitu pengantri yang siap dilayani.
R menunjuk pengantri paling belakang, yaitu pengantri yang paling terakhir masuk.


PROSES DALAM ANTRIAN LURUS

Prinsip / Konsep Proses :
 FIFO (First In First Out)
 FIFS (First In First Serve)

Proses :
AWAL (Inisialisasi)
INSERT (Sisip, Masuk, Simpan, Tulis)
DELETE (Hapus, Keluar, Ambil/Dilayani, Baca)
RESET (Kembali ke AWAL)

Kondisi Antrian Lurus

Kondisi Antrian
Ciri
a.
b.
c.
d.
e.
KOSONG
PENUH
BISA DIISI
ADA ISINYA
PERLU DIRESET
F = R + 1 dimana saja
R = n – 1
R < n – 1
F < R + 1
F = R + 1 dan R = n - 1














ALGORITMA INSERT
         Periksa apakah Antrian BISA DIISI
           
                        if ( R < n – 1)
                        {
                                    R = R + 1;
                                    Q[R] = x;
                        }
                        else
                                    cout<<“Antrian Penuh”;

ALGORITMA DELETE

         Periksa apakah Antrian ADA ISINYA
                        if ( F < R + 1)
                        {
                                    x = Q[F];
                                    F = F + 1;
                                    if ((F=R+1) && (R=n-1))
                                    { F = 0;
                                      R = -1; }
                        }
                        else
                                    cout<<“Antrian Kosong”;


b. Double Ended Queue (Dequeue)

Ilustrasi Deque (Antrian dengan Ujung Ganda)





Keterangan :
L = Left (kiri)
R = Right (kanan)
L menunjuk pengantri yg terakhir masuk di sebelah kiri dan siap dilayani.
R menunjuk pengantri yg terakhir masuk di sebelah kanan dan siap dilayani.

Proses dalam Deque
Prinsip / Konsep Proses :
bukan FIFO, bukan juga LIFO, tergantung kesempatan yang ada.

Proses :
AWAL (Inisialisasi)
INSERT (Sisip, Masuk, Simpan, Tulis)
DELETE (Hapus, Keluar, Ambil/Dilayani, Baca)

Algoritma Lengkap INSERT KIRI
              Periksa apakah Deque BISA DIISI DARI KIRI
                 void INSERT_KIRI()
                 {      if ( L > 0)
                        {
                                    L = L - 1;
                                    Q[L] = x;
                        }
                        else
                                    cout<<“Antrian Kiri Penuh”;

Algoritma Lengkap INSERT KANAN
         Periksa apakah Deque BISA DIISI DARI KANAN
                 void INSERT_KANAN()           
                 {      if ( R < n - 1)
                        {
                                    R = R + 1;
                                    Q[R] = x;
                        }
                        else
                          cout<<“Antrian Kanan Penuh”;
                 }

Algoritma Lengkap DELETE KIRI
         Periksa apakah Deque ADA ISINYA
                 void DELETE_KIRI()
                 {      if (L < R + 1)
                        {
                                    x = Q[L];
                                    L = L + 1;
                        }
                        else
                                    cout<<“Antrian Kosong”;
                 }
Algoritma Lengkap DELETE KANAN
Periksa apakah Deque ADA ISINYA
                 void DELETE_KANAN()
                 {     if (L < R + 1)
                        {
                                    x = Q[R];
                                    R = R - 1;
                        }
                        else
                                    cout<<“Antrian Kosong”;
                 }


Contoh Program QUEUE pada bahasa C++ :

#include<iostream.h>
#include<conio.h>
#include<stdio.h>

#define max 50

typedef struct
{
   int data[max];
   int head;
   int tail;
}Queue;

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<<"Data: "<<antrian.data[antrian.tail]<<" Masuk ke Antrian!!!";
   }
   else if(IsFull()==0)
   {
                 antrian.tail++;
      antrian.data[antrian.tail]=data;
      cout<<"Data: "<<antrian.data[antrian.tail]<<" Masuk ke Antrian!!!";
   }
   else if(IsFull()==1)
   {
                 cout<<"Ruangan Penuh !!"<<endl;
      cout<<data<<"Silahkan tunggu !!!";
   }
}
void Dequeue()
{
                 int i;
   int e = antrian.data[antrian.head];
   if(antrian.tail==-1)
   {
                 cout<<"Data kosong, Tidak ada antrian!"<<endl;
   }
   else
   {
                 for(i=antrian.head;i<antrian.tail-1;i++)
      {
                 antrian.data[i]=antrian.data[i+1];
      }
      antrian.tail--;
      cout<<"Data yang keluar lebih dulu = "<<e<<endl;
   }
}
void clear()
{
                 antrian.head=antrian.tail=-1;
   cout<<"Akhirnyaaa, Ruangan sepi :) "<<endl;
   cout<<"Data Clear";
}
void tampil()
{
                 if(IsEmpty()==0)
   {
    cout<<"Data Dalam Antrian"<<endl;
      cout<<"==================";
      cout<<endl;
      for(int i=antrian.head;i<=antrian.tail;i++)
      {
                 cout<<"| " <<antrian.data[i]<<" |";
      }
   }
   else
   {
                 cout<<"Data kosong, tidak ada antrian!";
   }
}
void main()
{
                 int pil;
   int data;
   create();
   do
   {
                 clrscr();
      cout<<"Implementasi Antrian dengan Struct"<<endl;
      cout<<"==================================";
      cout<<endl;
      cout<<"1. Enqueue"<<endl;
      cout<<"2. Dqueue "<<endl;
      cout<<"3. Print "<<endl;
      cout<<"4. Clear "<<endl;
      cout<<"5. Exit "<<endl;
      cout<<"Masukkan pilihan anda : ";
      cin>>pil;
      switch(pil)
      {
                 case 1:
         {
                 cout<<endl;
            cout<<"Data = ";
            cin>>data;
            Enqueue(data);
            break;
         }
         case 2:
         {
                 cout<<endl;
            Dequeue();
            break;
         }
         case 3:
         {
                 cout<<endl;
            tampil();
            break;
         }
         case 4:
         {
                 cout<<endl;
            clear();
            break;
         }
      }
      getch();
   }
   while(pil!=5);
}


Tampilan setelah progam dijalankan!!



DAFTAR PUSTAKA



  • Anonim. 2014. Queue antrian di Struktur Data. Diakses tanggal 05 Juni 2015 pada http://masiyak.com/queue-antrian-di-struktur-data/
  • Syaviri, Ananda Putri. 2014. Laporan ASD 5 Queue. Diakses tanggal 05 Juni 2015 pada https://www.academia.edu/6668456/LAPORAN_ASD_5_QUEUE

SELAMAT MENCOBA !!!



Tidak ada komentar:

Posting Komentar