用C语言写一个对循环队列的遍历操作
时间: 2023-12-29 12:56:38 浏览: 67
对循环队列的遍历操作可以通过循环队列的元素个数来实现。假设队列中有n个元素,则从队头开始遍历n个元素即可完成遍历。具体实现如下:
```c
#include <stdio.h>
#define MAX_SIZE 10
// 定义循环队列结构体
typedef struct {
int data[MAX_SIZE];
int front; // 队头指针
int rear; // 队尾指针
} CircularQueue;
// 初始化循环队列
void initQueue(CircularQueue *q) {
q->front = 0;
q->rear = 0;
}
// 判断循环队列是否为空
int isEmpty(CircularQueue *q) {
return q->front == q->rear;
}
// 判断循环队列是否已满
int isFull(CircularQueue *q) {
return (q->rear + 1) % MAX_SIZE == q->front;
}
// 入队
void enQueue(CircularQueue *q, int x) {
if (isFull(q)) {
printf("Queue is full\n");
return;
}
q->data[q->rear] = x;
q->rear = (q->rear + 1) % MAX_SIZE;
}
// 出队
int deQueue(CircularQueue *q) {
if (isEmpty(q)) {
printf("Queue is empty\n");
return -1;
}
int x = q->data[q->front];
q->front = (q->front + 1) % MAX_SIZE;
return x;
}
// 遍历循环队列
void traverseQueue(CircularQueue *q) {
if (isEmpty(q)) {
printf("Queue is empty\n");
return;
}
int i, n = (q->rear - q->front + MAX_SIZE) % MAX_SIZE;
for (i = 0; i < n; i++) {
printf("%d ", q->data[(q->front + i) % MAX_SIZE]);
}
printf("\n");
}
// 测试
int main() {
CircularQueue q;
initQueue(&q);
enQueue(&q, 1);
enQueue(&q, 2);
enQueue(&q, 3);
traverseQueue(&q);
deQueue(&q);
traverseQueue(&q);
enQueue(&q, 4);
enQueue(&q, 5);
traverseQueue(&q);
return 0;
}
```
以上代码中,traverseQueue()函数遍历队列时,先计算出队列中元素的个数n,然后从队头开始遍历n个元素,并使用取模运算来循环遍历队列。
阅读全文