//构造循环队列
#include "stdio.h"
#include "malloc.h"
typedef struct queue
{
int * pbase;//用来指向数组
int front;//队列的头指针
int rear;//队列的尾指针
}QUEUE;
void init(QUEUE *);//初始化队列
bool en_queue(QUEUE *,int i);//入队
bool is_full(QUEUE *);
void traverse(QUEUE *);//遍历队
bool is_empty(QUEUE *p);
void out_queue(QUEUE *p,int *pval);//出队
int main()
{
int i;//存放岀队的元素
QUEUE q;//声明一个队列
init(&q);
en_queue(&q,1);
en_queue(&q,2);
en_queue(&q,3);
en_queue(&q,4);
traverse(&q);
out_queue(&q,&i);
printf("出队元素为:%d\n",i);
traverse(&q);
return 0;
}
void init(QUEUE *p)
{
printf("初始化一个长度为6的队列\n");
p->pbase=(int *)malloc(sizeof(int)*6);
p->front=0;
p->rear=0;
}
bool en_queue(QUEUE *p,int i)
{
if(is_full(p))
return 0;
else
{
printf("入队成功!\n");
//队列非空的情况下front指向头元素,rear指向最后一个有效元素的下一个元素
p->pbase[p->rear]=i;
p->rear=(p->rear+1)%6;
return 1;
}
}
bool is_full(QUEUE *p)
{
//若rear+1=front则队列满,n个空间的队列只使用n-1个
if((p->rear+1)%6==p->front)
{
printf("数组以满!\n");
return 1;
}
else
return 0;
}
void traverse(QUEUE *p)
{
int i=p->front;
printf("队内的元素为:\n");
while(i!=p->rear)
{
printf("%d\t",p->pbase[i]);
i=(i+1)%6;
}
}
void out_queue(QUEUE *p,int *pval)
{
if(is_empty(p))
{
printf("队列空,无法出队!\n");
}
else
{
*pval=p->pbase[p->front];
p->front=(p->front+1)%6;//岀队的方式
}
}
bool is_empty(QUEUE *p)
{
if(p->front==p->rear)//若front和rear相等,则队列为空
{
return 1;
}
else
return 0;
}