C语言写一个队列,最新的数据插入最后面,超过队列最大限制,则最前面的数据被去除
时间: 2024-04-15 21:27:31 浏览: 14
以下是使用C语言实现的一个具有固定大小的队列,当有新数据进入队列时,如果队列已满,则最早进入队列的数据会被移除,而新数据会插入到队列的最后面:
```c
#include <stdio.h>
#define QUEUE_SIZE 5
// 定义队列结构
typedef struct {
int queue[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 data) {
if (q->count == QUEUE_SIZE) {
// 队列已满,移除最早进入队列的数据
q->front = (q->front + 1) % QUEUE_SIZE;
q->count--;
}
q->queue[q->rear] = data;
q->rear = (q->rear + 1) % QUEUE_SIZE;
q->count++;
}
int main() {
Queue queue;
initQueue(&queue);
// 模拟插入10个新数据
for (int i = 0; i < 10; i++) {
enqueue(&queue, i);
}
// 输出队列中的元素
printf("队列中的元素:");
int currentSize = queue.count;
for (int i = 0; i < currentSize; i++) {
printf("%d ", queue.queue[(queue.front + i) % QUEUE_SIZE]);
}
printf("\n");
return 0;
}
```
以上代码实现了一个具有固定大小的队列,使用循环数组的方式来实现。在 `Queue` 结构体中,包含一个 `queue` 数组用于存储队列元素,以及 `front` 和 `rear` 分别表示队列的头部和尾部的索引,`count` 表示当前队列中的元素个数。
在 `initQueue` 函数中,初始化队列的头部和尾部索引都为0,元素个数为0。
`enqueue` 函数用于将新数据入队。如果队列已满,则需要先移除最早进入队列的数据。移除最早进入的数据时,将头部索引向后移动一位,并减少元素个数。然后将新数据存储在队列的尾部,并更新尾部索引和元素个数。
在 `main` 函数中,首先调用 `initQueue` 函数初始化队列。然后使用一个循环来模拟插入10个新数据,调用 `enqueue` 函数将数据入队。
最后,输出队列中的元素。通过计算当前队列的实际大小,使用循环遍历队列数组,输出每个元素。
请注意,这个示例只是展示了如何实现一个固定大小的队列,并在有新数据进入队列时移除最早进入的数据。如果你需要更多的队列操作(如出队、判空、判满等),还需要在代码中添加相应的函数和逻辑。