/*循环队列(用标志位实现方法)*/
#include<stdio.h>
#define m 10
typedef struct cycque
{
int data[m];
int rear; /*队尾指针*/
int quelen; /*标志*/
}CycQ;
/*初始化*/
void InitQue(CycQ *CQ)
{
CQ->rear=0;
CQ->quelen=0;
}
/*判队列空*/
int EmptyQue(CycQ *CQ)
{
if(CQ->quelen==0)
return 1;
else
return 0;
}
/*入队列*/
int EnQue(CycQ *CQ,int x)
{
if(CQ->quelen==m)
{
printf("队列满!\n");/*队列满,入队失败。*/
return 0;
}
else
{
CQ->rear=(CQ->rear+1)%m;
CQ->data[CQ->rear]=x;
CQ->quelen=CQ->quelen+1;
return 1;
}
}
/*出队列*/
int OutQue(CycQ *CQ,int *x)
{
if(EmptyQue(&CQ))
{
printf("队列空!\n");
return 0;
}
else
{
CQ->quelen=CQ->quelen-1;
*x=CQ->data[(CQ->rear+m-CQ->quelen)%m];
return 1;
}
}
/*取队列首元素*/
int GetHead(CycQ *CQ)
{
int x;
x=CQ->data[(CQ->rear+m-CQ->quelen)%m];
return x;
}
main()
{
CycQ CQ;
InitQue(&CQ);
int i,x;
printf("----创建队列----\n");
for(i=0;i<m;i++)
{
printf("请输入第%d个队列元素:\n",i+1);
scanf("%d",&x);
EnQue(&CQ,x);
}
printf("----输出队列----\n");
while(!EmptyQue(&CQ))
{
x=GetHead(&CQ);
OutQue(&CQ,&x);
printf("%d\t",x);
}
}
循环队列(用标志位实现方法)
最新推荐文章于 2024-10-07 14:07:15 发布