/* *@文件:queue.c *@作者:‘你遇了我’ *@time:2022/11/13 *@联系:QQ:321640253 *@版本:V1.2 *@描述:数组泛型队列。队列管理和容器空间分离 使用案例: */ // // Created by 86186 on 2022/11/13. // #include "queue.h" /* * @简介:初始化一个队列 * @参数: * *Q:队列指针 * Maxsize:队列容器数组的长度 * NodeSize:队列容器数组每个元素的空间 * *container:容器数组指针 * @返回值:无 * */ void InitQuecu(SqQuecu *Q,uint16_t Maxsize,uint16_t NodeSize,void *container){ Q->front=Q->rear=-1; Q->size=0; Q->Maxsize=Maxsize; Q->NodeSize=NodeSize; Q->container=container; } /* * @简介:判断队列为空 * @参数:队列指针 * @返回值:布尔值 * */ bool QueueEmpty(SqQuecu *Q){ if(Q->size==0)return true; else return false; } /* * @简介:判断队列为满 * @参数:队列指针 * @返回值:布尔值 * */ bool QueueFull(SqQuecu *Q){ if(Q->size==Q->Maxsize)return true; else return false; } /* * @简介:进队 * @参数:队列指针 * 进队元素 * @返回值:可进队空间的地址 * */ void *enQueue(SqQuecu *Q){ if(QueueFull(Q))return NULL; if(Q->rear==Q->Maxsize-1)Q->rear=-1; Q->rear++; Q->size++; return Q->container+Q->rear*Q->NodeSize; } /* * @简介:出队 * @参数:队列指针 * @返回值:出队元素的地址指针 * */ void *deQueue(SqQuecu *Q){ if(QueueEmpty(Q))return NULL; if(Q->front==Q->Maxsize-1)Q->front=-1; Q->front++; Q->size--; return Q->container+Q->front*Q->NodeSize; }