Priority Queue ไม่ปฏิบัติตาม FIFO แต่มี Priority (ความสำคัญ) สำหรับแต่ละ Element
- Item Priority สูงกว่า ถูกประมวลผลก่อน
- Item Priority เท่ากัน ใช้ FIFO
โครงสร้างคลาส Priority_Queue
insert(int item, int priority)− ใส่ตาม Priority (น้อย = สำคัญกว่า)del()− ลบ Front (Priority สูงสุด)show()− แสดง Queue
ตัวอย่างโค้ดสมบูรณ์
#include <iostream>
#include <cstdlib>
using namespace std;
struct Node {
int priority;
int info;
Node* next;
};
class Priority_Queue {
Node* front;
public:
Priority_Queue() : front(nullptr) {}
void insert(int item, int priority) {
Node* temp = new Node{item, priority, nullptr};
if (!front || priority < front->priority) {
temp->next = front;
front = temp;
} else {
Node* q = front;
while (q->next && q->next->priority <= priority)
q = q->next;
temp->next = q->next;
q->next = temp;
}
}
void del() {
if (!front) {
cout << "Queue Underflow\n";
return;
}
Node* temp = front;
cout << "Deleted item is: " << temp->info << endl;
front = front->next;
delete temp;
}
void show() {
if (!front) {
cout << "Queue is empty\n";
return;
}
cout << "Queue is :\nPriority Item\n";
for (Node* ptr = front; ptr; ptr = ptr->next)
cout << ptr->priority << " " << ptr->info << endl;
}
};
int main() {
Priority_Queue pq;
int choice, item, priority;
do {
cout << "1.Insert\n2.Delete\n3.Display\n4.Exit\nEnter choice: ";
cin >> choice;
switch (choice) {
case 1:
cout << "Item value: "; cin >> item;
cout << "Priority: "; cin >> priority;
pq.insert(item, priority);
break;
case 2: pq.del(); break;
case 3: pq.show(); break;
case 4: break;
default: cout << "Wrong choice\n";
}
} while (choice != 4);
return 0;
}
ผลลัพธ์ตัวอย่าง
1.Insert
2.Delete
3.Display
4.Exit
Enter choice: 1
Item value: 7
Priority: 2
...
Enter choice: 3
Queue is :
Priority Item
1 6
2 7
3 3
3 4
ใน C++ STL
#include <queue>
#include <iostream>
std::priority_queue<int> pq; // Max-heap (default)
pq.push(10); pq.push(30); pq.push(20);
while (!pq.empty()) {
cout << pq.top() << " "; // 30 20 10
pq.pop();
}
ใช้ std::priority_queue จาก STL สำหรับ Production Code