用C语言对循环队列进行遍历
时间: 2023-10-04 18:12:36 浏览: 100
C语言循环队列
循环队列的遍历需要分情况讨论。如果队头指针小于等于队尾指针,则队列中的元素是连续的,可以直接使用循环结构遍历;如果队头指针大于队尾指针,则需要分开遍历队列中的元素,分别遍历队头指针后面的元素以及队尾指针前面的元素。
下面是用C语言对循环队列进行遍历的示例代码:
```c
#include <stdio.h>
#define MAXSIZE 10
typedef struct {
int data[MAXSIZE];
int front, rear;
} Queue;
void initQueue(Queue *Q) {
Q->front = Q->rear = 0;
}
int isEmpty(Queue Q) {
return Q.front == Q.rear;
}
int isFull(Queue Q) {
return (Q.rear+1) % MAXSIZE == Q.front;
}
void enQueue(Queue *Q, int x) {
if (isFull(*Q)) {
printf("Queue is full!\n");
return;
}
Q->data[Q->rear] = x;
Q->rear = (Q->rear+1) % MAXSIZE;
}
void traverseQueue(Queue Q) {
if (isEmpty(Q)) {
printf("Queue is empty!\n");
return;
}
if (Q.front <= Q.rear) {
for (int i=Q.front; i<Q.rear; i++)
printf("%d ", Q.data[i]);
} else {
for (int i=Q.front; i<MAXSIZE; i++)
printf("%d ", Q.data[i]);
for (int i=0; i<Q.rear; i++)
printf("%d ", Q.data[i]);
}
printf("\n");
}
int main() {
Queue Q;
initQueue(&Q);
enQueue(&Q, 1);
enQueue(&Q, 2);
enQueue(&Q, 3);
enQueue(&Q, 4);
enQueue(&Q, 5);
traverseQueue(Q);
return 0;
}
```
在这个示例代码中,我们定义了一个循环队列结构体,包含了队列的最大长度、队列的数据数组以及队头指针和队尾指针。我们还定义了一系列队列操作函数,包括初始化、判断队列是否为空或已满、入队和遍历等。在遍历函数中,我们根据队头和队尾指针的大小关系来决定使用哪种方式遍历队列中的元素。最后,在主函数中我们初始化了一个队列并往里加入了一些元素,然后调用遍历函数输出队列中的元素。
阅读全文