以下是循环队列的初始化、入队、出队、取队头元素、判非空的源代码:

#define MAX_SIZE 100
typedef struct {
    int data[MAX_SIZE];
    int front, rear;
} CircularQueue;

// 初始化队列
void initQueue(CircularQueue *q) {
    q->front = q->rear = 0;
}

// 入队
void enqueue(CircularQueue *q, int x) {
    // 队列已满
    if ((q->rear + 1) % MAX_SIZE == q->front) {
        printf("Queue is full.\n");
        return;
    }
    q->data[q->rear] = x;
    q->rear = (q->rear + 1) % MAX_SIZE;
}

// 出队
void dequeue(CircularQueue *q) {
    // 队列为空
    if (q->front == q->rear) {
        printf("Queue is empty.\n");
        return;
    }
    q->front = (q->front + 1) % MAX_SIZE;
}

// 取队头元素
int front(CircularQueue *q) {
    // 队列为空
    if (q->front == q->rear) {
        printf("Queue is empty.\n");
        return -1;
    }
    return q->data[q->front];
}

// 判队列非空
int isEmpty(CircularQueue *q) {
    return q->front == q->rear;
}

其中,MAX_SIZE 定义了队列的最大长度,data 数组存储队列元素,frontrear 分别表示队头和队尾在数组中的下标。循环队列的关键在于使用取模运算来实现队尾指针的循环

循环队列的初始化、入队、出队、取队头元素、判非空的源代码

原文地址: https://www.cveoy.top/t/topic/gA1p 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录