#include<stdio.h>
#include<stdlib.h>
#define size 10
enum return_val{malloc_ok,malloc_no,
full_ok,full_no,empty_ok,empty_no,push_ok
};
struct queue_data{
int queue[size];
int rear;
int front;
};
typedef struct queue_data Queue;
int create_queue(Queue ** queue)
{
*queue=(Queue *)malloc(sizeof(Queue));
if((*queue)==NULL)
{
return malloc_no;
}
return malloc_ok;
}
void init_queue(Queue **queue) //初始化
{
(*queue)->rear=0;
(*queue)->front=0;
}
int is_full(Queue **queue)
{
if( ( ((*queue)->rear)+1 ) % size == (*queue)->front ) //判断队列是否满
{
return full_ok;
}
return full_no;
}
int is_empty(Queue **queue)
{
if( ( (*queue)->rear) == ((*queue)->front)) //判空
{
return empty_ok;
}
return empty_no;
}
int push_queue(Queue **queue,int num) //入队
{
if(is_full(queue) == full_ok)
{
printf("the queue is full\n");
return full_ok;
}
(*queue)->queue[(*queue)->rear]=num;
(*queue)->rear=( ( (*queue)->rear ) + 1 )%size;
return push_ok;
}
int pop_queue(Queue **queue) //出队
{
if(is_empty(queue) == empty_ok)
{
printf("the queue is empty!\n");
exit(empty_ok);
}
int res=(*queue)->queue[((*queue)->front)];
(*queue)->front=((*queue)->front+1)%size;
return res;
}
int main()
{
Queue *queue;
if(malloc_ok == create_queue(&queue))
{
printf("create queue success!\n");
}
else
{
exit(-1);
}
init_queue(&queue);
int i;
for(i = 0; i <11 ; i++)
{
if(push_queue(&queue,i+1) == push_ok)
{
printf("push num: %d\n",i+1);
}
}
for(i = 0; i < 5; i++)
{
printf("pop num: %d\n",pop_queue(&queue));
}
printf("now front num: %d\n",queue->queue[(queue->front)]);
for(i = 0; i <3 ; i++)
{
if(push_queue(&queue,i+1) == push_ok)
{
printf("push num: %d\n",i+1);
}
}
printf("now rear num: %d\n",queue->rear);
free(queue);
return 0;
}