fifo代码
时间: 2023-07-03 22:25:21 浏览: 71
下面是一个简单的 FIFO(First-In-First-Out)队列的代码实现,使用数组作为底层数据结构:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 10
struct fifo {
int data[MAX_SIZE];
int head;
int tail;
};
void fifo_init(struct fifo *f)
{
f->head = 0;
f->tail = 0;
}
int fifo_push(struct fifo *f, int val)
{
if ((f->tail + 1) % MAX_SIZE == f->head) {
// 队列已满
return -1;
}
f->data[f->tail] = val;
f->tail = (f->tail + 1) % MAX_SIZE;
return 0;
}
int fifo_pop(struct fifo *f, int *val)
{
if (f->head == f->tail) {
// 队列已空
return -1;
}
*val = f->data[f->head];
f->head = (f->head + 1) % MAX_SIZE;
return 0;
}
int fifo_empty(struct fifo *f)
{
return f->head == f->tail;
}
int fifo_full(struct fifo *f)
{
return (f->tail + 1) % MAX_SIZE == f->head;
}
int fifo_size(struct fifo *f)
{
return (f->tail - f->head + MAX_SIZE) % MAX_SIZE;
}
int main()
{
struct fifo f;
fifo_init(&f);
for (int i = 0; i < 10; i++) {
fifo_push(&f, i);
}
int val;
while (!fifo_empty(&f)) {
fifo_pop(&f, &val);
printf("%d ", val);
}
printf("\n");
return 0;
}
```
在上面的代码中,`fifo_init` 函数用于初始化队列,`fifo_push` 函数用于在队列尾部插入一个元素,`fifo_pop` 函数用于弹出队列头部的元素并存储到 `val` 变量中。`fifo_empty` 函数用于判断队列是否为空,`fifo_full` 函数用于判断队列是否已满,`fifo_size` 函数用于返回队列中元素的个数。