Senin, 30 November 2015

TUGAS QUEUE

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
  1. 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);
  1. 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.
  1. 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.


Tidak ada komentar:

Posting Komentar