C实现循环队列
时间: 2023-07-07 19:20:43 浏览: 85
C语言可以通过数组实现循环队列,具体实现如下:
```c
#define MAX_SIZE 100 // 队列最大容量
typedef struct {
int data[MAX_SIZE];
int front; // 队头指针
int rear; // 队尾指针
} Queue;
// 初始化队列
void initQueue(Queue *q) {
q->front = q->rear = 0;
}
// 判断队列是否为空
int isEmpty(Queue *q) {
return q->front == q->rear;
}
// 入队
int enQueue(Queue *q, int x) {
if ((q->rear + 1) % MAX_SIZE == q->front) { // 队列已满
return 0;
}
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MAX_SIZE;
return 1;
}
// 出队
int deQueue(Queue *q, int *x) {
if (isEmpty(q)) { // 队列为空
return 0;
}
*x = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
return 1;
}
```
以上代码实现了一个循环队列,可以通过调用 `initQueue()` 函数初始化队列,通过调用 `enQueue()` 函数入队,调用 `deQueue()` 函数出队,通过调用 `isEmpty()` 函数判断队列是否为空。其中 `front` 表示队头指针,`rear` 表示队尾指针,当队列满时,队尾指针指向的位置是不能存放元素的,所以需要使用取模运算将队尾指针移到数组头部。
阅读全文