Senin, 04 Januari 2016

PENGERTIAN QUEUE



PENJELASAN TENTANG QUEUE
·                      PENGERTIAN QUEUE
         Queue pada Struktur Data atau antrian adalah sekumpulan data yang mana penambahan elemen hanya bisa dilakukan pada suatu ujung disebut dengan sisibelakang(rear), dan penghapusan(pengambilan elemen) dilakukan lewat ujung lain (disebut dengan sisi depan atau front) Queue atau antrian prinsip yang digunakan adalah “Masuk Pertama Keluar Pertama” atau FIFO (First In First Out). Queue atau antrian banyak kita jumpai dalam kehidupan sehari-hari, ex: antrian Mobil diloket Tol, Antrian mahasiswa Mendaftar, dll. Contoh lain dalam bidang komputer adalah pemakaian sistem komputer berbagi waktu(time-sharing computer system) dimana ada sejumlah pemakai yang akan menggunakan sistem tersebut secara serempak.

        Pada Queue atau antrian Terdapat satu buah pintu masuk di suatu ujung dan satu buah pintu keluar di ujung satunya dimana membutuhkan variabel Head dan Tail ( depan/front, belakang/rear).
 
§  Karakteristik Queue atau antrian : 
§  1. elemen antrian 
§  2. front (elemen terdepan antrian) 
§  3. tail (elemen terakhir) 
§  4. jumlah elemen pada antrian 
§  5. status antrian Operasi pada Queue atau antrian 

§  1. tambah(menambah item pada belakang antrian) 
§  2. hapus (menghapus elemen depan dari antrian) 
§  3. kosong( mendeteksi apakah pada antrian mengandung elemen atau tidak) 

    .   Enqueue Untuk menambahkan elemen ke dalam Antrian, penambahan elemen selalu ditambahkan di elemen paling belakang Penambahan elemen selalu menggerakan variabel Tail dengan cara increment counter Tail terlebih dahulu .
 5. Dequeue() Digunakan untuk menghapus elemen terdepan/pertama (head) dari Antrian Dengan cara menggeser semua elemen antrian kedepan dan mengurangi Tail dgn 1 Penggeseran dilakukan dengan menggunakan looping.
   6. Clear() 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 ke nilai -1 sehingga elemen-elemen Antrian tidak lagi terbaca .
   7. Tampil() Untuk menampilkan nilai-nilai elemen Antrian Menggunakan   looping dari head s/d tail 
