#include typedef struct queue_arr
{
int * data;
int front;
int rear;
int count;
} que;
//初始化队列
que * InitQueue()
{
que * q = (que *)malloc(sizeof(que));
q->front = 0;
q->rear = 0;
q->count = 0;//可用于判断队空、队满
return q;
}
//判断队满
int FullQueue(que * q)
{
//设置队列长度为10
if((q->rear+1)%10 == q->front)
return 0;
return 1;
}
//入队函数
int EnQueue(que * q, int data)
{
if(FullQueue(q) == 0)
{
return 1;
}
else
{
q->data[q->rear] = data;
q->rear = (q->rear+1)%10;
q->count++;
return 0;
}
}
//出队函数
que * DelQueue(que * q, int data)
{
que * del = q;
int tmp = del->front,n = del->count;
if(q->count == 0)//判断队空
return q;
while(n)
{
n--;
if(del->data[tmp] == data)
{
del->front = (tmp+1)%10;
del->count = n;
return del;
}
tmp = (tmp+1)%10;
}
return q;
}
//遍历队列
void Display(que * q)
{
int i =q->front;
while(i != q->rear)
{
printf("%d ",q->data[i]);
i = (i+1)%10;
}
if(q->count == 0)
printf("队列为空!");
printf("\n");
}
//测试代码
int main()
{
que * q;
int i=10;
q = InitQueue();
printf("开始入队\n");
while(i--)
{
if(EnQueue(q,i) == 1)
printf("队满,不能入队!\n");
else
{
printf("数字 %d 入队后,队列成员为:",i);
Display(q);
}
}
i=10;
printf("开始出队\n");
while(i--)
{
DelQueue(q,i);
printf("数字 %d 出队后,队列成员为:",i);
Display(q);
}
}