队列 先入先出 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("满了,无法添加
");
return ;
}else{
Q->customer[Q->rear] = num;
Q->rear = (Q->rear+1) % MaxQsize; #加一
printf("添加了%d
",num);
}
}
int deleteQ(Queue *Q){
int item;
if(is_emptyq(Q)){
printf("空的
");
return ERROR;
}else{
item = Q->customer[Q->front];
Q->customer[Q->front] = 0; #删除后 为0
Q->front = (Q->front+1) % MaxQsize; #front加一
printf("拿出了%d
",item);
return item;
}
}
void print_list(Queue *Q){
int i=0;
printf("[");
for(i=0;i<MaxQsize;i++){
printf("%d,",Q->customer[i]);
}
printf("]
");
}
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;
}