写一个简单的循环队列 c语言
下面是一个简单的循环队列的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个元素,最后打印队列元素,可以看到队列的操作是正确的
原文地址: https://www.cveoy.top/t/topic/h3wr 著作权归作者所有。请勿转载和采集!