循环队列是一种基于数组的队列实现方式,其特点是队列的两端相连成环状。这使得在队列头尾移动时无需搬移元素,只需要调整队头和队尾指针即可。C 语言中可以通过数组和指针来实现循环队列。
以下是一个简单的循环队列的实现示例:
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10
// 定义循环队列结构体
typedef struct {
int *array; // 存储队列元素的数组
int front; // 队头指针,指向队首元素
int rear; // 队尾指针,指向队尾元素的下一个位置
int capacity; // 队列的最大容量
} CircularQueue;
// 初始化循环队列
CircularQueue* createQueue() {
CircularQueue* queue = (CircularQueue*)malloc(sizeof(CircularQueue));
queue->array = (int*)malloc(MAX_SIZE * sizeof(int));
queue->front = 0;
queue->rear = 0;
queue->capacity = MAX_SIZE;
return queue;
}
// 入队操作
void enqueue(CircularQueue* queue, int value) {
// 检查队列是否已满
if ((queue->rear + 1) % queue->capacity == queue->front) {
printf("Queue is full. Enqueue operation failed.\n");
return;
}
queue->array[queue->rear] = value;
queue->rear = (queue->rear + 1) % queue->capacity;
}
// 出队操作
int dequeue(CircularQueue* queue) {
// 检查队列是否为空
if (queue->front == queue->rear) {
printf("Queue is empty. Dequeue operation failed.\n");
return -1; // 返回一个特殊值表示出错
}
int value = queue->array[queue->front];
queue->front = (queue->front + 1) % queue->capacity;
return value;
}
// 打印队列元素
void printQueue(CircularQueue* queue) {
printf("Queue: ");
int i = queue->front;
while (i != queue->rear) {
printf("%d ", queue->array[i]);
i = (i + 1) % queue->capacity;
}
printf("\n");
}
int main() {
CircularQueue* queue = createQueue();
enqueue(queue, 10);
enqueue(queue, 20);
enqueue(queue, 30);
printQueue(queue);
int dequeued = dequeue(queue);
printf("Dequeued element: %d\n", dequeued);
printQueue(queue);
free(queue->array);
free(queue);
return 0;
}
|