环形数组c语言存储数据,结构体方式代码,不是队列逻辑
时间: 2023-10-19 13:26:02 浏览: 71
好的,我来为您提供一个环形数组的结构体存储方式的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10
typedef struct {
int data[MAX_SIZE];
int front; // 队头
int rear; // 队尾
} CircularArray;
// 初始化环形数组
CircularArray* initCircularArray() {
CircularArray* ca = (CircularArray*)malloc(sizeof(CircularArray));
ca->front = 0;
ca->rear = 0;
return ca;
}
// 判断环形数组是否为空
int isEmpty(CircularArray* ca) {
return ca->front == ca->rear;
}
// 判断环形数组是否已满
int isFull(CircularArray* ca) {
return (ca->rear + 1) % MAX_SIZE == ca->front;
}
// 入队
void enqueue(CircularArray* ca, int element) {
if (isFull(ca)) {
printf("Error: circular array is full\n");
return;
}
ca->data[ca->rear] = element;
ca->rear = (ca->rear + 1) % MAX_SIZE;
}
// 出队
int dequeue(CircularArray* ca) {
if (isEmpty(ca)) {
printf("Error: circular array is empty\n");
return -1;
}
int element = ca->data[ca->front];
ca->front = (ca->front + 1) % MAX_SIZE;
return element;
}
int main() {
CircularArray* ca = initCircularArray();
enqueue(ca, 1);
enqueue(ca, 2);
enqueue(ca, 3);
printf("%d\n", dequeue(ca));
printf("%d\n", dequeue(ca));
enqueue(ca, 4);
enqueue(ca, 5);
enqueue(ca, 6);
enqueue(ca, 7);
enqueue(ca, 8);
enqueue(ca, 9);
enqueue(ca, 10);
enqueue(ca, 11); // 队列已满
printf("%d\n", dequeue(ca));
printf("%d\n", dequeue(ca));
printf("%d\n", dequeue(ca));
printf("%d\n", dequeue(ca));
printf("%d\n", dequeue(ca));
printf("%d\n", dequeue(ca));
printf("%d\n", dequeue(ca));
printf("%d\n", dequeue(ca));
printf("%d\n", dequeue(ca));
printf("%d\n", dequeue(ca)); // 队列已空
return 0;
}
```
上述代码中,使用了一个结构体`CircularArray`来表示环形数组,其中包含一个数组`data`、一个队头`front`和一个队尾`rear`。在初始化环形数组时,将队头和队尾初始化为0。在入队和出队操作时,需要判断环形数组是否为空或已满,并且需要使用取模运算来实现环形数组的循环使用。