#include<stdio.h> #include<stdlib.h>

typedef struct { int *data; // 数据数组指针 int front; // 队头指针 int rear; // 队尾指针 int size; // 队列大小 } CircularQueue;

// 初始化循环队列 void initQueue(CircularQueue *queue, int size) { queue->data = (int *)malloc(sizeof(int) * size); queue->front = 0; queue->rear = 0; queue->size = size; }

// 判断队列是否为空 int isEmpty(CircularQueue *queue) { return queue->front == queue->rear; }

// 判断队列是否已满 int isFull(CircularQueue *queue) { return (queue->rear + 1) % queue->size == queue->front; }

// 入队 void enqueue(CircularQueue *queue, int item) { if (isFull(queue)) { printf("Queue is full.\n"); return; } queue->data[queue->rear] = item; queue->rear = (queue->rear + 1) % queue->size; }

// 出队 int dequeue(CircularQueue *queue) { if (isEmpty(queue)) { printf("Queue is empty.\n"); return -1; } int item = queue->data[queue->front]; queue->front = (queue->front + 1) % queue->size; return item; }

// 打印队列元素 void printQueue(CircularQueue *queue) { if (isEmpty(queue)) { printf("Queue is empty.\n"); return; } int i = queue->front; while (i != queue->rear) { printf("%d ", queue->data[i]); i = (i + 1) % queue->size; } printf("\n"); }

// 测试 int main() { CircularQueue queue; initQueue(&queue, 5);

enqueue(&queue, 1); enqueue(&queue, 2); enqueue(&queue, 3); enqueue(&queue, 4); enqueue(&queue, 5);

printQueue(&queue);  // 输出:1 2 3 4 5

dequeue(&queue); dequeue(&queue);

printQueue(&queue);  // 输出:3 4 5

enqueue(&queue, 6); enqueue(&queue, 7);

printQueue(&queue);  // 输出:3 4 5 6 7

return 0;

}

这个简单的循环队列实现了初始化队列、判断队列是否为空、判断队列是否已满、入队、出队和打印队列元素的基本操作。在测试部分,我们先入队5个元素,然后依次出队2个元素,并再次入队2个元素,最后打印队列元素,可以看到队列的操作是正确的。

C语言实现简单循环队列:代码示例及详解

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

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