如何用C语言实现顺序循环队列的数据结构和相关操作?
时间: 2024-11-03 20:23:42 浏览: 37
在C语言中,我们可以创建一个顺序循环队列的数据结构,通常会使用数组作为底层存储,并通过两个指针front和rear分别指向队首元素和队尾元素的下一个位置。以下是基本的实现步骤:
```c
typedef struct {
int *queue; // 队列元素的指针
int capacity; // 队列容量
int front; // 队头指针
int rear; // 队尾指针
} Queue;
// 初始化队列
Queue* create_queue(int size) {
Queue* q = malloc(sizeof(Queue));
q->queue = malloc(size * sizeof(int));
q->capacity = size;
q->front = -1;
q->rear = -1;
return q;
}
// 向队列添加元素 (如果队满则会形成循环)
void enqueue(Queue *q, int value) {
if ((q->rear + 1) % q->capacity == q->front) { // 队列已满
printf("Queue is full.\n");
} else {
q->rear = (q->rear + 1) % q->capacity; // 使用模运算保持循环
q->queue[q->rear] = value;
}
}
// 从队列取出元素 (如果队空则返回NULL)
int dequeue(Queue *q) {
if (q->front == -1) { // 队列为空
printf("Queue is empty.\n");
return NULL;
} else {
int value = q->queue[q->front];
q->front = (q->front + 1) % q->capacity; // 移动队头
return value;
}
}
// 判断队列是否为空
int is_empty(Queue *q) {
return q-1;
}
// 判断队列是否已满
int is_full(Queue *q) {
return (q->rear + 1) % q->capacity == q->front;
}
// 清空队列
void delete_queue(Queue *q) {
free(q->queue);
free(q);
}
```
阅读全文