#include<stdio.h>
#include<stdlib.h>
#define MAX_SIZE 10
enum return_result
{
MALLOC_ERROR=1000,PUSH_OK,FULL_OK,FULL_NO,EMPTY_OK,EMPTY_NO,PUSH_ERROR,POP_ERROR,POP_OK
};
struct cirquece_data
{
int cirquece[MAX_SIZE];
int top;
int buttom;
};
typedef struct cirquece_data CirQuece;
int create_cirquece(CirQuece**cirquece)
{
*cirquece=(CirQuece*)malloc(sizeof(struct cirquece_data));
if(NULL==*cirquece)
{
printf("malloc is error!\n");
return MALLOC_ERROR;
}
}
int init_cirquece(CirQuece**cirquece)
{
(*cirquece)->top=0;
(*cirquece)->buttom=0;
}
int is_full(CirQuece**cirquece)
{
if((((*cirquece)->top)+1)%MAX_SIZE==(*cirquece)->buttom)
{
return FULL_OK;
}
return FULL_NO;
}
int is_empty(CirQuece**cirquece)
{
if((*cirquece)->top==(*cirquece)->buttom)
{
return EMPTY_OK;
}
return EMPTY_NO;
}
int push_cirquece(CirQuece**cirquece,int num)
{
if(FULL_OK==is_full(cirquece))
{
printf("the cirquece is full!\n");
return PUSH_ERROR;
}
(*cirquece)->top=((*cirquece)->top+1)%MAX_SIZE;
((*cirquece)->cirquece[(*cirquece)->top])=num;
return PUSH_OK;
}
int pop_cirquece(CirQuece**cirquece)
{ int result;
if(EMPTY_OK==is_empty(cirquece))
{
printf("the cirquece is empty!\n");
return POP_ERROR;
}
(*cirquece)->buttom=(((*cirquece)->buttom+1)%MAX_SIZE);
// ((*cirquece)->buttom)--;
result=(*cirquece)->cirquece[(*cirquece)->buttom];
return result;
}
int main()
{
CirQuece*cirquece;
create_cirquece(&cirquece);
init_cirquece(&cirquece);
int i,t;
for(i=0;i<10;i++)
{
if(PUSH_OK==push_cirquece(&cirquece,i+1))
{
printf("push_cirquece num:%d\n",i+1);
}
else
{
break;
}
}
for(i=0;i<10;i++)
{
t=pop_cirquece(&cirquece);
if(POP_ERROR==t)
{
break;
}
else
{
printf("pop_cirquece num:%d\n",t);
}
}
}