C语言实现一个数组队列,一直往里面输入数据,当数据数量大于数组大小,数组在压入数据的时候,删除前面输入的数据
时间: 2024-09-09 22:10:02 浏览: 53
在C语言中实现一个数组队列,并且当队列中的数据数量超过数组的大小时,在添加新的数据元素之前删除最前面的数据元素,可以通过使用循环数组来完成。以下是一个简单的实现方法:
首先,定义一个结构体来表示数组队列,包含数组本身、队列的头部和尾部指针、数组的大小以及当前队列中元素的数量。
```c
#include <stdio.h>
#define QUEUE_SIZE 5 // 定义队列的最大容量
typedef struct {
int items[QUEUE_SIZE]; // 存储队列元素的数组
int head; // 队列头部的索引
int tail; // 队列尾部的索引
int size; // 当前队列中的元素数量
} CircularQueue;
// 初始化队列
void initQueue(CircularQueue *q) {
q->head = 0;
q->tail = 0;
q->size = 0;
}
// 向队列中添加元素
void enqueue(CircularQueue *q, int item) {
// 检查队列是否已满
if (q->size == QUEUE_SIZE) {
// 删除头部元素,腾出空间
q->head = (q->head + 1) % QUEUE_SIZE;
}
// 在尾部添加新元素
q->items[q->tail] = item;
q->tail = (q->tail + 1) % QUEUE_SIZE;
q->size++;
}
// 从队列中移除元素
int dequeue(CircularQueue *q) {
if (q->size == 0) {
// 队列为空,无法移除元素
return -1;
}
// 移除头部元素
int item = q->items[q->head];
q->head = (q->head + 1) % QUEUE_SIZE;
q->size--;
return item;
}
// 检查队列是否为空
int isEmpty(CircularQueue *q) {
return q->size == 0;
}
int main() {
CircularQueue q;
initQueue(&q);
// 示例:添加元素到队列
for (int i = 0; i < QUEUE_SIZE + 2; i++) {
enqueue(&q, i);
printf("Enqueued: %d\n", i);
if (i >= QUEUE_SIZE - 1) {
// 队列满后,开始循环删除元素
printf("Dequeued: %d\n", dequeue(&q));
}
}
// 清理队列
while (!isEmpty(&q)) {
printf("Dequeued: %d\n", dequeue(&q));
}
return 0;
}
```
在这个例子中,我们定义了一个名为`CircularQueue`的结构体,它包含了必要的属性来模拟循环队列的行为。`enqueue`函数负责在队列满时先删除头部的元素,然后在尾部添加新的元素。`dequeue`函数用于从队列头部移除元素。
阅读全文