Anda di halaman 1dari 19

Queue

Priority Queue

STRUKTUR DATA

JULIO ADISANTOSO
Departemen Ilmu Komputer IPB

Pertemuan 6 : 7 Juli 2015

JULIO ADISANTOSO Departemen Ilmu Komputer IPB STRUKTUR DATA


Queue Pengertian
Priority Queue Implementasi

QUEUE

JULIO ADISANTOSO Departemen Ilmu Komputer IPB STRUKTUR DATA


Queue Pengertian
Priority Queue Implementasi

Queue
Beberapa pengertian Queue pada Struktur Data:
antrian dari objek
deretan objek dimana penambahan hanya bisa dilakukan pada
suatu ujung (disebut sisi belakang atau rear), dan penghapusan
dilakukan lewat ujung yang lain (disebut dengan sisi depan atau
front).

JULIO ADISANTOSO Departemen Ilmu Komputer IPB STRUKTUR DATA


Queue Pengertian
Priority Queue Implementasi

Sifat Queue

FIFO : First In First Out


Objek yang pertama masuk ke dalam Queue akan menjadi yang
pertama keluar dari Queue
Beberapa contoh penggunaan Queue:
Print spooler
Beberapa algoritme Search, misal BFS

JULIO ADISANTOSO Departemen Ilmu Komputer IPB STRUKTUR DATA


Queue Pengertian
Priority Queue Implementasi

Operasi dasar Queue ⇒ Spesifikasi PRIMITIF

push(objek) : memasukkan objek ke dalam Queue


pop() : menghapus objek dari Queue
front() : akses objek front
back() : akses objek rear
empty() : memeriksa Queue kosong
size() : ukuran Queue
full() : memeriksa Queue penuh (in array)

JULIO ADISANTOSO Departemen Ilmu Komputer IPB STRUKTUR DATA


Queue Pengertian
Priority Queue Implementasi

Implementasi Queue

Queue dapat diimplementasikan dengan menggunakan tipe data


apa pun, asalkan memenuhi sifat dan kaidah Queue, yaitu FIFO.
Contoh implementasi:
Array
Linked List
Tiap implementasi memiliki plus dan minus. Apa saja?

JULIO ADISANTOSO Departemen Ilmu Komputer IPB STRUKTUR DATA


Queue Pengertian
Priority Queue Implementasi

Queue Menggunakan DLL (p06a.cpp)

typedef struct node {


int value;
struct node *prev, *next;
} NODE;

class Queue {
NODE *Front, *Rear;
public:
Queue() { Front=NULL; Rear=NULL; }
bool empty() { return (Front==NULL); }
void push(int nilai);
int front();
int back();
void pop();
};

JULIO ADISANTOSO Departemen Ilmu Komputer IPB STRUKTUR DATA


Queue Pengertian
Priority Queue Implementasi

Queue Menggunakan DLL

Contoh Driver
int main() {
Queue antrian;
antrian.push(10); antrian.push(20);
antrian.push(15); antrian.push(7);
cout << "Queue awal:\n";
cout << antrian;
cout << "\nFront: " << antrian.front() << endl;
cout << "\nRear: " << antrian.back() << endl;
antrian.pop(); antrian.pop();
cout << "\nQueue akhir:\n";
cout << antrian;
return 0;
}

JULIO ADISANTOSO Departemen Ilmu Komputer IPB STRUKTUR DATA


Queue Pengertian
Priority Queue Implementasi

Queue Menggunakan DLL

Fungsi push(nilai)
void Queue::push(int nilai) {
NODE *temp=new(NODE); temp->value=nilai;
temp->prev=NULL; temp->next=NULL;
if (empty()) { Front=temp; Rear=temp; }
else {Rear->next=temp; temp->prev=Rear; Rear=temp;}
}

Fungsi pop() – tidak mengambil nilai


void Queue::pop() {
if (empty()) cout << "Queue is empty\n";
else Front=Front->next;
}

JULIO ADISANTOSO Departemen Ilmu Komputer IPB STRUKTUR DATA


Queue Pengertian
Priority Queue Implementasi

Queue Menggunakan DLL


Fungsi front() dan back() hanya meng-copy nilai dari Queue.
Fungsi front()
int Queue::front() {
if (empty()) {cout << "Queue is empty\n"; return -1;}
else return Front->value;
}

Fungsi back()
int Queue::back() {
if (empty()) {cout << "Queue is empty\n"; return -1;}
else return Rear->value;
}

JULIO ADISANTOSO Departemen Ilmu Komputer IPB STRUKTUR DATA


