//循环队列的实现
#include<stdio.h>
#define MaxSize 5
typedef struct CircleQueue{
int data[MaxSize];
int front,rear;
}Queue,*pQueue;
void Initqueue(pQueue); //初始化
int Isempty(pQueue); //判断队空
int Isfull(pQueue); //判断队满
int Enqueue(pQueue,int *); //元素入队
int Exqueue(pQueue,int *); //元素出队
void Traverse(pQueue); //遍历
int main(void)
{
int val,i;
Queue s1;
Initqueue(&s1); //初始化
if(Isempty(&s1)) //判断队空
printf("队为空!\n");
else printf("队不空!\n");
for(i=0;i<4;i++)
{
printf("请输入入队元素:"); //入队4个元素
scanf("%d",&val);
if(Enqueue(&s1,&val))
printf("元素%d入队成功!\n",val);
else printf("队满,入队失败!\n");
}
if(Isfull(&s1)) //判断队满
printf("队满!\n");
else printf("队不满!\n");
if(Exqueue(&s1,&val)) //出队
printf("出队成功!出队元素为:%d\n",val);
else printf("队空!出队失败!\n");
printf("请输入入队元素:"); //入队
scanf("%d",&val);
if(Enqueue(&s1,&val))
printf("元素%d入队成功!\n",val);
else printf("队满,入队失败!\n");
if(Isfull(&s1))
printf("队满!\n");
else printf("队不满!\n");
Traverse(&s1);
return 0;
}
//初始化
void Initqueue(pQueue ps1)
{
ps1->front=ps1->rear=0;
}
//判断队空,空返回1,不空返回0
int Isempty(pQueue ps1)
{
if(ps1->front==ps1->rear)
return 1;
else return 0;
}
//判断队满,满返回1,不满返回0
int Isfull(pQueue ps1)
{
if((ps1->rear+1)%MaxSize == ps1->front)
return 1;
else return 0;
}
//val元素入队,成功返回1,失败返回0
int Enqueue(pQueue ps1,int *val)
{
if(Isfull(ps1))
return 0;
else
{
ps1->data[ps1->rear]=*val;
ps1->rear=(ps1->rear+1)%MaxSize;
return 1;
}
}
//元素出队,用val作为返回值,成功返回1,失败返回0
int Exqueue(pQueue ps1,int *val)
{
if(Isempty(ps1))
return 0;
else
{
*val=ps1->data[ps1->front];
ps1->front=(ps1->front+1)%MaxSize;
return 1;
}
}
//遍历
void Traverse(pQueue ps1)
{
int i;
if(Isempty(ps1))
printf("循环队列为空!\n");
else
{
printf("遍历结果为: ");
for(i=ps1->front;i!=ps1->rear;i=(i+1)%MaxSize)
printf("%d ",ps1->data[i]);
}
}
(C语言)循环队列的实现
最新推荐文章于 2022-05-17 16:45:08 发布