C语言优雅的循环队列接口代码
时间: 2023-07-24 19:07:47 浏览: 122
如何实现循环队列
以下是一个基于C语言的优雅的循环队列接口代码:
```c
#include <stdbool.h>
// 定义队列结构体
typedef struct {
int *data; // 队列数据
int front; // 队首索引
int rear; // 队尾索引
int size; // 队列大小
} Queue;
// 初始化队列
void initQueue(Queue *q, int size) {
q->data = (int *)malloc(sizeof(int) * size);
q->front = q->rear = 0;
q->size = size;
}
// 销毁队列
void destroyQueue(Queue *q) {
free(q->data);
}
// 判断队列是否为空
bool isQueueEmpty(Queue *q) {
return q->front == q->rear;
}
// 判断队列是否已满
bool isQueueFull(Queue *q) {
return (q->rear + 1) % q->size == q->front;
}
// 入队
bool enqueue(Queue *q, int val) {
if (isQueueFull(q)) {
return false;
}
q->data[q->rear] = val;
q->rear = (q->rear + 1) % q->size;
return true;
}
// 出队
bool dequeue(Queue *q, int *val) {
if (isQueueEmpty(q)) {
return false;
}
*val = q->data[q->front];
q->front = (q->front + 1) % q->size;
return true;
}
// 获取队首元素
bool peekQueue(Queue *q, int *val) {
if (isQueueEmpty(q)) {
return false;
}
*val = q->data[q->front];
return true;
}
```
使用方法:
```c
#include <stdio.h>
#include "queue.h" // 引入队列接口
int main() {
Queue q;
initQueue(&q, 5);
enqueue(&q, 1);
enqueue(&q, 2);
enqueue(&q, 3);
int val;
while (!isQueueEmpty(&q)) {
dequeue(&q, &val);
printf("%d ", val);
}
destroyQueue(&q);
return 0;
}
```
输出结果:
```
1 2 3
```
阅读全文