Queue Pengertian
Priority Queue Implementasi

Queue Menggunakan Array


Dalam driver terdapat pernyataan cout<<antrian; yang
menimbulkan error. Kenapa? Oleh karena itu harus dibuat fungsi
friend yang meng-overload operator <<.
Fungsi operator<< : anggota private dari class Queue
friend ostream& operator<< (ostream &out, Queue q) {
if (q.empty()) out << "Stack is empty\n";
else {
for (NODE *ptr=q.Front; ptr!=NULL; ptr=ptr->next)
out << ptr->value << endl;
}
return out;
}

JULIO ADISANTOSO Departemen Ilmu Komputer IPB STRUKTUR DATA


Queue Pengertian
Priority Queue Implementasi

Queue Menggunakan STL queue (p06b.cpp)


Spesifikasi TYPE
#include <stack>
typedef queue<int> Queue;

Fungsi operator<<
ostream& operator<< (ostream &out, Queue q) {
if (q.empty()) out << "Stack is empty\n";
else {
while (!q.empty()) {
out << q.front() << endl;
q.pop();
}
}
return out;
}
JULIO ADISANTOSO Departemen Ilmu Komputer IPB STRUKTUR DATA
Queue
Priority Queue

Priority Queue (pq)

Queue ini tidak bersifat FIFO murni tetapi biasanya didasarkan


pada suatu prioritas tertentu.
Data paling atas adalah data dengan prioritas paling tinggi.
Contoh:
pq.push(30); pq.push(100); pq.push(25);
pq.push(40);

JULIO ADISANTOSO Departemen Ilmu Komputer IPB STRUKTUR DATA


Queue
Priority Queue

PQ Menggunakan DLL (p06c.cpp)


Fungsi push(nilai)
void Queue::push(int nilai) {
NODE *temp=new(NODE); temp->value=nilai;
temp->prev=NULL; temp->next=NULL;
if (empty()) { Front=temp; Rear=temp; }
else {
NODE *ptr=Front;
if (Front->value<nilai) { // push front }
else {
while (ptr!=NULL) {
if (ptr->value<nilai) break;
ptr=ptr->next; }
if (ptr==NULL) { // push back }
else { // insert before ptr }
}
}
} JULIO ADISANTOSO Departemen Ilmu Komputer IPB STRUKTUR DATA
Queue
Priority Queue

PQ Menggunakan STL priority queue (p06d.cpp)

Fungsi push(nilai)
#include <queue>
typedef priority_queue<int> Queue;
int main() {
Queue antrian;
antrian.push(30); antrian.push(100);
antrian.push(25); antrian.push(40);
cout << "Queue awal:\n";
cout << antrian;

antrian.pop(); antrian.pop();
cout << "\nQueue akhir:\n";
cout << antrian;
return 0;
}

JULIO ADISANTOSO Departemen Ilmu Komputer IPB STRUKTUR DATA


Queue
Priority Queue

Latihan (p06e.cpp)
Gunakan struktur priority queue untuk memasukkan data NIM,
gender, dan tinggi berikut. Priority berdasarkan nilai tinggi.

5
G64090120 1 165.4
G64090160 2 169.7
G64090140 1 170.2
G64090050 2 168.3
G65090025 1 167.9

JULIO ADISANTOSO Departemen Ilmu Komputer IPB STRUKTUR DATA


Queue
Priority Queue

Latihan (p06e.cpp)

Spesifikasi Type
#include <string>
#include <queue>
using namespace std;
struct record {
string nim;
int gender;
double tinggi;
};
typedef struct record Record;
typedef priority_queue<Record> PQ;

JULIO ADISANTOSO Departemen Ilmu Komputer IPB STRUKTUR DATA


Queue
Priority Queue

Latihan (p06e.cpp)
Karena queue memiliki prioritas yang ditunjukkan oleh nilai variabel
tinggi, maka harus dibuat operator overloading untuk tanda < secara
khusus.
Fungsi operator<
bool operator<(const Record a, const Record b)
{
return a.tinggi < b.tinggi;
}

JULIO ADISANTOSO Departemen Ilmu Komputer IPB STRUKTUR DATA


Queue
Priority Queue

Latihan (p06e.cpp)

Program Driver
int main() {
PQ antrian;
int n; cin >> n;
Record t;
while (n--) {
cin >> t.nim >> t.gender >> t.tinggi;
antrian.push(t);
}
cout << "PQ awal:\n";
cout << antrian;
return 0;
}
JULIO ADISANTOSO Departemen Ilmu Komputer IPB STRUKTUR DATA

Anda mungkin juga menyukai