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 !!!
Selain materi diatas terdapat juga beberapa materi struktur
data, silahkan klik link di bawah ini :
Tidak ada komentar:
Posting Komentar