下面是一个简单的循环队列的C语言实现:

#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语言

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

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