循环队列是一种基于数组的队列实现方式,其特点是队列的两端相连成环状。这使得在队列头尾移动时无需搬移元素,只需要调整队头和队尾指针即可。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;
- }
|