c语言循环存储
时间: 2023-08-02 14:15:11 浏览: 64
C语言中可以使用数组来实现循环存储,通常称为循环队列。循环队列需要用到两个指针变量front和rear,分别指向队头和队尾元素。
循环队列的基本操作包括入队、出队、判空、判满等。下面是一个简单的循环队列的实现示例:
```c
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int front, rear;
} Queue;
// 初始化队列
void initQueue(Queue *q) {
q->front = q->rear = 0;
}
// 判断队列是否为空
int isQueueEmpty(Queue *q) {
return q->front == q->rear;
}
// 判断队列是否已满
int isQueueFull(Queue *q) {
return (q->rear + 1) % MAX_SIZE == q->front;
}
// 入队操作
int enqueue(Queue *q, int x) {
if (isQueueFull(q)) {
return 0; // 队列已满,无法入队
}
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MAX_SIZE;
return 1; // 入队成功
}
// 出队操作
int dequeue(Queue *q, int *x) {
if (isQueueEmpty(q)) {
return 0; // 队列为空,无法出队
}
*x = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
return 1; // 出队成功
}
```
在这个实现中,我们使用了MAX_SIZE来指定队列的最大容量。当队列已满时,指针rear指向的位置其实是空的,因此需要使用取模运算将rear的值回归到0。同理,当队列为空时,front和rear指向的位置也是相等的。