#include<stdio.h>
#include<stdlib.h>
#define SIZE 11
enum ret_val
{
MALLOC_OK = 100,
MALLOC_NO,
CREATE_OK,
CREATE_NO,
EMPTY_OK,
EMPTY_NO,
FULL_OK,
FULL_NO,
POP_OK,
POP_NO,
PUSH_OK,
PUSH_NO,
};
typedef struct quece_node
{
int quece_data[SIZE];
int front;
int rear;
}*Quece;
int is_malloc_ok(Quece quece) //内存是否分配成功
{
if(NULL == quece )
{
return MALLOC_NO;
}
return MALLOC_OK;
}
int create_circ_quece(Quece *quece) //创建队列
{
*quece = (Quece)malloc(sizeof(struct quece_node));
if(MALLOC_OK == is_malloc_ok(*quece))
{
return CREATE_OK;
}
return CREATE_NO;
}
void init_quece(Quece quece) //初始化队列
{
quece->front = 0;
quece->rear = 0;
}
int is_empty(Quece quece) //判断空
{
if(quece->front == quece->rear)
{
return EMPTY_OK;
}
return EMPTY_NO;
}
int is_full(Quece quece) //判断满
{
if((quece->rear + 1)%SIZE == quece->front)
{
return FULL_OK;
}
return FULL_NO;
}
int push_quece(Quece quece, int num) //进队
{
if(FULL_NO == is_full(quece))
{
quece->rear = (quece->rear + 1)%SIZE;
quece->quece_data[quece->rear] = num;
return PUSH_OK;
}
else
{ printf("quece is full!\n");
return PUSH_NO;
}
}
int pop_quece(Quece quece, int *num) //出队
{
if(EMPTY_NO == is_empty(quece))
{
quece->front = (quece->front + 1)%SIZE;
*num = quece->quece_data[quece->front];
return POP_OK;
}
else
{
printf("quece is empty!\n");
return POP_NO;
}
}
void make_empty(Quece quece) //置空
{
quece->front = 0;
quece->rear = 0;
printf("the quece is empty!\n");
}
int main()
{
Quece quece = NULL;
int i;
int num;
if(CREATE_NO == create_circ_quece(&quece)) //创建队列
{
return 0;
}
init_quece(quece); //初始化队列
printf("push quece!\n");
for(i = 0; i < 10; i++)
{
num = i + 1;
if(PUSH_OK == push_quece(quece, num)) //进栈
{
printf("push quece is success!\n");
}
else
{
printf("push quece is fail!\n");
}
}
// make_empty(quece); //置空
printf("pop quece!\n");
for(i = 0; i < 10; i++)
{
if(POP_OK == pop_quece(quece, &num)) //出栈
{
printf("%d\n", num);
}
else
{
printf("pop quece is fail!\n");
}
}
make_empty(quece); //置空
free(quece); //释放
注意:循环队列必然会浪费一个空间 10个数 需要11个空间!!!!