Rabu, 02 Desember 2015

perbedaan utama stack dan queue

Perbedaan utama stack dan queue adalah :
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.
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.
Guna counter pada rangkaian stack dan queue adalah untuk menentukan apakah stack atau queue tersebut sudah full atau masih empty.
Queue mempunyai struktur data yang hampir sama dengan Stack. Yang membedakan adalah procedure Deque, dimana terjadi iterasi untuk pergeseran komponen2 array, karena Queue menggunakan metode FIFO (First In First Out) sedangkan Stack menggunakan metode LIFO (Last In First Out). Berikut adalah listing program Queue yang  ditulis dalam bahasa Pascal.

Contoh program:
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 penerapan Antrian (Queue) dalam kehidupan sehari-hari:
Contohnya yaitu antrian pada kasir pada sebuah bank. Ketika seorang pelanggan datang, akan menuju ke belakang dari antrian. Setiap pelanggan dilayani, antrian yang berada di depan 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 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 overflow
            2.  Kosong
Bila tidak ada elemen pada antrian, maka tidak mungkin dilakukan pengambilan elemen dari antrian. Pengambilan elemen menyebabkan kondisi kesalahan overflow.

Operasi-operasi pada Queue:
1. Create Queue (Q) : membuat antrian baru Q, dengan jumlah elemen kosong.
2. Make NullQ (Q) : mengosongkan antrian Q, jika ada elemen maka semua elemen dihapus.
3. EnQueue : berfungsi memasukkan data kedalam antrian.
4. DeqQueue : berfungsi mengeluarkan data terdepan dari antrian.
5. Clear : Menghapus seluruh Antrian
6. IsEmpty : memeriksa apakah antrian kosong
7. IsFull : memeriksa apakah antrian penuh.

Operasi-operasi pada Antrian (queue):
1.Create()
Untuk menciptakan dan menginisialisasi Queue dengan cara membuat Head dan Tail  = -1
2. IsEmpty()
Untuk memeriksa apakah antrian masih kosong atau sudah terisi dengan cara memeriksa nilai tail, jika tail = -1,maka empty pergerakan pada Antrian terjadi dengan penambahan data Antrian kebelakang, yaitu menggunakan nilai tail
3. IsFull()
Untuk mengecek apakah Antrian sudah penuh atau belum dengan cara mengecek nilai tail, jika tail >= MAX-1 (karena MAX-1 adalah batas data array pada C) berarti sudah penuh.
4. Enqueue
Untuk menambahkan data ke dalam antrian, penambahan data selalu ditambahkan di data paling belakang penambahan data selalu menggerakan variabel tail dengan cara increment counter tail.
5. Dequeue()
Digunakan untuk menghapus data terdepan dari Antrian dengan cara mengurangi counter tail dan menggeser semua data antrian kedepan. penggeseran dilakukan dengan menggunakan looping
6. Clear()
Untuk menghapus semua data Antrian dengan cara membuat tail dan head = -1 penghapusan data-data antrian sebenarnya tidak menghapus arraynya, namun hanya mengeser indeks pengaksesannya ke nilai -1 sehingga data-data Antrian tidak lagi terbaca
7. Tampil()
Untuk menampilkan nilai-nilai data Antrian menggunakan looping dari head s/d tail.

EnQueue : Masukkan data ke dalam antrian
DeQueue : Mengeluarkan data terdepan dari antrian
Clear : Menghapus seluruh antrian
IsEmpty : Memeriksa apakah antrian kosong
IsFull : Memeriksa apakah antrian penuh

1. Create
Untuk menciptakan dan menginisialisasi Queue
Dengan cara membuat Head dan Tail  = -1.
2. 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.
3. 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.
4. 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





Tidak ada komentar:

Posting Komentar