Queue
Secara
harfiah queue dapat diartikan sebagai
antrian. Queue merupakan kumpulan data
dengan penambahan data hanya melalui satu
sisi, yaitu belakang (tail) dan penghapusandata hanya melalui sisi depan (head). Berbeda dengan stack yang bersifat LIFO maka queue
bersifat FIFO(First In First Out), yaitu
data yang pertama masuk akan keluar
terlebih dahulu dan data yang terakhir masuk
akan keluar terakhir. Berikut ini adalah
gambaran struktur data queue.
Elemen
yang pertama kali masuk ke dalam
queue disebut elemen depan (front/head of
queue), sedangkan elemen yang terakhir kali
masuk ke queue disebut elemen belakang
(rear/tail of queue). 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. 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.
Operasi‐operasi standar pada queue adalah:
1. membuat queue atau inisialisasi.
2. mengecek apakah queue penuh.
3. mengecek apakah queue kosong.
4. memasukkan elemen ke dalam queue atau InQueue (Insert Queue).
5. Menghapus elemen queue atau DeQueue (Delete Queue).
Disebut juga queue dengan model fisik, yaitu bagian depan queue selalu menempati posisi
pertama array. Queue dengan linear array
secara umum dapat dideklarasikan sebagai berikut:
Const
MaxQueue = {jumlah};
Type
TypeQueue = byte;
Var
Queue : Array[1..MaxQueue] of TypeQueuel
Head, Tail : Byte;
1. Create
berguna untuk menciptakan queue yang baru dan kosong yaitu
dengan cara memberikan nilai awal (head) dan nilai akhir (tail) dengan nol (0). Nol
menunjukan bahwa queue masih kosong.
Procedure Create;
Begin
Head := 0; Tail := 0;
End;
2. Empty
Function empty berguna untuk mengecek apakah queue masih kosong atau sudah
berisi data. Hal ini dilakukan dengan mengecek apakah tail bernilai nol atau tidak,
jika ya maka kosong.
Function Empty : Boolean;
Begin
If Tail = 0 then
Empty := true
Else
Empty := False;
End;
3. Full
Function Full : Boolean;
Begin
If Tail = MaxQueue then
Full := true
Else
Full := False
End;
4. EnQueue
Procedure EnQueue berguna untuk memasukkan 1 elemen ke dalam queue.
Procedure Enqueue(Elemen : Byte);
Begin
If Empty then
Begin
Head := 1;
Tail := 1;
Queue[head] := Elemen;
End
Else
If Not Full then
Begin
Inc(Tail);
Queue[tail] := Elemen;
End;
End;
5. DeQueue
Procedure DeQueue
berguna untuk mengambil 1 elemen dari
Queue, operasi ini sering disebut juga
SERVE. Hal ini dilakukan dengan cara memindahkan
semua elemen satu langkah ke posisi di depannya, sehingga otomatis elemen
yang paling
depan akan tertimpa dengan elemen yang terletak dibelakangnya.
Procedure DeQueue;
Var I : Byte;
Begin
If Not Empty then
Begin
For I := Head to Tail‐1 do
Queue[I] := Queue[I+1];
Dec(Tail);
End;
End;
6. Clear
Procedure clear berguna
untuk menghapus semua elemen dalam queue
dengan jalan mengeluarkan semua elemen
tersebut satu per satu sampai kosong
dengan memanfaatkan procedure DeQueue.
Procedure Clear;
Begin
While
Not Empty then
DeQueue;
End;
Coding 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<<"Gak Bisa
MAsuk!!!";
}
}
void
Dequeue()
{
int i;
int e = antrian.data[antrian.head];
if(antrian.tail==-1)
{
cout<<"Gak 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 gak
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.
Dequeue"<<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);
}
Hasil Output Queue
Daftar Pustaka
Algoritma dan Struktur Data II
Algoritma dan Struktur Data II
0 komentar :
Post a Comment