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;
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;
begin
Q. banyak ¬ 0
end;
Function
PENUHQ(q : antrian): boolean;
begin
Jika Q.banyak = maxelm maka PENUHQ ¬ true
else PENUHQ¬false
end;
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;
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
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;
else
Tampilkan pesan kesalahan "Antrian "P
end;
Procedure
DELQ(var q : antrian; var data : typeelemen);
begin
If not KOSONGS(Q) then
begin
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.elemen[i-1] ¬ Q.elemen[i]
§ Q.banyak ¬ Q.banyak- 1
§ end
else
Tampilkan pesan kesalahan "Antrian kosong"
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.
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
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.
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;
{
int data[max];
int head;
int tail;
}Queue;
Queue antrian;
void create()
{
void create()
{
void create()
antrian.head=antrian.tail=-1;
}
antrian.head=antrian.tail=-1;
}
intIsEmpty()
{
if(antrian.tail==-1)
return 1;
else
return 0;
}
return 1;
else
return 0;
}
if(antrian.tail==max-1)
return 1;
else
return 0;
}
return 1;
else
return 0;
}
void Enqueue(int data)
{
if(IsEmpty()==1)
{
{
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.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;
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)
{
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++)
}
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.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)
{
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
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
{
}
}
void main()
{
intpil;
int data;
create();
do
{
cout<<"ImplementasiAntriandenganStruct"<<endl;
cout<<"==========================================";
cout<<endl;
cout<<"1. Enqueue"<<endl;
cout<<"2.Dqueue "<<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<<"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);
cout<<endl;
Dequeue();
break;
}
case 3:
{
cout<<endl;
tampil();
break;
}
case 4:
{
cout<<endl;
clear();
break;
}
}
getch();
}
while(pil!=5);
Screenshot.
apa yang dimaksud dengan queue?
BalasHapusQueue / 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