请用C语言编程帮我实现一个功能:接收端会随机收到长度为20的数据,现在要将这些数据存储等待发送端提取,发送端每次按照接收的先后顺序取出20个数据
时间: 2023-12-10 09:42:26 浏览: 68
串口接受和发送数据--C语言代码,非常好用
4星 · 用户满意度95%
这个功能可以通过使用循环队列来实现。下面是一个简单的C语言实现:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 20 // 队列最大长度
typedef struct {
int data[MAX_SIZE]; // 队列数组
int front; // 队头指针
int 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 value) {
if (isQueueFull(q)) {
printf("Queue is full\n");
return 0;
}
q->data[q->rear] = value;
q->rear = (q->rear + 1) % MAX_SIZE;
return 1;
}
int dequeue(Queue *q, int *value) {
if (isQueueEmpty(q)) {
printf("Queue is empty\n");
return 0;
}
*value = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
return 1;
}
int main() {
Queue q;
int i, value;
initQueue(&q);
// 收到随机数据并存入队列
for (i = 0; i < 20; i++) {
value = rand() % 100; // 生成 0-99 的随机整数
enqueue(&q, value);
}
// 按照先后顺序取出数据并发送
while (!isQueueEmpty(&q)) {
dequeue(&q, &value);
printf("%d ", value); // 这里可以替换成发送数据的代码
}
printf("\n");
return 0;
}
```
在这个代码中,我们定义了一个结构体 `Queue` 来表示循环队列。`data` 数组存储队列的元素值,`front` 和 `rear` 分别表示队头和队尾指针。`initQueue` 函数用来初始化队列,`isQueueEmpty` 和 `isQueueFull` 函数分别用来判断队列是否为空和是否已满。`enqueue` 函数用来将数据存入队列,`dequeue` 函数用来从队列中取出数据。最后,在 `main` 函数中,我们可以通过调用 `enqueue` 函数将随机数据存入队列,然后通过调用 `dequeue` 函数按照先后顺序取出数据并发送。
阅读全文