Struktur Data Queue Sandy dan Erick
Topik Bahasan Queue Cara Kerja Queue Kelemahan Queue (original) Varian Queue Aplikasi Queue
Queue Head / Front Rear / Tail 1 2 3 4 5 6 7 Prinsip Kerja: 1 2 3 4 5 6 7 Prinsip Kerja: FIFO (First In First Out) Menggunakan analogi sistem antrian Bagian yang telah terpakai, tidak dapat digunakan lagi
Cara Kerja Queue (INSERT) Head / Front INSERT : 5 Rear / Tail INSERT : 8 INSERT : 3 5 8 3 Masukkan nilainya Masukkan nilainya Masukkan nilainya Tail + 1 Tail + 1 Tail + 1 -1 1 2 Proses INSERT: Tambahkan index Tail Geser Tail ke index yang baru Masukkan nilainya
Cara Kerja Queue (DELETE) Head / Front DELETE Rear / Tail DELETE DELETE Ambil isi Head 5 Ambil isi Head 8 Ambil isi Head 3 4 9 7 Head + 1 Head + 1 Head + 1 1 2 3 4 5 Proses DELETE: Ambil isi yang ditunjuk Head Tambahkan index Head Geser index Head ke index baru
Kekurangan Queue Terdapat alokasi memory yang terbuang percuma Sering juga disebut dengan istilah Wasting Area / Die Area Oleh karena itu dikembangkanlah Circular Queue Head Tail 3 5 7 4 6 8
Queue vs Stack Queue FIFO (First In First Out) INSERT / DELETE 2 index (head, tail) Stack LIFO (Last In First Out) PUSH/ POP 1 index (top)
Varian Queue Queue (Original) Priority Queue Circular Queue 4. Deque Head / Front Rear / Tail 1 2 3 4 5 6 7 Head / Front Rear / Tail 1 2 3 4 5 6 7 Head Tail 3 5 7 4 6 8 Head / Front Rear / Tail 1 2 3 4 5 6 7
Priority Queue Bentuk seperti Queue Original Setiap node memiliki priority Delete akan dilakukan pada node yang memiliki prioritas tertinggi Insert tetap di Tail, tetapi Delete dapat di tengah-tengah
Implementasi Priority Queue (1) Dengan menggunakan pointer / index Out Untuk menunjuk node dengan prioritas tertinggi Hingga saat akan dilakukan DELETE, yang ditunjuk oleh Out lah yang lebih dahulu keluar. Head / Front Rear / Tail 1 2 3 4 5 6 7 Out
Contoh: Head / Front Rear / Tail 1 2 3 4 5 6 7 Out 8 9 11 1 2 3 4 5 6 7 Out 8 9 11 Insert tetap di Tail Out akan selalu (berpindah-pindah) menunjuk node yang prioritasnya paling besar Saat DELETE, yang diambil adalah node yang ditunjuk oleh Out
Implementasi Priority Queue (2) Dengan mengurutkan isi Queue terlebih dahulu Sehingga node dengan prioritas terbesar selalu ditunjuk oleh Head Hingga saat akan dilakukan DELETE, yang ditunjuk oleh Head lah yang lebih dahulu keluar Head / Front Rear / Tail 1 2 3 4 5 6 7
Contoh: Head / Front Rear / Tail 1 2 3 4 5 6 7 8 9 11 1 2 3 4 5 6 7 8 9 11 Insert tetap di Tail Setiap selesai INSERT, isi Queue akan diurutkan kembali Hingga priority terbesar selalu ada pada Head Akibatnya DELETE akan tetap selalu dari Head INGAT:Sort tidak harus selalu dari BESAR – KECIL atau sebaliknya. Sort dilakukan sesuai kebutuhan.
Deque Deque (double-ended queue) adalah Queue dimana insert dan delete dapat dilakukan pada kedua ujungnya. Merupakan penggabungan antara konsep Stack dan Queue
Aplikasi dengan Queue Simulasi antrian di supermarket Simulasi penjualan stok barang barang lama (yang sudah masuk gudang terlebih dahulu), harus yang pertama dijual untuk menghindari tanggal kadarluasa SSSS (State Space Solution Search) metode pencarian langkah-langkah untuk menyelesaikan masalah misal: Misionaris dan Kanibal
Queue in C# //deklarasi Queue<int> myqueue = new Queue<int>(); //INSERT myqueue.Enqueue(6); //DELETE int angka = queue.Dequeue();
Priority Queue in C# (1) C# .NET doesn’t have Priority Queue, but we can create it public class PriorityQueue <T > where T : IComparable <T > { // Implementation code here }
Priority Queue in C# (2) public class Employee : IComparable <Employee > { public string lastName; public double priority; public int CompareTo(Employee other) if (this.priority < other.priority) return -1; else if (this.priority > other.priority) return 1; else return 0; }
Deque C# doesn’t have Deque class, but we can create it too See Deque Implementation in C# by Leslie Sanford (2006)