Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ ใช้งาน Priority Queue

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