C语言 3个长度为20的数组循环缓存数据 先进先出
时间: 2023-12-10 15:40:42 浏览: 28
可以使用一个变量来记录当前数组中最后一个元素的位置,每次添加元素时将该变量加1,并判断是否超过数组长度,若超过则将该变量设为0。取出元素时,从该变量指向的位置开始取出,并将该变量加1,同样判断是否超过数组长度,若超过则将该变量设为0。
下面是一个示例代码:
```c
#include <stdio.h>
#define SIZE 20
int main() {
int arr1[SIZE] = {0};
int arr2[SIZE] = {0};
int arr3[SIZE] = {0};
int rear1 = 0, rear2 = 0, rear3 = 0;
// 添加数据
for (int i = 0; i < 50; i++) {
if (i % 3 == 0) {
arr1[rear1] = i;
rear1 = (rear1 + 1) % SIZE;
} else if (i % 3 == 1) {
arr2[rear2] = i;
rear2 = (rear2 + 1) % SIZE;
} else {
arr3[rear3] = i;
rear3 = (rear3 + 1) % SIZE;
}
}
// 取出数据
for (int i = 0; i < 50; i++) {
if (i % 3 == 0) {
printf("%d\n", arr1[(rear1 + i / 3) % SIZE]);
} else if (i % 3 == 1) {
printf("%d\n", arr2[(rear2 + i / 3) % SIZE]);
} else {
printf("%d\n", arr3[(rear3 + i / 3) % SIZE]);
}
}
return 0;
}
```
在这个示例中,使用了三个数组来存储数据,每次添加数据时判断余数,将数据添加到对应的数组中。取出数据时同样判断余数,从对应的数组中取出数据,并将后面的元素向前移动。需要注意的是,取出数据时数组长度可能不够,需要使用模运算将下标限制在数组长度范围内。