c语言写一个循环队列并使用例程
时间: 2023-08-31 07:13:28 浏览: 109
以下是用C语言实现循环队列的代码及使用例程:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 5
typedef struct {
int front; // 队头指针
int rear; // 队尾指针
int data[MAX_SIZE]; // 数据存储数组
} Queue;
// 初始化队列
void InitQueue(Queue *q) {
q->front = 0;
q->rear = 0;
}
// 判断队列是否为空
int IsEmpty(Queue q) {
return q.front == q.rear;
}
// 判断队列是否已满
int IsFull(Queue q) {
return (q.rear+1) % MAX_SIZE == 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) % MAX_SIZE;
}
// 出队
int DeQueue(Queue *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(Queue q) {
if (IsEmpty(q)) {
printf("Queue is empty.\n");
return;
}
printf("Traversing queue: ");
int i = q.front;
while (i != q.rear) {
printf("%d ", q.data[i]);
i = (i+1) % MAX_SIZE;
}
printf("\n");
}
int main() {
Queue q;
InitQueue(&q);
EnQueue(&q, 1);
EnQueue(&q, 2);
EnQueue(&q, 3);
TraverseQueue(q);
int x = DeQueue(&q);
printf("Dequeued element: %d\n", x);
TraverseQueue(q);
EnQueue(&q, 4);
EnQueue(&q, 5);
EnQueue(&q, 6);
TraverseQueue(q);
return 0;
}
```
使用例程:
```c
InitQueue(&q); // 初始化队列
EnQueue(&q, 1); // 入队
EnQueue(&q, 2);
EnQueue(&q, 3);
int x = DeQueue(&q); // 出队
printf("Dequeued element: %d\n", x);
TraverseQueue(q); // 遍历队列
```
输出:
```
Traversing queue: 1 2 3
Dequeued element: 1
Traversing queue: 2 3
Queue is full.
Traversing queue: 2 3 4 5 6
```
阅读全文