#include #include #include #include #define queuesize 5 typedef struct //定义结构体 { char name[20]; //定义一个长度为 20 的字符串,用来表示姓名 char sex; //定义一个 char 变量 sex,用来表示性别,规定m 表示男性,f 表示女性 }person_type; typedef struct //定义循环队列结构体队列 { person_type *qBase; //储存空间基址 int front; //头指针,若队列不空,指向队列头元素 int rear; //尾指针,若队列不空,指向队列尾元素的下一个位置 }cir_queue; void init_queue(cir_queue *q) //初始化循环队列 { q->qBase =(person_type *)malloc(sizeof(person_type)*queuesize); //动态创建储存空间基址 if(!q->qBase ) //创建失败,退出程序! { printf("动态创建失败,程序终止!"); exit(-1); } q->front=q->rear=0; } /* void traverse_queue(cir_queue *q) //遍历输出循环队列元素 { int i=q->front ; while(i != q->rear )//当头指针与尾指针相等时结束 while 循环 { printf("%s\n",q->qBase[i].name );//输出元素的名字 i=(i+1)%queuesize; //解决假溢出问题 } } */ bool full_queue(cir_queue *q) //判断循环队列是否为满 {//当尾指针的下一个位置等于头指针时,队列为满 // 为满返回 true,否则返回 false if((q->rear+1)%queuesize == q->front ) return true; else return false; } bool empty_queue(cir_queue *q)//判断循环队列是否为空 {//当头指针位置等于尾指针时,循环队列为空, //为空返回 true,否则返回 false if(q->front == q->rear ) return true; else return false; } void en_queue(cir_queue *q,person_type p)//进队函数,使 p 进入队列 { if(full_queue(q))//判断是否为满 { printf("队列已满,无法实现进队操作,程序终止!"); exit(-1); } else //不满进行操作 { q->qBase[q->rear] = p; q->rear=(q->rear+1)%queuesize; //尾指针指向下一个位置 } } person_type de_queue(cir_queue *q)//出队函数,用 p 返回出队值 { person_type p; if(empty_queue(q))//判断是否为空 { printf("队列为空,无法实现出队操作,程序终止!"); exit(-1); } else //不为空进行操作 { p=q->qBase[q->front]; q->front=(...