1)
Jelaskan perbedaan antara queue dengan stack.
2)
Buatlah contoh program dari Queue.
3)
Sebutkan contoh Queue yang Anda terapkan dalam
kehidupan sehari – hari.
4)
Jelaskan konsep dari operasi – operasi Queue.
5)
Apa saja kondisi yang harus diperhatikan dalam operasi
– operasi Queue
Perbedaan Antara Queue Dengan Stack
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.
Sedangkan
Pada queue, operasi tersebut dilakukan di tempat yang berbeda. Penambahan
elemen selalu dilakukan melalui salah satu ujung, menempati posisi di belakang
elemen-elemen 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.
Contoh Program Dari Queue
PROGRAM
QUEUE01;
uses
wincrt;
const
MAX=50;
type
larik
= Array[0..MAX] of char;
RecQueue
= RECORD
info
: larik;
awal
: integer;
akhir
: integer;
END;
var
antri
: RecQueue;
pilih,elm
: char;
procedure
init;
begin
antri.awal
:= 0;
antri.akhir
:= 0;
end;
function
Isfull:boolean;
begin
if
antri.akhir = MAX then
Isfull
:= true
else
Isfull
:= false;
end;
function IsEmpty:boolean;
begin
if antri.akhir = 0 then
Isempty := true
else
Isempty := false;
end;
procedure baca;
var i:integer;
begin
writeln('Isi queue sekarang : ');
for i := antri.awal to antri.akhir
do
write(antri.info[i], ' ');
writeln('');
end;
procedure
inQueue(elemen:char);
begin
if
Isempty = true then
begin
antri.awal
:= 1;
antri.akhir:=
1;
antri.info[antri.awal]
:= elemen;
end
else
if Isfull <> true then
begin
antri.akhir
:= antri.akhir + 1;
antri.info[antri.akhir]:=elemen;
end
else
writeln('Queue
overflow...');
end;
function
deQueue:char;
var
isi:char;
i
: integer;
begin
if
Isempty <> true then
begin
isi
:= antri.info[antri.awal];
for
i:=antri.awal to antri.akhir - 1 do
antri.info[i]
:= antri.info[i+1];
antri.akhir
:= antri.akhir - 1;
deQueue
:= isi;
end
else
writeln('Queue
underflow...');
end;
BEGIN
CLRSCR;
writeln('---
Demo Queue dg Linear Array ---');
init;
repeat
writeln('OPERASI
QUEUE dg Linear Array :');
writeln('[1]
InQueue (Insert Queue)');
writeln('[2]
DeQueue (Delete Queue)');
writeln('[3]
Baca');
writeln('[4]
Selesai...');
write('
Pilihan : ');
readln(pilih);
case
pilih of
'1'
: begin
write('Antrian
Masuk : ');
readln(elm);
inQueue(elm);
end;
'2'
:
begin
elm:=deQueue;
writeln(elm,'
Keluar dr antrian');
end;
'3'
: baca;
'4'
: writeln('Wakarimasuta (?_?)');
else
writeln('Salah pilih...');
end;
writeln('');
until
(pilih = '4');
readln;
END.
Contoh Queue Yang Anda Terapkan Dalam Kehidupan Sehari
– Hari
Ø
Antrian Mobil diloket Tol
Ø
Antrian
mahasiswa saat melakukan pendaftaran
Ø
Antrian
saat membeli tiket film di bioskop
Ø
Antrian reservasi tiket kereta api
Ø
Antrian saat mengisi BBM SPBU
Ø
Antrian saat melakukan pengecekan tiket dan paspor saat
chekin pesawat.
Ø
antrian saat
mengambil makanan di pesta
Ø
Antrian saat pergi ke toilet.
Ø
Antrian saat
menanti pelayanan teller di bank
Konsep Dari Operasi – Operasi Queue
- Inisialisasi Queue
Inisialisasi queue adalah proses pemberian nilai 0 untuk field depan dan belakang dari queue dan juga pemberian nilai maks ke maks_queue yang menunjukan banyaknya maksimal data dalam queue. Karena dalam bahasa C elemen sebuah array dimulai dengan 0 maka proses inisialisasi nilai depan dan belakang bukan 0 tetapi -1 sehingga ketika ada proses penambahan elemen (enqueue) akan bernilai 0 sehingga elemen tersebut akan disimpan dalam elemen antrian pada posisi 0.
Implementasi
fungsi inisialisasi queue dalam bahasa C adalah :
void
inisialisasi (TQueue *Q)
{
Q->maks_queue=maks;
Q->depan=-1;
Q->belakang=-1;
}
Cara pemanggilannya adalah :
Inisialisasi (&Q);
{
Q->maks_queue=maks;
Q->depan=-1;
Q->belakang=-1;
}
Cara pemanggilannya adalah :
Inisialisasi (&Q);
- Enqueue
Digunakan
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.
Contoh : Seseorang
membeli tiket melalui tempat pembayaran tiket yang disediakan.
- Dequeue
Digunakan
untuk menghapus elemen terdepan/pertama (head) dari Antrian.
Dengan cara menggeser semua elemen antrian kedepan dan mengurangi Tail
dengan 1. Penggeseran dilakukan dengan menggunakan looping.
Contoh : Setelah
membeli tiket, langsung menuju tempat penungguan kereta, dengan sebelumnya
petugas memeriksa cek tiket tersebut.
4.
IsEmpty()
Untuk
memeriksa apakah Antrian sudah penuh atau belum. Dengan
cara memeriksa nilai Tail, jika Tail = -1 maka empty. Kita
tidak memeriksa Head, karena Head adalah tanda untuk kepala antrian (elemen
pertama dalam antrian) yang tidak akan berubah-ubah. Pergerakan
pada Antrian terjadi dengan penambahan elemen Antrian kebelakang, yaitu
menggunakan nilai Tail.
Contoh : Petugas
tiket Kereta melihat tidak ada lagi yang ingin membeli tiket kereta.
5.
IsFull
Untuk
mengecek apakah Antrian sudah penuh atau belum. Dengan
cara mengecek nilai Tail, jika Tail >= MAX-1 (karena MAX-1 adalah batas
elemen array pada C) berarti sudah penuh.
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
Kondisi Yang Harus Diperhatikan Dalam Operasi – Operasi Queue
Kondisi
antrian yang menjadi perhatian adalah :
1)
Penuh
Bila
elemen di antrian mencapai kapasitas maksimum antrian.
Pada kondisi ini, tidak mungkin dilakukan penambahan ke antrian. Penambahan
elemen menyebabkan kondisi kesalahan Overflow.
2)
Kosong
Bila
tidak ada elemen di antrian. Pada kondisi ini, tidak mungkin dilakukan pengambilan
elemen dari antrian. Pengambilan elemen menyebabkan kondisi kesalahan
Underflow.