循环队列实现:设计一个固定大小的循环队列,支持入队、出队、获取队头元素和检查队列是否为空。实现所有操作,并确保队列在满的情况下能正确处理。C语言
时间: 2024-10-25 19:08:16 浏览: 61
在C语言中,我们可以使用数组和两个指针(front和rear)来实现循环队列。这里是一个简单的循环队列结构体定义和基本操作的实现:
```c
#include <stdio.h>
#define MAX_SIZE 10 // 定义队列最大容量
typedef struct {
int data[MAX_SIZE]; // 存储数据的数组
int front; // 队首指针
int rear; // 队尾指针
} Queue;
// 初始化队列
void initQueue(Queue *queue) {
queue->front = -1;
queue->rear = -1;
}
// 检查队列是否为空
int isEmpty(Queue *queue) {
return queue->front == -1 && queue->rear == -1;
}
// 检查队列是否已满
int isFull(Queue *queue) {
if ((queue->front + 1) % MAX_SIZE == queue->rear) {
return 1; // 已满
} else {
return 0; // 未满
}
}
// 入队(Enqueue)
void enqueue(Queue *queue, int value) {
if (isFull(queue)) {
printf("Error: Queue is full.\n");
} else {
if (queue->rear == -1)
queue->front = 0; // 如果队列为空,front初始化为0
queue->data[(queue->rear + 1) % MAX_SIZE] = value;
queue->rear = (queue->rear + 1) % MAX_SIZE;
}
}
// 出队(Dequeue)
int dequeue(Queue *queue) {
if (isEmpty(queue)) {
printf("Error: Queue is empty.\n");
return -1; // 返回错误码表示无法出队
} else {
int value = queue->data[queue->front];
queue->front = (queue->front + 1) % MAX_SIZE;
return value;
}
}
// 获取队头元素
int getFront(Queue *queue) {
if (isEmpty(queue)) {
printf("Error: Queue is empty.\n");
return -1; // 同样返回错误码
} else {
return queue->data[queue->front];
}
}
int main() {
Queue q;
initQueue(&q);
enqueue(&q, 1);
enqueue(&q, 2);
enqueue(&q, 3); // 这里假设队列未满
while (!isEmpty(&q)) {
printf("Front element: %d\n", getFront(&q));
dequeue(&q);
}
return 0;
}
```
阅读全文