本文最后更新于 150 天前,其中的信息可能已经有所发展或是发生改变。
1.文件注释内容
/**
* @filename: queue.c
* @brief: queue
* @author: philia
* @date: 2026/2/1
* @version: ver1.0
* @note none
* CopyRight (c) 2026 philia All Right Reseverd
*/2.头文件
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>3.循环队列初始化函数及结构体定义
typedef int ElementType;
typedef struct {
ElementType *addr;
unsigned int maxsize;
int rear;
int front;
} CircularQueue;
//循环队列初始化
CircularQueue* queue_init(unsigned int size) {
if (size < 2) {
printf("队列容量至少为2\n");
return NULL;
}
//为管理结构体申请内存
CircularQueue *list = (CircularQueue*)calloc(1, sizeof(CircularQueue));
if (!list) exit(-1);
//为队列申请内存
list->addr = (ElementType*)calloc(size, sizeof(ElementType));
if (!list->addr) {
free(list);
exit(-1);
}
list->maxsize = size;
list->front = list->rear = 0;
return list;
}4.入队
//入队
bool push(CircularQueue* q, int value) {
//队列已满
if ((q->rear + 1) % q->maxsize == q->front) {
printf("队列已满\n");
return false;
}
//队列未满
q->rear = (q->rear + 1) % q->maxsize;
q->addr[q->rear] = value;
printf("入队成功:%d\n", value);
return true;
}5.出队
//出队
bool pop(CircularQueue* q, int *value) {
//队列为空
if (q->front == q->rear) {
printf("队列为空\n");
return false;
}
//队列未空
q->front = (q->front + 1) % q->maxsize;
*value = q->addr[q->front];
printf("出队成功:%d\n", *value);
return true;
}6.遍历循环队列
//遍历循环队列
void printQueue(CircularQueue* q) {
//队列为空
if (q->front == q->rear) {
printf("队列为空\n");
return;
}
int i = (q->front + 1) % q->maxsize;
while (i != q->rear) {
printf("%d ", q->addr[i]);
i = (i + 1) % q->maxsize;
}
printf("%d\n", q->addr[i]); // 打印最后一个
}7.内存释放
//内存释放
void queue_destroy(CircularQueue* q) {
free(q->addr);
free(q);
}8.编写主函数测试
int main() {
CircularQueue* q = queue_init(10);
push(q, 10);
push(q, 20);
push(q, 23);
int val;
pop(q, &val);
printQueue(q); // 输出 20 23
queue_destroy(q);
return 0;
}


