队列 先入先出 FIFO

如果 rear 等于front 说明当前队列是空的
如果 Q->rear + 1 整除队列大小 == Q->front 代表队列是满了 没法继续插入了
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MaxQsize 1000
#define ERROR -1
struct Queue{
int customer[MaxQsize]; #一个一般的数组
int rear; #一个表示后的int
int front; #一个表示前的int
};
typedef struct Queue Queue; #改名字
Queue * initialQ(){
	Queue *q = NULL;
	q = (Queue *)malloc(sizeof(Queue));
	q->rear = q->front = 0;          #初始化
	return q;
} 
bool is_emptyq(Queue *Q){      #是否为空
	  if(Q->front == Q->rear){
		    return true;
	  }else{
		    return false;
	  }
}
bool is_fullq(Queue *Q){            #是否为满
	  if((Q->rear + 1) % MaxQsize == Q->front){
		    return true;
	  }else{
		    return false;
	  }
}
void addQ(Queue *Q,int num){
	  if(is_fullq(Q)){
		    printf("满了,无法添加\n");
		    return ;
	  }else{
		    Q->customer[Q->rear] = num;
		    Q->rear = (Q->rear+1) % MaxQsize;            #加一
		    printf("添加了%d\n",num);
	  }
}
int deleteQ(Queue *Q){
	  int item;
	  if(is_emptyq(Q)){
		    printf("空的\n");
		    return ERROR; 
	  }else{
		    item = Q->customer[Q->front];
    Q->customer[Q->front] = 0;                    #删除后 为0
		    Q->front = (Q->front+1) % MaxQsize;   #front加一 
		    printf("拿出了%d\n",item);
		    return item;
	   }
}
void print_list(Queue *Q){
	  int i=0;
	  printf("[");
	  for(i=0;i<MaxQsize;i++){
		    printf("%d,",Q->customer[i]);
	  }
	  printf("]\n");
}
int main(){
	  int N,i,cur,flag;
	  Queue *q1 = initialQ();
	  addQ(q1,1);
	  addQ(q1,2);
	  addQ(q1,3);
	  addQ(q1,4);
	  print_list(q1);
	  deleteQ(q1);
	  print_list(q1);
	  addQ(q1,5);
	  print_list(q1);
	  deleteQ(q1);
	  print_list(q1);
	  addQ(q1,6);
	  print_list(q1);
	  deleteQ(q1);
	  print_list(q1);
	  deleteQ(q1);
	  print_list(q1);
	  deleteQ(q1);
	  deleteQ(q1);
	  deleteQ(q1);
	
	  return 0;
}

原文:https://www.cnblogs.com/hywhyme/p/11571815.html