Senin, 08 Juni 2015

Struktur data Queue

Pengrtian Queue

Queue (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).

Data yang pertama masuk dalam antrian, akan keluar terlebih dahulu.
Queue atau antrian prinsip yang digunakan adalah “Masuk Pertama Keluar Pertama” atau FIFO (First In First Out). 

Jenis-jenis Queue :
–        Linear Queue
–        Double Ended Queue (Dequeue)

LINEAR QUEUE
Ilustrasi 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)











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

Algoritma lengkap 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”;

DOUBLE ENDED QUEUE (Dequeue)

Ilustrasi Deque (Antrian dengan Ujung Ganda) :

















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)
Kondisi Double Ended Queue :











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 Programnya :
#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<<"Ga Bisa Masuk !!!";
   }
}
void Dequeue()
{
 int i;
   int e = antrian.data[antrian.head];
   if(antrian.tail==-1)
   {
    cout<<"Ga 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 ga 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. 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);
}

Hasil Outputnya :

Tidak ada komentar:

Posting Komentar