用C语言设计一个先进先出的数组
时间: 2024-10-10 20:10:24 浏览: 64
在C语言中,可以使用数组和一个辅助指针来实现一个简单的先进先出(FIFO)队列。这里是一个基本的示例:
```c
#include <stdio.h>
#define QUEUE_SIZE 5 // 队列的最大容量
typedef struct {
int data[QUEUE_SIZE]; // 存储数据的数组
int front; // 指向队首元素的索引
int rear; // 指向队尾元素之后的空位的索引
} Queue;
// 初始化队列
void initQueue(Queue* q) {
q->front = -1;
q->rear = -1;
}
// 判断队列是否为空
int isQueueEmpty(Queue* q) {
return (q->front == -1 && q->rear == -1);
}
// 判断队列是否已满
int isQueueFull(Queue* q) {
return ((q->front + 1) % QUEUE_SIZE == q->rear);
}
// 入队操作:将新元素添加到队尾
void enqueue(Queue* q, int value) {
if (isQueueFull(q)) {
printf("Error: Queue is full.\n");
return;
}
if (isQueueEmpty(q)) {
q->front = q->rear = 0;
} else {
q->rear = (q->rear + 1) % QUEUE_SIZE;
}
q->data[q->rear] = value;
printf("Enqueued: %d\n", value);
}
// 出队操作:从队首移除并返回元素
int dequeue(Queue* q) {
if (isQueueEmpty(q)) {
printf("Error: Queue is empty.\n");
return -1;
}
int removedValue = q->data[q->front];
if (q->front == q->rear) {
q->front = q->rear = -1;
} else {
q->front = (q->front + 1) % QUEUE_SIZE;
}
printf("Dequeued: %d\n", removedValue);
return removedValue;
}
// 示例
int main() {
Queue myQueue;
initQueue(&myQueue);
enqueue(&myQueue, 1);
enqueue(&myQueue, 2);
enqueue(&myQueue, 3);
dequeue(&myQueue);
dequeue(&myQueue);
return 0;
}
```
在这个例子中,`enqueue()`函数用于添加元素,`dequeue()`函数用于移除元素。队列的动态扩展和收缩通过循环数组实现,以适应队列的大小变化。
阅读全文