Struktur Data: Julio Adisantoso Departemen Ilmu Komputer IPB
Struktur Data: Julio Adisantoso Departemen Ilmu Komputer IPB
Priority Queue
STRUKTUR DATA
JULIO ADISANTOSO
Departemen Ilmu Komputer IPB
QUEUE
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).
Sifat Queue
Implementasi Queue
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();
};
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;
}
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 back()
int Queue::back() {
if (empty()) {cout << "Queue is empty\n"; return -1;}
else return Rear->value;
}
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
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;
}
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
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;
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;
}
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