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

โปรแกรม C++ ใช้ Linked List สร้าง Queue (คิว)

Queue (คิว) เป็นโครงสร้างข้อมูลแบบ FIFO (First In, First Out) - ข้อมูลที่เข้าไปก่อนจะออกก่อน

โครงสร้าง Node สำหรับ Linked List Queue

struct Node {
    int data;
    Node* next;
};

Node* front = nullptr;  // หน้าคิว
Node* rear = nullptr;   // ท้ายคิว

โค้ดโปรแกรม Queue ด้วย Linked List

#include <iostream>
using namespace std;

struct Node {
    int data;
    Node* next;
};

Node* front = nullptr;
Node* rear = nullptr;

void enqueue(int val) {
    Node* newNode = new Node();
    newNode->data = val;
    newNode->next = nullptr;
    
    if (rear == nullptr) {      // คิวว่าง
        front = rear = newNode;
    } else {
        rear->next = newNode;   // เพิ่มท้ายคิว
        rear = newNode;
    }
    cout << val << " enqueued." << endl;
}

void dequeue() {
    if (front == nullptr) {
        cout << "Queue Underflow" << endl;
        return;
    }
    
    Node* temp = front;
    cout << "Dequeued: " << front->data << endl;
    front = front->next;
    
    if (front == nullptr)       // คิวว่างหลังลบ
        rear = nullptr;
    
    delete temp;                // ปล่อยหน่วยความจำ
}

void display() {
    if (front == nullptr) {
        cout << "Queue is empty" << endl;
        return;
    }
    
    Node* temp = front;
    cout << "Queue: ";
    while (temp != nullptr) {
        cout << temp->data << " ";
        temp = temp->next;
    }
    cout << endl;
}

int main() {
    int choice, val;
    
    do {
        cout << "\n1. Enqueue\n2. Dequeue\n3. Display\n4. Exit\nChoice: ";
        cin >> choice;
        
        switch (choice) {
            case 1:
                cout << "Enter value: ";
                cin >> val;
                enqueue(val);
                break;
            case 2:
                dequeue();
                break;
            case 3:
                display();
                break;
            case 4:
                cout << "Exiting..." << endl;
                break;
            default:
                cout << "Invalid choice!" << endl;
        }
    } while (choice != 4);
    
    // ทำความสะอาดหน่วยความจำที่เหลือ
    while (front != nullptr) dequeue();
    
    return 0;
}

ผลลัพธ์ตัวอย่าง

1. Enqueue
2. Dequeue
3. Display
4. Exit
Choice: 1
Enter value: 10
10 enqueued.
Choice: 1
Enter value: 20
20 enqueued.
Choice: 3
Queue: 10 20
Choice: 2
Dequeued: 10
Choice: 3
Queue: 20
Choice: 4
Exiting...

การทำงานของแต่ละฟังก์ชัน

ฟังก์ชัน หน้าที่ Time Complexity
enqueue()เพิ่มข้อมูลท้ายคิวO(1)
dequeue()ลบข้อมูลหน้าคิวO(1)
display()แสดงข้อมูลทั้งคิวO(n)

ข้อดีของ Linked List Queue

  • ขนาดไดนามิก - ไม่ต้องกำหนดขนาดล่วงหน้า
  • ไม่มีปัญหา Overflow (จนกว่าหน่วยความจำจะเต็ม)
  • ใช้หน่วยความจำประหยัด (จองเฉพาะที่ใช้)

ข้อควรระวัง

  • ต้อง delete node ที่ลบออก เพื่อป้องกัน Memory Leak
  • ใช้ nullptr แทน NULL (C++11 ขึ้นไป)
  • ควรทำ destructor ทำความสะอาดเมื่อจบโปรแกรม