Algoritma dan Struktur Data Praktikum 2 SKS Dosen: Muhammad Fachrie, M.Cs. Praktikum Alstrukdat - Pertemuan 4
Praktikum Alstrukdat - Pertemuan 4 QUEUE Queue (antrean) adalah salah satu metode pengorganisasian data di dalam sebuah program yang menggunakan pola FIFO (First In, First Out) Artinya, data yang pertama kali dimasukkan ke dalam program, akan dikeluarkan pertama kali. Ibarat sebuah antrean di loket bus, orang yang pertama kali antre akan dilayani lebih dahulu, sedangkan yang terakhir kali antre akan dilayani terakhir kali. Praktikum Alstrukdat - Pertemuan 4
Praktikum Alstrukdat - Pertemuan 4 QUEUE OUT IN Praktikum Alstrukdat - Pertemuan 4
Praktikum Alstrukdat - Pertemuan 4 Elemen QUEUE Sebuah queue (antrean) memiliki elemen sebagai berikut: Head, yakni elemen yang berada pada urutan paling depan (pertama) Tail, yakni elemen yang berada pada urutan paling belakang Praktikum Alstrukdat - Pertemuan 4
Ilustasi Queue – Input Data Empty Queue Empty Queue Head dan Tail posisinya sama Head 1 2 3 4 5 6 Tail Praktikum Alstrukdat - Pertemuan 4
Ilustasi Queue – Input Data Enqueue Enqueue Pengisian satu data ke queue, tail++ Head 5 1 2 3 4 5 6 Tail Praktikum Alstrukdat - Pertemuan 4
Ilustasi Queue – Input Data Enqueue Enqueue Pengisian satu data ke queue, tail++ Head 5 10 1 2 3 4 5 6 Tail Praktikum Alstrukdat - Pertemuan 4
Ilustasi Queue – Input Data Enqueue Enqueue Pengisian satu data ke queue, tail++ Head 5 10 -5 1 2 3 4 5 6 Tail Praktikum Alstrukdat - Pertemuan 4
Ilustasi Queue – Input Data Enqueue Enqueue Pengisian satu data ke queue, tail++ Head 5 10 -5 9 1 2 3 4 5 6 Tail Praktikum Alstrukdat - Pertemuan 4
Ilustasi Queue – Output Data Dequeue Dequeue Mengeluarkan data pada head, head++ Head 10 -5 9 5 1 2 3 4 5 6 Tail Praktikum Alstrukdat - Pertemuan 4
Ilustasi Queue – Output Data Dequeue Dequeue Mengeluarkan data pada head, head++ Head -5 9 5 10 1 2 3 4 5 6 Tail Praktikum Alstrukdat - Pertemuan 4
Ilustasi Queue – Circular Queue Jika Tail berada pada akhir array sedangkan awal array kosong, maka Tail bias pindah ke indeks awal array. Head -5 9 12 6 1 2 3 4 5 6 Tail Praktikum Alstrukdat - Pertemuan 4
Ilustasi Queue – Circular Queue Jika Tail berada pada akhir array sedangkan awal array kosong, maka Tail bias pindah ke indeks awal array. Head -5 9 12 6 10 1 2 3 4 5 6 Tail Praktikum Alstrukdat - Pertemuan 4
Ilustasi Queue – Circular Queue Full Queue Full Queue Jika tail berada di depan head dan selisih antara head dan tail = 1 atau selisih head dan tail = -(N-1) Head -12 -5 9 12 6 10 1 2 3 4 5 6 Tail Praktikum Alstrukdat - Pertemuan 4
Praktikum Alstrukdat - Pertemuan 4 Circular Queue Circular queue membutuhkan satu slot kosong antara head dan tail sebagai batas akhir atau penanda bahwa queue sudah penuh. Head -12 -5 9 12 6 10 1 2 3 4 5 6 Tail Praktikum Alstrukdat - Pertemuan 4
Ilustasi Queue – Circular Queue Full Queue Full Queue Jika tail berada di depan head dan selisih antara head dan tail = 1 atau selisih head dan tail = -(N-1) Head -12 8 -5 9 12 6 1 2 3 4 5 6 Tail Praktikum Alstrukdat - Pertemuan 4
Praktikum Alstrukdat - Pertemuan 4 Kode Program Queue Beberapa prosedur/ fungsi di bawah ini diperlukan untuk membangun sebuah queue: bool IsEmpty bool IsFull void enqueue int dequeue Praktikum Alstrukdat - Pertemuan 4
Praktikum Alstrukdat - Pertemuan 4 Fungsi IsEmpty IsEmpty merupakan fungsi yang bertipe boolean (logika “true” or “false”). Fungsinya adalah untuk mengecek apakah suatu queue kosong atau tidak. Jika queue kosong, maka fungsi akan mengembalikan nilai true, dan jika sebaliknya, maka fungsi akan mengembalikan nilai false. Queue dikatakan kosong jika head = tail. Praktikum Alstrukdat - Pertemuan 4
Praktikum Alstrukdat - Pertemuan 4 Fungsi IsFull IsFull merupakan fungsi yang juga bertipe boolean (logika “true” or “false”). Fungsinya adalah untuk mengecek apakah suatu queue penuh atau tidak. Jika queue penuh, maka fungsi akan mengembalikan nilai true, dan jika sebaliknya, maka fungsi akan mengembalikan nilai false. Queue dikatakan penuh jika head - tail = 1 Praktikum Alstrukdat - Pertemuan 4
Praktikum Alstrukdat - Pertemuan 4 Fungsi enqueue enqueue merupakan fungsi yang bertipe void (atau tipe lainnya, tergantung kasus). Fungsinya adalah untuk menambah/ memasukkan data ke dalam queue. Fungsi enqueue hanya bisa mengisi data ke dalam queue jika queue tersebut tidak penuh. Setiap kali melakukan enqueue, maka nilai tail bertambah 1 (tail++). Praktikum Alstrukdat - Pertemuan 4
Praktikum Alstrukdat - Pertemuan 4 Fungsi dequeue dequeue merupakan fungsi yang bertipe integer (atau tipe lainnya, tergantung kasus). Fungsinya adalah untuk mengeluarkan/ membaca data yang ada pada head di dalam queue. Fungsi dequeue hanya bisa mengeluarkan/ membaca data pada head jika queue tersebut tidak kosong. Setiap kali melakukan enqueue, maka nilai tail bertambah 1 (head++). Praktikum Alstrukdat - Pertemuan 4
Praktikum Alstrukdat - Pertemuan 4 Inisialisasi Queue Inisialiasi queue sebaiknya menggunakan record agar memudahkan programmer jika akan membuat lebih dari satu queue dalam satu program. Inisialisasi queue sebaiknya diletakkan di luar int main() (sebagai variabel global) agar dapat diakses oleh semua fungsi. int const MAX = 10; //membuat record queue struct DataQueue{ int data[MAX+1]; int head, tail; }; DataQueue queue1; //membuat variabel queue1 bertipe DataQueue queue1.head = 0; //head dan tail diset = 0 queue1.tail = 0; Praktikum Alstrukdat - Pertemuan 4
Praktikum Alstrukdat - Pertemuan 4 Kode Program – IsEmpty Jika queue kosong, maka fungsi akan mengembalikan nilai true, dan jika sebaliknya, maka fungsi akan mengembalikan nilai false. Queue dikatakan kosong jika head = tail. bool IsEmpty(DataQueue q){ if (q.head == q.tail) return true; else return false; } Praktikum Alstrukdat - Pertemuan 4
Praktikum Alstrukdat - Pertemuan 4 Kode Program – IsFull Jika queue penuh, maka fungsi akan mengembalikan nilai true, dan jika sebaliknya, maka fungsi akan mengembalikan nilai false. Queue dikatakan penuh jika head - tail = 1 ATAU head – tail = -(N-1) bool IsFull(DataQueue q){ if (((q.head-q.tail) == 1) || ((q.head-q.tail) == -(MAX-1))) return true; else return false; } Praktikum Alstrukdat - Pertemuan 4
Praktikum Alstrukdat - Pertemuan 4 Kode Program – enqueue void enqueue(DataQueue &q, int input){ if (IsFull(q)){ cout<<"Queue is Full!"<<endl; } else{ q.data[q.tail] = input; q.tail++; Praktikum Alstrukdat - Pertemuan 4
Praktikum Alstrukdat - Pertemuan 4 Kode Program – dequeue int dequeue(DataQueue &q){ int temp = 0; if (IsEmpty(q)){ cout<<"Queue kosong!"<<endl; } else{ temp = q.data[q.head]; q.head++; return temp; Praktikum Alstrukdat - Pertemuan 4