怎么创建一个环形队列给队列几个值用c语语言
时间: 2024-10-20 18:07:30 浏览: 16
Leetcode:几个面试练习题
在C语言中,由于标准库中并没有直接提供环形队列的数据结构,我们需要自定义一个结构来实现。首先,定义一个数组作为队列的底层存储,并设置两个指针,一个指向当前元素(front),另一个指向下一个将被添加的元素位置(rear)。当 rear 指针到达数组的开头时,我们将其重置回数组的结尾,形成循环。
下面是一个简单的环形队列的实现示例:
```c
#include <stdio.h>
#define MAX_SIZE 10
typedef struct {
int data[MAX_SIZE];
int front;
int rear;
} Queue;
// 初始化环形队列
void initialize(Queue* queue) {
queue->front = -1;
queue->rear = -1;
}
// 判断队列是否为空
int is_empty(const Queue* queue) {
return queue->front == -1 && queue->rear == -1;
}
// 判断队列是否已满
int is_full(const Queue* queue) {
return (queue->rear + 1) % MAX_SIZE == queue->front;
}
// 入队操作
void enqueue(Queue* queue, int value) {
if (is_full(queue)) {
printf("Queue is full.\n");
return;
}
if (is_empty(queue)) {
queue->front = queue->rear = 0;
} else {
queue->rear = (queue->rear + 1) % MAX_SIZE;
}
queue->data[queue->rear] = value;
printf("Enqueued: %d\n", value);
}
// 出队操作
int dequeue(Queue* queue) {
if (is_empty(queue)) {
printf("Queue is empty.\n");
return -1; // 或者抛出错误
}
int removed_value = queue->data[queue->front];
if (queue->front == queue->rear) {
queue->front = queue->rear = -1;
} else {
queue->front = (queue->front + 1) % MAX_SIZE;
}
return removed_value;
}
// 主函数演示
int main() {
Queue q;
initialize(&q);
enqueue(&q, 1);
enqueue(&q, 2);
enqueue(&q, 3); // 这里会提示 "Queue is full."
printf("Dequeued: %d\n", dequeue(&q)); // 输出 1
printf("Dequeued: %d\n", dequeue(&q)); // 输出 2
return 0;
}
```
阅读全文