·                        IMPLEMENTASI QUEUE DALAM BAHASA PASCAL
§  Implementasi dalam bahasa Pascal dapat dilakukan dengan memanfaatkan struktur data record dan array. Array dipergunakan untuk menyimpan elemen-elemen yang dimasukkan. Selain itu diperlukan pula suatu variabel untuk mencatat banyaknya elemen yang ada di dalam array. Pada implementasi di bawah ini:
§  konstanta maxelm menyatakan banyaknya elemen maksimum yang dapat ditampung oleh queue  typeelemen adalah tipe data yang akan disimpan di dalam queue(bisa integer, word, real, boolean, char , string atau lainnya banyak adalah field yang menyatakan banyaknya elemen dalam queue saat itu  queue diimplementasikan sebagai array linier dengan memandang bahwa elemen terdepan selalu berada pada sel pertama (implementasi fisik), sehingga bila terjadi pengambilan satu elemen maka semua elemen di belakang elemen terambil (bila ada) harus digeser ke depan satu langkah .
  Deklarasi tipe untuk antrian (queue):
type antrian= record
   banyak :0..maxelm;
   elemen : array[1..maxelm] of typeelemen;
end;
§  Selain prosedur untuk ADDQ dan DELQ, kita dapat pula menambahkan sejumlah fungsi untuk membantu penanganan kesalahan diantaranya adalah fungsi PENUHQ (untuk mengecek apakah antrian penuh) fungsi KOSONGQ (untuk mengecek apakah antrian kosong) dan fungsi SIZEQ (untuk mengetahui banyaknya elemen di dalam queue). Masing-masing sub program di atas dapat disajikan pseudocode-nya sebagai berikut.
       
Procedure Inisialisasi(var q : antrian);
begin
  Q. banyak ¬ 0
end;
Function PENUHQ(q : antrian): boolean;
begin
 Jika Q.banyak = maxelm maka PENUHQ ¬ true
 else PENUHQ¬false
end;
Function KOSONGQ(q : antrian):boolean;
begin
 If Q.banyak = 0 then KOSONGQ ¬ true
 else KOSONGQ ¬ false
end;
§  Procedure ADDQ(data : tipeelemen; var q : antrian);
begin
 If not PENUHQ(Q) then
 begin
§  Q.banyak¬ Q.banyak+1
§  Q.elemen[Q.banyak] ¬ data
§   end
 else
   Tampilkan pesan kesalahan "Antrian "
P
end;
Procedure DELQ(var q : antrian; var data : typeelemen);
begin
 If not KOSONGS(Q) then
 begin
§  data ¬Q.elemen[1]
§  for i:= 2 to Q.banyak
Q.elemen[i-1] ¬ Q.elemen[i]
§  Q.banyak ¬ Q.banyak- 1
§   end
 else
   Tampilkan pesan kesalahan "Antrian kosong"
End;
2.    CONTOH QUEUE DALAM KEHIDUPAN SEHARI – HARI    
      Dalam kehidupan sehari-hari kita bisa dapati melalui penerapan pembelian tiket kereta api, tiket pesawat, tiket kapal laut, pembayaran tiket tol, pembayaran listrik, pembayaran air, dan lain sebagainya. Walaupun berbeda implementasi, Konsep struktur data queue adalah First In First Out(FIFO). Queue setidaknya harus memiliki operasi-operasi sebagai berikut:
  1. EnQueue : Masukkan data ke dalam antrian
  2.  DeQueue : Mengeluarkan data terdepan dari antrian
  3.  Clear : Menghapus seluruh antrian.
  4. IsEmpty : Memeriksa apakah antrian kosong
  5. IsFull : Memeriksa apakah antrian penuh
       Dalam pembelian tiket kereta api:
Enqueue : Seseorang membeli tiket melalui tempat pembayaran tiket yang disediakan.
Dequeue : Setelah membeli tiket, langsung menuju tempat penungguan kereta, dengan sebelumnya petugas memeriksa cek tiket tersebut.
Clear : Pembeli tiket tersebut telah terhapus dari antrian karena sudah melewati pembayaran administrasi tersebut.
IsEmpty : Petugas tiket Kereta melihat tidak ada lagi yang ingin membeli tiket kereta.
IsFull : Petugas Tiket Kereta melihat masih ada pembeli tiket kereta.
          Contohnya yaitu antrian pada kasir pada sebuah bank. Ketika seorang pelanggan datang, akan akan maju. Jika kita ada di antrian kedua, maka kita akan menunggu antrian pertama melakukan prosesnya. Nah, ketika selesai proses dari antrian pertama dia akan pergi, dan menuju ke belakang dari antrian. Setiap pelanggan dilayani, antrian yang berada di depan giliran kita untuk maju untuk melakukan proses. Begitu juga arti dari antrian dalam bahasan kali ini, jika pengantri pertama datang maka dia juga yang akan keluar pertama kali atau bahasa kerennya tu FIFO ( First In First Out ).
     Kondisi antrian yang menjadi perhatian :
 `1,  PENUH
         Bila elemen pada antrian mencapai kapasitas maksimum antrian, maka tidak mungkin dilakukan penambahan ke antrian. Penambahan elemen menyebabkan kondisi kesalahan overfl
   2.  KOSONG
        Bila tidak ada elemen pada antrian, maka tidak mungkin dilakukan pengambilan elemen dari antrian. Pengambilan elemen menyebabkan kondisi kesalahan overflow.
       KARAKTER QUEUE ATAU ANTRIAN
       1.  Adanya elemen antrian yaitu item – item data yang terdapat pada              element antrian.
      2. Adanya front ( elemen antrian )
      3. Adanya tail ( elemen terhkir )
      4. Status antrian
      5. Adanya jumlah elemen pada antrian 

   4.   PERBEDAAN QUEUE DAN STACK
Ø           Sementara Queue memakai siste FIFO atau first in first out (yang pertama masuk akan keluar pertama, begitu pula yang masuk terakhir akan keluar terakhir) yang apabila kita menghapus / mengeluarkan data, maka data yang pertamalah yang akan terhapus/ keluar terdahulu dan data yang terakhir akan terhapus/ keluar terakhir.
Ø      Stack memakai sistem LIFO atau last in first out (yang pertama masuk akan keluar terakhir, begitu pula yang terakhir masuk akan keluar pertama kali) yang apabila kita mengahapus/ keluar data, maka data yang terakhirlah yang akan terhapus/ keluar terlebih dahulu.
     MANFAAT  QUEUE  :
       A.    Digunakan sistem operasi untuk mengatur eksekusif task da) lam suatu  sistem untuk mencapai  pelakuan yang adil.
     B.    Untuk milbox  dalam komunikasi antar proses
    C..   Untuk buffer dalam mekanisme priinstpoler komunikasi data
    D.   Untuk simulasi dan modeling ( misalnya sistem modeling pengendalian 
      lalu lintas udara )
   E.   Simulasi antar dunia nyata  , antara lain :
          1.  antrian dalam pembelian tiket  dalam bus , dll
          2.  antrian mobil depan gerbang  jalan toll
          3. antrian kendaraan di jalan umum
   5.    OPERASI-OPERASI PADA QUEUE   :
a.     Mengecek apakah queue sudah penuh
b.     Mengecek apakah queue sudah kosong
c.      Memasukkan elemen ke dalam queue  atau inqueue
d.      Menghapus elemen queue  atau dequeue ( delete queue
      CONTOH PROGRAM QUEUE C++
        #include<iostream.h>
         #include<conio.h>
         #include<studio.h >
   #define max 10
      typedefstruct
{
 int data[max];
 
int head;
 
int tail;
}Queue;
Queue antrian;

void create()
{

void create()
 antrian.head=antrian.tail=-1;
}
intIsEmpty()
{
 if(antrian.tail==-1)
   return 1;
   else
   return 0;
}
 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 !!!";
   }
   else if(IsFull()==0)
   {

 antrian.tail++;
     
antrian.data[antrian.tail]=data;
     cout<<"Data "<<antrian.data [antrian.tail]<<"Masuk !!!";
   }
   else if(
IsFull==1)
   {
   
cout<<"Ruangan Penuh<<”Masuk;
   
cout<<data<<"GaBisaMasuk!
   }
}
void Dequeue()
{
inti;
{
inti;
   
int e = antrian.data[antrian.head];
   if(
antrian.taill==-1)
   {
cout<<"Ga ada antrian... Data Kosong"<<endI;
   }
   else
   {
    for(
i=antrian.head.i <antrian.tail-1;i++)
      {
     
antrian.data[i]=antrian.data [i+1];
      }
     
antrian.tail--;
     
cout<<"Data yang keluarterlebih dulu = "<<e<<endI;
   }
}
void clear()
{
{
antrian.head=antrian.tail =-1;
   
cout<<"Duh Lega,Ruangajagasumpek... "<<endI;
   
cout<<"Data Clear";
}
void
tampil()
{
 if(
IsEmpty ()==0)
   {

          cout<<"Data DalamAntrian"<<endl;
      cout<<"=====================================";
      cout<<endl;
      for(inti=antrian.head;i<=antrian.tail;i++)
      {
       cout<<"| " <<antrian.data[i]<<" |";
      }
   }
   else
   {
   
cout<< Gaadaantrian ...Data kosong
";
   }
}
void main()
{
intpil;
   int data;
   create();
   do
   {
  cout<<"ImplementasiAntriandenganStruct"<<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<<"Masukkanpilihananda : ";
      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);
}
          {
          cout<<endl;
            Dequeue();
            break;
         }
         case 3:
         {
          cout<<endl;
            tampil();
            break;
         }
         case 4:
         {
          cout<<endl;
            clear();
            break;
         }
      }
      getch();
   }
   while(pil!=5);
       Screenshot.

  
                             
                                                                                                                                 
                                                                                                      
                                                            
                                                     
                                               
                       
                                                           
                                                                         
                                                                                               
                                                                                                           
                                               



           



2 komentar:

  1. Balasan
    1. 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).

      Hapus