C语言 3个长度为20的数组循环接收长度为20的数据,提取数据时先进先出
时间: 2023-11-27 17:51:37 浏览: 49
可以使用循环队列来实现先进先出的数据提取。
具体实现步骤如下:
1. 定义一个长度为 `20` 的循环队列,用来存储数据。
2. 定义三个长度为 `20` 的数组,用来循环接收数据。
3. 初始化队列,设置队头和队尾指针为 `0`。
4. 循环接收数据,将数据存入队列中。
5. 如果队列已满,先出队头的数据,再将新数据入队尾。
6. 依次从队头取出数据,即可实现先进先出的数据提取。
下面是具体的代码实现:
```c
#include <stdio.h>
#define MAX_QUEUE_SIZE 20
// 循环队列结构体
typedef struct {
int data[MAX_QUEUE_SIZE]; // 存储数据的数组
int front; // 队头指针
int rear; // 队尾指针
int count; // 队列元素个数
} Queue;
// 初始化队列
void initQueue(Queue *q) {
q->front = 0;
q->rear = 0;
q->count = 0;
}
// 入队操作
void enQueue(Queue *q, int val) {
if (q->count == MAX_QUEUE_SIZE) { // 队列已满
q->data[q->front] = val; // 先出队头的数据
q->front = (q->front + 1) % MAX_QUEUE_SIZE;
} else {
q->count++;
}
q->data[q->rear] = val; // 入队新数据
q->rear = (q->rear + 1) % MAX_QUEUE_SIZE;
}
// 出队操作
int deQueue(Queue *q) {
if (q->count == 0) { // 队列为空
return -1;
} else {
q->count--;
int val = q->data[q->front]; // 取出队头数据
q->front = (q->front + 1) % MAX_QUEUE_SIZE;
return val;
}
}
int main() {
Queue q;
initQueue(&q); // 初始化队列
int arr1[20], arr2[20], arr3[20]; // 定义三个数组
// 循环接收数据
for (int i = 0; i < 20; i++) {
scanf("%d", &arr1[i]);
enQueue(&q, arr1[i]); // 入队操作
}
// 循环接收数据
for (int i = 0; i < 20; i++) {
scanf("%d", &arr2[i]);
enQueue(&q, arr2[i]); // 入队操作
}
// 循环接收数据
for (int i = 0; i < 20; i++) {
scanf("%d", &arr3[i]);
enQueue(&q, arr3[i]); // 入队操作
}
// 依次从队头取出数据,即可实现先进先出的数据提取
for (int i = 0; i < 20; i++) {
int val = deQueue(&q); // 出队操作
printf("%d ", val);
}
return 0;
}
```
注意:该代码只是实现了循环队列和数据输入输出操作,具体应用需要根据实际情况进行修改。