Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Cài đặt hàng đợi (Queue) bằng mảng trong C++

Hàng đợi (Queue) tuân theo nguyên tắc FIFO (First In First Out). Cài đặt bằng mảng cần 2 biến: front (đầu) và rear (cuối).

Các thao tác cơ bản

  • Enqueue: Thêm phần tử tại rear, tăng rear. Tràn khi rear == n.
  • Dequeue: Xóa phần tử tại front, dịch các phần tử còn lại sang trái, giảm rear. Rỗng khi front == rear.
  • Front: Lấy giá trị tại front.
  • Display: Duyệt từ front đến rear-1.

Ví dụ minh họa

#include <bits/stdc++.h>
using namespace std;

struct Queue {
    int front, rear, capacity;
    int* queue;
    
    Queue(int c) {
        front = rear = 0;
        capacity = c;
        queue = new int[c];
    }
    ~Queue() { delete[] queue; }
    
    void Enqueue(int data) {
        if (capacity == rear) {
            cout << "Hang doi day\n";
            return;
        }
        queue[rear++] = data;
    }
    
    void Dequeue() {
        if (front == rear) {
            cout << "Hang doi rong\n";
            return;
        }
        for (int i = 0; i < rear - 1; i++)
            queue[i] = queue[i + 1];
        rear--;
    }
    
    void Display() {
        if (front == rear) {
            cout << "Hang doi rong\n";
            return;
        }
        for (int i = front; i < rear; i++)
            cout << queue[i] << " <-- ";
        cout << endl;
    }
    
    void Front() {
        if (front == rear) {
            cout << "Hang doi rong\n";
            return;
        }
        cout << "Phan tu dau: " << queue[front] << endl;
    }
};

int main() {
    Queue q(4);
    q.Display();
    q.Enqueue(12); q.Enqueue(89); q.Enqueue(65); q.Enqueue(34);
    q.Display();
    q.Enqueue(92); // Day
    q.Display();
    q.Dequeue(); q.Dequeue();
    q.Display();
    q.Front();
    return 0;
}

Kết quả

Hang doi rong
12 <-- 89 <-- 65 <-- 34 <--
Hang doi day
12 <-- 89 <-- 65 <-- 34 <--
65 <-- 34 <--
Phan tu dau: 65