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
Keterangan :
F = Front (depan)
R = Rear (belakang)
F menunjuk pengantri paling depan, yaitu pengantri yg siap dilayani.
R menunjuk pengantri paling belakang, yaitu pengantri yg paling terakhir
masuk.
Prinsip / Konsep
Proses :
–
FIFO (First In First Out)
–
FIFS (First In First Serve)
–
AWAL
(Inisialisasi)
–
INSERT
(Sisip, Masuk, Simpan, Tulis)
–
DELETE
(Hapus, Keluar, Ambil/Dilayani, Baca)
–
RESET
(Kembali ke AWAL)
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 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).
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.
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
Kondisi Antrian
|
Ciri
|
|
a.
b.
c.
d.
e.
f.
|
KOSONG
PENUH KIRI
PENUH KANAN
BISA DIISI DARI KIRI
BISA DIISI DARI KANAN
ADA ISINYA
|
L = R + 1 dimana saja
L = 0
R = n – 1
L > 0
R < n – 1
L < R + 1
|
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
#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);
}
#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);
}
Screenshot Program Queue
Tidak ada komentar:
Posting Komentar