Tuesday, 9 June 2015

Rangkuman Materi Queue




Queue

Secara  harfiah  queue  dapat  diartikan  sebagai  antrian.  Queue  merupakan  kumpulan  data  dengan  penambahan  data  hanya melalui  satu  sisi,  yaitu  belakang (tail)  dan  penghapusandata hanya melalui sisi depan (head). Berbeda dengan stack yang bersifat LIFO maka queue  bersifat  FIFO(First  In  First  Out),  yaitu  data  yang  pertama  masuk  akan  keluar  terlebih  dahulu  dan  data  yang  terakhir masuk  akan  keluar  terakhir.  Berikut ini  adalah  gambaran  struktur data queue.


Elemen  yang  pertama  kali  masuk  ke  dalam  queue  disebut  elemen  depan  (front/head  of  queue),  sedangkan  elemen  yang  terakhir  kali  masuk  ke  queue  disebut  elemen  belakang  (rear/tail of queue). Perbedaan antara stack dan queue terdapat pada aturan penambahan  dan  penghapusan  elemen.  Pada  stack,  operasi  penambahan  dan  penghapusan  elemen  dilakukan di satu ujung. Elemen yang  terakhir kali dimasukkan akan berada paling dekat  dengan  ujung  atau  dianggap  paling  atas  sehingga  pada  operasi  penghapusan,  elemen  teratas tersebut akan dihapus paling awal, sifat demikian dikenal dengan LIFO. Pada queue,  operasi tersebut dilakukan di tempat yang berbeda. Penambahan elemen selalu dilakukan  melalui salah satu ujung, menempati posisi di belakang elemenelemen yang sudah masuk  sebelumnya  atau  menjadi  elemen  paling  belakang.  Sedangkan  penghapusan  elemen  dilakukan  di  ujung  yang  berbeda,  yaitu  pada  posisi elemen  yang  masuk  paling awal atau  elemen terdepan. Sifat yang demikian dikenal dengan FIFO. 

Operasioperasi standar pada queue adalah: 
1. membuat queue atau inisialisasi. 
2. mengecek apakah queue penuh. 
3. mengecek apakah queue kosong.
4. memasukkan elemen ke dalam queue atau InQueue (Insert Queue). 
5. Menghapus elemen queue atau DeQueue (Delete Queue). 

Disebut juga queue dengan model fisik, yaitu bagian depan queue selalu menempati posisi  pertama  array.  Queue  dengan  linear  array  secara  umum  dapat  dideklarasikan  sebagai  berikut:

            Const   
            MaxQueue = {jumlah};
Type   
TypeQueue = byte; 
Var   
 Queue : Array[1..MaxQueue] of TypeQueuel   
 Head, Tail   : Byte; 

1.      Create 
berguna untuk menciptakan queue yang baru dan kosong yaitu  dengan cara memberikan nilai awal (head) dan nilai akhir (tail) dengan nol (0). Nol  menunjukan bahwa queue masih kosong. 

Procedure Create;   
Begin     
                 Head := 0; Tail := 0;   
End; 

2.      Empty 
Function empty berguna untuk mengecek apakah queue masih kosong atau sudah  berisi data. Hal ini dilakukan dengan mengecek apakah tail bernilai nol atau tidak,  jika ya maka kosong. 
Function Empty : Boolean;   
Begin     
If Tail = 0 then     
                             Empty := true     
                 Else       
Empty := False;   
End;

3.      Full 
Function Full : Boolean; 
Begin   
If Tail = MaxQueue then
Full := true
Else
Full := False
End; 

4.      EnQueue 
Procedure EnQueue berguna untuk memasukkan 1 elemen ke dalam queue. 
Procedure Enqueue(Elemen : Byte);   
Begin     
If Empty then     
Begin       
Head := 1;       
Tail := 1;       
Queue[head] := Elemen;     
 End     
Else 
              If Not Full then 
Begin     
Inc(Tail);       
            Queue[tail] := Elemen;   
End;   
End; 

5.      DeQueue 
Procedure  DeQueue  berguna  untuk  mengambil  1  elemen  dari  Queue,  operasi  ini  sering  disebut  juga  SERVE.  Hal  ini  dilakukan  dengan  cara  memindahkan  semua  elemen satu langkah ke posisi di depannya, sehingga otomatis elemen  yang paling  depan akan tertimpa dengan elemen yang terletak dibelakangnya. 
Procedure DeQueue;    Var I : Byte;   
     Begin   
                 If Not Empty then 
                 Begin 
                             For I := Head to Tail1 do     
                             Queue[I] := Queue[I+1];       
 Dec(Tail);     
                 End;   
  End;

6.      Clear 
Procedure  clear  berguna  untuk  menghapus  semua  elemen  dalam  queue  dengan  jalan  mengeluarkan  semua  elemen  tersebut  satu  per  satu  sampai  kosong  dengan  memanfaatkan procedure DeQueue. 
Procedure Clear; 
Begin     
While 
Not Empty then     
DeQueue; 

End; 

Coding Queue

#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#define max 10

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!!!";
   }
   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!!"<<endl;
      cout<<data<<"Gak Bisa MAsuk!!!";
   }
}
void Dequeue()
{
            int i;
   int e = antrian.data[antrian.head];
   if(antrian.tail==-1)
   {
            cout<<"Gak ada antrian.. Data Kosong"<<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<<"Duh Lega, Ruangan jadi gak sumpek.."<<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<<"ga ada antrian.. Data Kosong";
   }
}
void main()
{
            int pil;
   int data;
   create();
   do
   {
            clrscr();
      cout<<"Implementasi antrian dengan struct"<<endl;
      cout<<"=========================================";
      cout<<endl;
      cout<<"1. Enqueue"<<endl;
      cout<<"2. Dequeue"<<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);
}

Hasil Output Queue


Daftar Pustaka
Algoritma dan  Struktur Data II









0 komentar :

Post a Comment