Queue dengan linked list

Download Report

Transcript Queue dengan linked list

Queue
Queue (Antrian)
• Contoh antrian :
• Antrian printer
• Antrian tiket bioskop
Pengertian
• Queue (antrian) adalah struktur data
dimana proses pengambilan dan
penambahan element dilakukan pada
ujung yang berbeda.
• Queue mengikuti konsep FIFO.
• FIFO (First In First Out) : elemen yang
pertama masuk akan menjadi elemen
yang pertama kali keluar.
Enqueue dan Dequeue
1. Enqueue
proses penambahan element pada queue.
2. Dequeue
proses pengambilan element pada queue.
Penambahan dilakukan pada bagian belakang.
Sedangkan pengambilan dilakukan pada bagian
depan (element yang pertama masuk).
enqueue
Queue
dequeue
Front dan Rear
• Front : pointer bantu yang digunakan
untuk menunjuk element yang paling
depan.
• Rear : pointer bantu yang digunakan
untuk menunjuk element yang paling
belakang.
Enqueue
Rear
Queue
Dequeue
Front
• Queue berguna untuk menyimpan
pekerjaan yang tertunda.
Gambaran Proses Queue
(Antrian)
Operasi pada Queue
1.
2.
3.
4.
5.
6.
7.
Deklarasi
Inisialisasi
Cek kosong
Cek penuh
Penambahan
Pengambilan
Pengaksesan
(1) Deklarasi
• Proses yang harus dilakukan pertama kali
adalah deklarasi/menyiapkan tempat.
• Langkah yang harus dilakukan adalah :
– Deklarasi struct
– Deklarasi struktur data (menggunakan array atau
linked list)
– Deklarasi pointer front dan rear
Deklarasi Queue dengan Linked-list
1. Pembuatan struct Tnode
struct TNode{
int data;
TNode *next;
};
2. Pembuatan variabel head, tail, front dan rear bertipe
TNode.
TNode head,tail,front, rear;
(2) Inisialisasi
• Pada Linked List:
Proses inisialisasi dilakukan dengan
memberikan nilai awal pada variabel
head, tail front dan rear dengan nilai
null.
void inisialisasi(){
head=tail=front=rear=NULL;
}
(3) Cek Kosong
• Operasi yang digunakan untuk mengecek
kondisi queue dalam keadaan kosong.
• Pada linked list : dapat menggunakan
pengecekan front atau rear jika nilainya null
berarti queue kosong.
• Operasi ini harus dapat mengembalikan nilai
true jika queue kosong dan false jika
sebaliknya.
Program “isEmpty” Queue (Linked
List)
bool isEmpty(){
return (rear==NULL);
}
(6) Operasi Dequeue
• Dequeue adalah proses pengambilan data
pada queue.
• Ketika dequeue terjadi, element pada queue
akan berkurang, yaitu element yang pertama
kali ditambahkan.
• Pada linked list : front akan menunjuk pada
node yang ditunjuk oleh head setelah
operasi remove.
(5) Operasi
DEQUEUE...........(lanjutan)
• Langkah-langkah :
1. Pengecekan queue dalam kondisi kosong
dengan memanggil method isEmpty().
2. Data dari element yang diambil akan
menjadi return value (nilai yang
dikembalikan)
3. Perubahan nilai pada variabel front dan rear
Program Dequeue (Linked List)
int dequeue(){
if(!isEmpty()){
int tampungData=front->data;
removeFirst();
front=head;
return tampungData;
}else{
cout<<"queue kosong";
return -1;
}
}
Program removeFirst
void removeFirst(){
TNode *hapus;
if (isEmpty()==0){
if(head!=tail){
hapus = head;
head = head->next;
delete hapus;
} else {
head=tail=NULL;
}
cout<<"terhapus\n";
} else cout<<"Masih kosong\n";
}
(6) Operasi Enqueue
• Enqueue adalah proses penambahan
element pada queue.
• Ketika enqueue terjadi, element pada queue
akan bertambah 1.
• Posisi pointer rear akan bergeser menunjuk
pada element baru yang ditambahkan.
– Pada linked list : rear akan menunjuk ke node
baru yang ditunjuk oleh tail.
(6) Operasi
Enqueue...........(lanjutan)
• Langkah-langkah :
1. Penambahan element baru pada bagian
belakang queue.
2. Perubahan posisi rear.
Program Enqueue (Linked List)
void enqueue(int baru){
addLast(baru);
rear=tail;
front=head;
}
Program addLast
void addLast(int databaru){
TNode *baru,*bantu;
baru = new TNode;
baru->data = databaru;
baru->next = NULL;
if(isEmpty()){
head=baru;
tail=baru;
tail->next = NULL;
}
else {
tail->next = baru;
tail=baru;
}
cout<<"Data masuk\n";
}
(7) Operasi peek
• Peek pada queue adalah proses
pengaksesan element yang ditunjuk oleh
front (yaitu element yang pertama kali
ditambahkan).
• Operasi ini berbeda dengan enqueue
karena tidak disertai dengan penghapusan
data yang ada hanya pengaksesan
(pengembalian data saja).
Program Peek (Linked List)
int peekQueue(){
return front->data;
}
Contoh Penerapan Queue
• mailbox dalam komunikasi antar proses
• simulasi dan modeling (misalnya
simulasi sistem pengendali lalu lintas
udara) dalam memprediksi performansi
• Waiting Line pada Sistem Operasi