如何用C语言实现一个基本的队列数据结构并提供相关练习题示例?
时间: 2024-11-18 22:18:34 浏览: 31
在C语言中,我们可以使用数组或链表来实现基本的队列数据结构。这里我们介绍一种基于数组的实现,它称为"顺序队列"。
```c
#include <stdio.h>
#define MAX_SIZE 10
typedef struct {
int data[MAX_SIZE];
int front; // 队头元素索引
int rear; // 队尾元素索引
} Queue;
// 初始化队列
void initQueue(Queue *q) {
q->front = -1;
q->rear = -1;
}
// 判断队列是否为空
int isQueueEmpty(Queue *q) {
return (q->front == -1);
}
// 判断队列是否已满
int isQueueFull(Queue *q) {
return ((q->rear + 1) % MAX_SIZE == q->front);
}
// 入队操作
void enqueue(Queue *q, int item) {
if (isQueueFull(q)) {
printf("Queue is full.\n");
} else {
if (q->front == -1)
q->front = 0;
q->data[++q->rear] = item;
printf("Enqueued %d\n", item);
}
}
// 出队操作
int dequeue(Queue *q) {
if (isQueueEmpty(q)) {
printf("Queue is empty.\n");
return -1; // 返回特殊值表示错误
} else {
int removedItem = q->data[q->front];
q->data[q->front++] = -1; // 使用特殊值标记空位
if (q->front == MAX_SIZE)
q->front = 0;
printf("Dequeued %d\n", removedItem);
return removedItem;
}
}
// 主函数示例
int main() {
Queue queue;
initQueue(&queue);
enqueue(&queue, 1);
enqueue(&queue, 2);
enqueue(&queue, 3);
dequeue(&queue);
dequeue(&queue);
return 0;
}
```
**相关问题--:**
1. 如何在C语言中从队列中移除特定元素?
2. 如果需要改变队列的最大容量,应该如何修改这个队列实现?
3. 这种数组实现的队列相比链表实现有哪些优缺点?
阅读全文