c语言中给出一个循环队列的主函数
时间: 2024-10-25 20:12:07 浏览: 19
在C语言中,创建一个循环队列(Circular Queue)通常涉及到结构体来存储数据元素以及一些函数来管理队列的操作,如入队、出队、检查队列是否为空等。下面是一个简单的循环队列的主函数示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义循环队列的结构体
typedef struct {
int *queue; // 存储元素的数组
int front; // 队头指针
int rear; // 队尾指针
int capacity; // 队列容量
} Queue;
// 初始化队列
Queue* create_queue(int size) {
Queue *q = (Queue*)malloc(sizeof(Queue));
q->queue = (int*)malloc(size * sizeof(int));
q->front = -1;
q->rear = -1;
q->capacity = size;
return q;
}
// 入队操作
void enqueue(Queue *q, int data) {
if ((q->rear + 1) % q->capacity == q->front) { // 队满处理
printf("Queue is full.\n");
return;
}
q->rear = (q->rear + 1) % q->capacity; // 循环更新队尾
q->queue[q->rear] = data;
printf("Enqueued %d\n", data);
}
// 出队操作
int dequeue(Queue *q) {
if (q->front == -1) { // 队空处理
printf("Queue is empty.\n");
return -1;
}
int data = q->queue[q->front]; // 保存队首元素
q->front = (q->front + 1) % q->capacity; // 更新队头
free(q->queue); // 如果不是第一个元素,释放已使用的内存
return data;
}
// 主函数演示
int main() {
Queue *queue = create_queue(5); // 创建一个容量为5的队列
// 入队操作
enqueue(queue, 10);
enqueue(queue, 20);
enqueue(queue, 30);
// 出队并打印
printf("Dequeued: %d\n", dequeue(queue));
// 空队列测试
enqueue(queue, 40); // 尽管队列未满,但在main结束前先尝试添加一个元素
printf("Is queue empty? %s\n", q->front == -1 ? "Yes" : "No");
// 清理
free(queue->queue);
free(queue);
return 0;
}
```
在这个例子中,主函数首先创建了一个循环队列,并进行了几次入队和出队操作。注意循环队列的特点是当队尾到达数组的末尾时会绕回数组的开头继续存储。
阅读全文