user-0 提问: 顺序队列!!!新手问题！！求大神指教！！明天就要交作业了！！

回复:
user: user-1
content: C++ 直接用容器

user: user-2
content: if(front == Q->rear) {         printf("队列为空\n");         return;     } 若队列已空，就应该直接退出函数，而不是继续执行出队列操作；

user: user-0
content: 引用 1 楼 hefashion0190 的回复:仅供参考 #include<stdio.h> #include<stdlib.h>  #define MAXQSIZE 10  typedef struct worker { int id; char name[20]; }WORKER;  typedef struct queue { WORKER data[MAXQSIZE]; int front;	//队头  int rear;	//队尾  }QUE; //初始化	构建一个空队列  void initQueue(QUE *Q) { Q->front = Q->rear = 0;	//无须重复队头和队尾分配空间 	  }   //入队 void enterQueue(QUE *Q,WORKER newWor)	//队尾入队  { if(Q->front == (Q->rear+1) % MAXQSIZE)	 printf("%s","队列已满");   Q->data[Q->rear] = newWor;	//队尾入新的元素  Q->rear=(Q->rear+1) % MAXQSIZE;	//队尾指针向后移动一个元素  //若到最后则转到数组头部 } void deleteQueue(QUE *Q) { if(Q->front == Q->rear) //f=r printf("队列已空\n");  else    //对头出队 {       //先进先出  Q->front = (Q->front+1) % MAXQSIZE;     //队头指针向后移动一个元素 //若到最后则转到数组头部 deleteQueue(Q); } } //输出队列元素 void outPutQueue(QUE *Q) { int front = Q->front; //if(Q->front == Q->rear) if(front == Q->rear) printf("队列为空\n");  while(front != Q->rear) //while(Q->front != Q->rear) { //printf("编号：%d \t姓名：%s\n",Q->data[Q->front].id,Q->data[Q->front].name); printf("编号：%d \t姓名：%s\n",Q->data[front].id,Q->data[front].name); //Q->front = (Q->front+1) % MAXQSIZE; front = (front+1) % MAXQSIZE; }  }  int main(int argc, char *argv[]) { WORKER W1 = {12345,"zhangsan"}; WORKER W2 = {23456,"lisi"}; WORKER W3 = {34567,"wangwu"};  QUE Q; initQueue(&Q);  enterQueue(&Q,W1); enterQueue(&Q,W2); enterQueue(&Q,W3);  outPutQueue(&Q); printf("\n"); //这里我要再次插入元素才能删除，要不然就显示为空 //我知道为空的原因是  调用outPutQueue(&Q)函数  导致  Q->front == Q->rear //现在我想实现是只用插入一次元素 //而不是现在这样子才能实现删除功能并把元素输出出来 //求大神指教！！！！！ //enterQueue(&Q,W1); //enterQueue(&Q,W2); //enterQueue(&Q,W3);  deleteQueue(&Q); outPutQueue(&Q);  return 0; } 谢谢大神，豁然开朗

user: user-3
content: 仅供参考 #include<stdio.h> #include<stdlib.h>  #define MAXQSIZE 10  typedef struct worker { int id; char name[20]; }WORKER;  typedef struct queue { WORKER data[MAXQSIZE]; int front;	//队头  int rear;	//队尾  }QUE; //初始化	构建一个空队列  void initQueue(QUE *Q) { Q->front = Q->rear = 0;	//无须重复队头和队尾分配空间 	  }   //入队 void enterQueue(QUE *Q,WORKER newWor)	//队尾入队  { if(Q->front == (Q->rear+1) % MAXQSIZE)	 printf("%s","队列已满");   Q->data[Q->rear] = newWor;	//队尾入新的元素  Q->rear=(Q->rear+1) % MAXQSIZE;	//队尾指针向后移动一个元素  //若到最后则转到数组头部 } void deleteQueue(QUE *Q) { if(Q->front == Q->rear) //f=r printf("队列已空\n");  else    //对头出队 {       //先进先出  Q->front = (Q->front+1) % MAXQSIZE;     //队头指针向后移动一个元素 //若到最后则转到数组头部 deleteQueue(Q); } } //输出队列元素 void outPutQueue(QUE *Q) { int front = Q->front; //if(Q->front == Q->rear) if(front == Q->rear) printf("队列为空\n");  while(front != Q->rear) //while(Q->front != Q->rear) { //printf("编号：%d \t姓名：%s\n",Q->data[Q->front].id,Q->data[Q->front].name); printf("编号：%d \t姓名：%s\n",Q->data[front].id,Q->data[front].name); //Q->front = (Q->front+1) % MAXQSIZE; front = (front+1) % MAXQSIZE; }  }  int main(int argc, char *argv[]) { WORKER W1 = {12345,"zhangsan"}; WORKER W2 = {23456,"lisi"}; WORKER W3 = {34567,"wangwu"};  QUE Q; initQueue(&Q);  enterQueue(&Q,W1); enterQueue(&Q,W2); enterQueue(&Q,W3);  outPutQueue(&Q); printf("\n"); //这里我要再次插入元素才能删除，要不然就显示为空 //我知道为空的原因是  调用outPutQueue(&Q)函数  导致  Q->front == Q->rear //现在我想实现是只用插入一次元素 //而不是现在这样子才能实现删除功能并把元素输出出来 //求大神指教！！！！！ //enterQueue(&Q,W1); //enterQueue(&Q,W2); //enterQueue(&Q,W3);  deleteQueue(&Q); outPutQueue(&Q);  return 0; }