#include <Arduino.h>

// Khai báo cấu trúc cho phần tử trong hàng đợi
struct QueueElement {
    char data[20]; // Chuỗi có tối đa 20 ký tự
};

// Khai báo cấu trúc cho hàng đợi
struct Queue {
    QueueElement elements[6]; // Hàng đợi chứa tối đa 6 phần tử
    int front;
    int rear;
};

// Khởi tạo hàng đợi
void initQueue(Queue* q) {
    q->front = 0;
    q->rear = -1;
}

// Kiểm tra hàng đợi có đầy không
bool isQueueFull(Queue* q) {
    return (q->rear == 5);
}

// Thêm phần tử vào hàng đợi
void enqueue(Queue* q, const char* str) {
    if (isQueueFull(q)) {
        Serial.println("Queue is full. Cannot enqueue.");
        return;
    }
    q->rear++;
    strcpy(q->elements[q->rear].data, str);
}

// In nội dung của hàng đợi
void printQueue(Queue* q) {
    for (int i = q->front; i <= q->rear; i++) {
        Serial.print("Nhận chuỗi: ");
        Serial.println(q->elements[i].data);
        Serial.print("Số phần tử có thể đọc: ");
        Serial.println(q->rear - i);
        Serial.print("Không gian khả dụng còn lại: ");
        Serial.println(6 - (q->rear - i));
        Serial.println();
    }
}

void setup() {
    Serial.begin(9600);
    Queue queue;
    initQueue(&queue);

    enqueue(&queue, "CT05-Hello");
    enqueue(&queue, "DT04-Hi");
    enqueue(&queue, "AT17-Welcome");

    printQueue(&queue);
}

void loop() {
    // Không cần thực hiện gì trong vòng lặp loop
}