请给我一个c语言,描述设置了count表示循环队列成员个数的进出队列的基本操作
时间: 2024-10-04 08:03:27 浏览: 31
在 C 语言中,我们可以创建一个使用动态内存分配的循环队列数据结构,其中 `count` 表示队列当前可以存储的元素个数。以下是基本的进出队列操作:
```c
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int *data;
int front; // 队头指针
int rear; // 队尾指针
int count; // 可存储元素计数
} Queue;
// 初始化队列
Queue* create_queue(int capacity) {
if (capacity <= 0) return NULL;
Queue *queue = malloc(sizeof(Queue));
queue->data = (int*)malloc(capacity * sizeof(int));
queue->front = queue->rear = -1;
queue->count = 0;
return queue;
}
// 入队(enqueue)
void enqueue(Queue *queue, int item) {
if (queue->count == queue->count) return; // 队满
if (queue->front == -1) queue->front = 0; // 首次入队
queue->rear = (queue->rear + 1) % queue->count; // 循环处理
queue->data[queue->rear] = item;
queue->count++;
}
// 出队(dequeue)
int dequeue(Queue *queue) {
if (queue->count == 0) return INT_MIN; // 空队列错误
int item = queue->data[queue->front];
if (queue->front == queue->rear) { // 队列只剩下一个元素
free(queue->data);
free(queue);
queue = NULL;
} else {
queue->front = (queue->front + 1) % queue->count; // 更新队头
}
queue->count--;
return item;
}
// 清空队列
void clear_queue(Queue *queue) {
if (queue) {
for (int i = 0; i < queue->count; i++) {
queue->data[(queue->front + i) % queue->count] = 0; // 将元素设为0
}
queue->front = queue->rear = 0;
queue->count = 0;
}
}
// 释放队列空间
void destroy_queue(Queue *queue) {
if (queue) {
clear_queue(queue); // 先清空队列
free(queue->data);
free(queue);
queue = NULL;
}
}
```
上述代码实现了创建、入队、出队、清空和销毁循环队列的基本操作。注意,`enqueue` 和 `dequeue` 中处理队尾指针的 `% queue->count` 是为了保持循环队列的特性。
阅读全文