Transcript Slide 1

Struktur Data
Queue
Sandy dan Erick
Topik Bahasan
•
•
•
•
•
Queue
Cara Kerja Queue
Kelemahan Queue (original)
Varian Queue
Aplikasi Queue
Queue
Rear / Tail
Head / Front
0
1
2
3
4
5
6
7
Prinsip Kerja:
1. FIFO (First In First Out)
2. Menggunakan analogi sistem antrian
3. Bagian yang telah terpakai, tidak dapat digunakan lagi
Cara Kerja Queue (INSERT)
Head / Front
INSERT : 5
Rear / Tail
INSERT : 8
INSERT : 3
-1
5
8
3
0
1
2
Masukkan
Masukkan
nilainya
Masukkan
nilainyanilainya
Tail + 1 Tail + 1 Tail + 1
Proses INSERT:
1. Tambahkan index Tail
2. Geser Tail ke index yang baru
3. Masukkan nilainya
Cara Kerja Queue (DELETE)
Head / Front
DELETE
Rear / Tail
DELETE
DELETE
5
8
3
4
9
7
0
1
2
3
4
5
Ambil isiAmbil isiAmbil isi
Head + 1HeadHead
+ 1HeadHead
+ 1 Head
Proses DELETE:
1. Ambil isi yang ditunjuk Head
2. Tambahkan index Head
3. 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
Tail
8
5
6
3
4
7
Head
Queue vs Stack
Queue
1. FIFO
(First In First Out)
2. INSERT / DELETE
3. 2 index (head, tail)
Stack
1. LIFO
(Last In First Out)
2. PUSH/ POP
3. 1 index (top)
Varian Queue
1. Queue (Original)
3. Priority Queue
Rear / Tail
Head / Front
0
1
2
3
4
5
6
Rear / Tail
Head / Front
7
0
2. Circular Queue
1
2
3
4
5
8
5
6
3
Rear / Tail
Head
0
4
7
7
4. Deque
Head / Front
Tail
6
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.
Out
Head / Front
0
1
2
3
Rear / Tail
4
5
6
7
Contoh:
Head / Front
Rear / Tail
Out
3
9
5
11
8
2
7
4
0
1
2
3
4
5
6
7
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
Rear / Tail
Head / Front
0
1
2
3
4
5
6
7
Contoh:
Rear / Tail
Head / Front
2
3
0
1
4
2
5
3
7
8
9
11
4
5
6
7
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)