虽然实现了,但实际上并不需要每次都取余,可以自己去优化。其中,初始化的时候,l->可以是MAX-1,也可以是-1,都没什么问题
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define MAX 5
typedef struct Loop_que{
int base[MAX];
int rear;
int size;
int front;
}loop;
loop* init(){
loop *l=(loop*)malloc(sizeof(loop));
l->rear=-1;
l->size=0;
l->front=0;
}
int push(loop *l,int val){
if(l->size==MAX){
printf("overflow\n");
return 0;
}
l->rear=(l->rear+1)%MAX;
l->base[l->rear]=val;
l->size++;
printf("push %d\n",val);
return 1;
}
int pop(loop *l){
int i;
if(l->size==0){
printf("empty\n");
return 0;
}
i=l->base[l->front];
l->base[l->front]=0;
l->front=(l->front+1)%MAX;
printf("pop\n");
l->size--;
return 1;
}
void tra(loop *l){
for(int i=0;i<MAX;i++){
printf("%d ",l->base[i]);
}
printf("size=%d",l->size);
printf("\n");
}
int main(){
loop *l= init();
push(l,1);
push(l,2);
push(l,3);
push(l,4);
push(l,5);
tra(l);
pop(l);
pop(l);
pop(l);
push(l,6);
tra(l);
return 0;
}