队列v1.3

This commit is contained in:
2023-10-18 17:02:38 +08:00
parent b85fc4bdf1
commit bd56fdcd73
3 changed files with 37 additions and 24 deletions

View File

@@ -3,24 +3,23 @@
int main(){ int main(){
int a[10]; //创建队列容器
SqQuecu a_quecu; //初始化队列 SqQuecu a_quecu; //初始化队列
InitQuecu(&a_quecu,10,sizeof(int),(void*)a);
//出队进队测试 //出队进队测试
int *tmep;//临时存储进对的返回值 int *tmep;//临时存储进对的返回值
for (size_t i = 0; i < 50; i++) for (size_t i = 0; i < 50; i++)
{ {
tmep = (int*)enQueue(&a_quecu); tmep = (int*)enQueue(&a_quecu);
if(tmep!=NULL){ //返回值为空指针则 if(tmep!=NULL){ //返回值为空指针则
*tmep=i; *tmep=i;
} }
else{ else{
printf("出队元素:%d\n",*(int*)deQueue(&a_quecu)); printf("出队元素:%d\n",*(int*)deQueue(&a_quecu));
*(int*)enQueue(&a_quecu)=i; //出队后重新进队 *(int*)enQueue(&a_quecu)=i; //出队后重新进队
} }
for(int i=0;i<10;i++) /*******遍历队列**********/
printf("%d\n",a[i]); for(int i=0;i<a_quecu.Maxsize;i++)
printf("%d\n",*(int*)(a_quecu.container+i*a_quecu.NodeSize));
/*******遍历队列**********/
printf("-------------------------\n"); printf("-------------------------\n");
} }
@@ -30,7 +29,7 @@ int main(){
printf("出队元素:%d\n",*(int*)deQueue(&a_quecu)); printf("出队元素:%d\n",*(int*)deQueue(&a_quecu));
printf("当前队列长度:%d\n",a_quecu.size); printf("当前队列长度:%d\n",a_quecu.size);
} }
DestroyQueue(&a_quecu);
printf("队列已销毁\n");
return 0; return 0;
} }

View File

@@ -3,7 +3,7 @@
*@作者:‘你遇了我’ *@作者:‘你遇了我’
*@time:2022/11/13 *@time:2022/11/13
*@联系:QQ:321640253 *@联系:QQ:321640253
*@版本:V1.2 *@版本:V1.3
*@描述:数组泛型队列。队列管理和容器空间分离 *@描述:数组泛型队列。队列管理和容器空间分离
使用案例: 使用案例:
@@ -23,12 +23,12 @@
* *container容器数组指针 * *container容器数组指针
* @返回值:无 * @返回值:无
* */ * */
void InitQuecu(SqQuecu *Q,uint16_t Maxsize,uint16_t NodeSize,void *container){ void InitQuecu(SqQuecu *Q,uint16_t Maxsize,uint16_t NodeSize){
Q->front=Q->rear=-1; Q->front=Q->rear=-1;
Q->size=0; Q->size=0;
Q->Maxsize=Maxsize; Q->Maxsize=Maxsize;
Q->NodeSize=NodeSize; Q->NodeSize=NodeSize;
Q->container=container; Q->container=calloc(Maxsize,Q->NodeSize);
} }
@@ -80,3 +80,12 @@ void *deQueue(SqQuecu *Q){
} }
/*
* @简介:销毁队列
* @参数:队列指针
*/
void DestroyQueue(SqQuecu *Q){
free(Q->container);
Q->front=Q->rear=Q->size=Q->Maxsize=Q->NodeSize=0;
Q->container=NULL;
}

View File

@@ -3,28 +3,29 @@
*@作者:‘你遇了我’ *@作者:‘你遇了我’
*@time:2022/11/13 *@time:2022/11/13
*@联系:QQ:321640253 *@联系:QQ:321640253
*@版本:V1.2 *@版本:V1.3
*@描述:数组泛型队列,队列管理和容器空间分离 *@描述:数组泛型队列,队列管理和容器空间分离
使用案例 使用案例
int a[10]; //创建队列容器 int main(){
SqQuecu a_quecu; //初始化队列
InitQuecu(&a_quecu,10,sizeof(int),(void*)a);
SqQuecu a_quecu; //初始化队列
InitQuecu(&a_quecu,10,sizeof(int));
//出队进队测试 //出队进队测试
int *tmep;//临时存储进对的返回值 int *tmep;//临时存储进对的返回值
for (size_t i = 0; i < 50; i++) for (size_t i = 0; i < 50; i++)
{ {
tmep = (int*)enQueue(&a_quecu); tmep = (int*)enQueue(&a_quecu);
if(tmep!=NULL){ //返回值为空指针则 if(tmep!=NULL){ //返回值为空指针则
*tmep=i; *tmep=i;
} }
else{ else{
printf("出队元素:%d\n",*(int*)deQueue(&a_quecu)); printf("出队元素:%d\n",*(int*)deQueue(&a_quecu));
*(int*)enQueue(&a_quecu)=i; //出队后重新进队 *(int*)enQueue(&a_quecu)=i; //出队后重新进队
} }
//*******遍历队列**********
for(int i=0;i<10;i++) for(int i=0;i<10;i++)
printf("%d\n",a[i]); printf("%d\n",*(int*)(a_quecu.container+i*a_quecu.NodeSize));
//*******遍历队列**********
printf("-------------------------\n"); printf("-------------------------\n");
} }
@@ -34,6 +35,10 @@
printf("出队元素:%d\n",*(int*)deQueue(&a_quecu)); printf("出队元素:%d\n",*(int*)deQueue(&a_quecu));
printf("当前队列长度:%d\n",a_quecu.size); printf("当前队列长度:%d\n",a_quecu.size);
} }
DestroyQueue(&a_quecu);
printf("队列已销毁\n");
return 0;
}
*/ */
#ifndef LIST_QUEUE_H #ifndef LIST_QUEUE_H
@@ -52,11 +57,11 @@ typedef struct{
uint16_t size; //队列长度 uint16_t size; //队列长度
} SqQuecu; } SqQuecu;
void InitQuecu(SqQuecu *Q,uint16_t Maxsize,uint16_t NodeSize,void *container); void InitQuecu(SqQuecu *Q,uint16_t Maxsize,uint16_t NodeSize); //初始化队列
void *enQueue(SqQuecu *Q); void *enQueue(SqQuecu *Q); //进队
void *deQueue(SqQuecu *Q); void *deQueue(SqQuecu *Q); //出队
bool QueueEmpty(SqQuecu *Q); bool QueueEmpty(SqQuecu *Q); //判断队空
bool QueueFull(SqQuecu *Q); bool QueueFull(SqQuecu *Q); //判断队满
void DestroyQueue(SqQuecu *Q); //销毁队列(只销毁队列容器,队列指针本身还在)
#endif //LIST_QUEUE_H #endif //LIST_QUEUE_H