#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

typedef struct queue
{
int * pBase ; //数组
int front ; //头
int rear ; //尾 rear不存放数据,所以rear前面的是最后一个数据
}QUEUE ;
void init_queue(QUEUE * pQ);
bool full_queue(QUEUE * pQ);
bool en_queue(QUEUE * pQ ,int val);
void show_queue(QUEUE * pQ) ;
bool is_empty(QUEUE * pQ);
bool out_queue(QUEUE * pQ,int * pVal);

int main()
{
int val ;
QUEUE Q ;
init_queue(&Q); //初始化
en_queue(&Q,1);
en_queue(&Q,2);
en_queue(&Q,3);
en_queue(&Q,4);
en_queue(&Q,5);
en_queue(&Q,6);
// en_queue(&Q,7);

show_queue(&Q);
if(out_queue(&Q,&val))
{
printf("出队成功,出队的元素是:%d\n",val);
}
else
{
printf("出队失败!") ;
}
show_queue(&Q) ;

}
void init_queue(QUEUE * pQ) //传入的是 QUEUE型的指针所以是QUEUE *
{
pQ->pBase =(int *)malloc(sizeof(int)*6);//创建了6个大小的数组,实际上只能放5个
pQ->rear = 0 ;
pQ->front = 0 ;
}
//判断循环队列是否为满:少用一个元素如果(rear+1)%6 == front 则满
bool full_queue(QUEUE * pQ)
{
if((pQ->rear+1)%6==pQ->front ) return true ;
else return false ;
}
bool en_queue(QUEUE * pQ ,int val)
{
if(full_queue(pQ))
{
return false ;
}
else
{
pQ->pBase[pQ->rear] =val ;
pQ->rear =(pQ->rear+1)%6 ;
return true ;
}
}
void show_queue(QUEUE * pQ)
{
int i =pQ->front ; //让i=头部序列
while(i!=pQ->rear)
{
printf("%d ",pQ->pBase[i]);
i=(i+1)%6;
}
printf("\n");
}
bool is_empty(QUEUE * pQ)
{
if(pQ->rear == pQ->front) return true ;
else return false ;
}
bool out_queue(QUEUE * pQ,int * pVal)
{
if(is_empty(pQ))
{
return false;
}
else
{
*pVal=pQ->pBase[pQ->front];
pQ->front=(pQ->front+1)%6 ;
return true ;
}
}

05-11 20:57