C语言实现一个数组队列,一直往里面输入数据,当数据数量大于数组大小,数组会删除前面输入的数据
时间: 2024-09-09 14:09:17 浏览: 46
在C语言中实现一个数组队列,可以使用循环数组的方法。这种队列可以看作是一个固定大小的数组,但是其内部实现了一种循环的逻辑,使得数组的尾部在到达数组末尾后又回到数组的开始位置。这样,当队列满时,可以继续向数组中添加新的元素,但会覆盖掉队列头部最旧的元素。下面是一个简单的示例代码,展示了如何实现这样的队列:
```c
#include <stdio.h>
#include <stdbool.h>
#define QUEUE_SIZE 5 // 定义队列的大小
// 队列结构体定义
typedef struct {
int data[QUEUE_SIZE]; // 存储队列元素的数组
int head; // 队列头部索引
int tail; // 队列尾部索引
int count; // 队列中当前元素的数量
} ArrayQueue;
// 初始化队列
void initQueue(ArrayQueue *q) {
q->head = 0;
q->tail = 0;
q->count = 0;
}
// 向队列中添加元素
bool enqueue(ArrayQueue *q, int value) {
if (q->count == QUEUE_SIZE) {
// 队列已满,将头部元素出队
q->head = (q->head + 1) % QUEUE_SIZE;
q->tail = (q->tail + 1) % QUEUE_SIZE;
}
q->data[q->tail] = value;
q->tail = (q->tail + 1) % QUEUE_SIZE;
q->count++;
return true;
}
// 从队列中取出元素
bool dequeue(ArrayQueue *q, int *value) {
if (q->count == 0) {
return false; // 队列为空
}
*value = q->data[q->head];
q->head = (q->head + 1) % QUEUE_SIZE;
q->count--;
return true;
}
int main() {
ArrayQueue q;
initQueue(&q);
// 模拟向队列中添加数据
for (int i = 0; i < QUEUE_SIZE + 2; i++) {
enqueue(&q, i);
printf("队列添加了元素: %d\n", i);
}
// 模拟从队列中取出数据
int value;
while (dequeue(&q, &value)) {
printf("队列取出了元素: %d\n", value);
}
return 0;
}
```
在这个例子中,我们定义了一个`ArrayQueue`结构体来表示数组队列,其中包含了数组本身以及用于追踪队列状态的索引和计数器。`enqueue`函数用于向队列中添加元素,如果队列已满,则会删除头部的元素。`dequeue`函数用于从队列中取出元素。
阅读全文