使用C语言实现容器queue的全部功能用以存储数组
时间: 2024-10-24 11:06:46 浏览: 20
libcstl,C语言编写的一个通用的数据结构和常用的算法库
在C语言中,我们可以手动模拟队列(Queue)的实现,特别是在处理数组作为内部存储的情况下。这里简单介绍一下如何用数组实现一个基本的FIFO(First-In-First-Out)队列:
```c
#include <stdio.h>
#define MAX_SIZE 10
typedef struct {
int data[MAX_SIZE]; // 存储数组
int front; // 前端指针
int rear; // 后端指针
} Queue;
// 初始化队列
void init(Queue *q) {
q->front = -1;
q->rear = -1;
}
// 判断队列是否为空
int is_empty(Queue *q) {
return q->front == -1 && q->rear == -1;
}
// 判断队列是否已满
int is_full(Queue *q) {
return (q->rear + 1) % MAX_SIZE == q->front;
}
// 入队操作
void enqueue(Queue *q, int value) {
if (is_full(q)) {
printf("Queue is full.\n");
return;
}
q->rear = (q->rear + 1) % MAX_SIZE; // 循环索引
q->data[q->rear] = value;
if (q->front == -1)
q->front = 0; // 如果队列之前为空,设置前端
}
// 出队操作
int dequeue(Queue *q) {
if (is_empty(q)) {
printf("Queue is empty.\n");
return -1; // 返回错误值或特殊标志
}
int value = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
if (q-1;
q->rear = -1;
}
return value;
}
// 打印队列内容
void print_queue(Queue *q) {
if (is_empty(q))
printf("Queue is empty.\n");
else {
for (int i = q->front; i != q->rear; i = (i + 1) % MAX_SIZE) {
printf("%d ", q->data[i]);
}
printf("\n");
}
}
// 示例用法
int main() {
Queue q;
init(&q);
enqueue(&q, 1);
enqueue(&q, 2);
enqueue(&q, 3);
print_queue(&q); // 输出: 1 2 3
dequeue(&q);
print_queue(&q); // 输出: 2 3
return 0;
}
```
这个简单的实现仅适用于整数,并且数组大小固定。在实际应用中,你可能还需要考虑内存管理、错误处理等问题。
阅读全文