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