/*
*循环队列的创建
*循环队列的判断空或者满
*入队
*出队
*取对头元素
*/
#include<stdio.h>
typedef int element;
#define MAXSIZE 1024
typedef struct seq_queue
{
element data[MAXSIZE];
int rear;//队尾
int front;//对头
}Seq_Queue;
Seq_Queue*creat_seqqueue();//循环队列的创建
int empty_seqqueue(Seq_Queue*s);//判断循环队列是否为空
int full_seqqueue(Seq_Queue*s);//判断循环队列是否已满
int enter_seqqueue(Seq_Queue*s,element x);//入队
int pop_seqqueue(Seq_Queue*s,element *x);//出队
int getdata_seqqueue(Seq_Queue*s,element *x);//取对头元素
int length_seqqueue(Seq_Queue*s);//求队列的长度
void main()
{
Seq_Queue*s;
element x,y,z;
int len;
s=creat_seqqueue();
if(s==NULL)
printf("循环队列创建失败:\n");
else
printf("循环队列创建成功:\n");
if(empty_seqqueue(s))
printf("该循环队列为空:\n");
else
printf("该循环队列不为空:\n");
if(full_seqqueue(s))
printf("该循环队列已满:\n");
else
printf("该循环队列没有满:\n");
printf("请输入要入队的数据:\n");
scanf("%d",&x);
if(enter_seqqueue(s,x))
printf("入队成功:\n");
else
printf("入队失败:\n");
if(pop_seqqueue(s,&y))
printf("出队的元素为:%d\n",y);
else
printf("出队失败:\n");
printf("队列的长度为:%d\n",length_seqqueue(s));
if( getdata_seqqueue(s,&y))
printf("对头元素为:%d\n",y);
else
printf("取对头元素失败:\n");
}
int empty_seqqueue(Seq_Queue*s)//判断循环队列是否为空
{
if(s->rear==s->front)
return 1;
else
return 0;
}
int full_seqqueue(Seq_Queue*s)//判断循环队列是否已满
{
if((s->rear+1)%MAXSIZE==s->front)
return 1;
else
return 0;
}
int length_seqqueue(Seq_Queue*s)//求队列的长度
{
if(s->front==s->rear)
return 0;
else
return((s->rear-s->front+MAXSIZE)%MAXSIZE) ;
}
int enter_seqqueue(Seq_Queue*s,element x)//入队
{
if(full_seqqueue(s))
return 0;
else
{
s->data[s->rear]=x;
s->rear=(s->rear+1)%MAXSIZE;
return 1;
}
}
int pop_seqqueue(Seq_Queue*s,element *x)//出队
{
if(empty_seqqueue(s))
return 0;
else
{
*x=s->data[s->front];
s->front=(s->front+1)%MAXSIZE;
return 1;
}
}
Seq_Queue*creat_seqqueue()//循环队列的创建
{
Seq_Queue*s;
element x;
int i=0;
s=(Seq_Queue*)malloc(sizeof(Seq_Queue));
if(s==NULL)
return NULL;
else
{
s->front=0;
s->rear=0;
}
printf("请输入数据:\n");
scanf("%d",&x);
while(x!=0)
{
s->data[i++]=x;
s->rear++;
scanf("%d,&x");
}
return s;
}
int getdata_seqqueue(Seq_Queue*s,element *x)//取对头元素
{
if(empty_seqqueue(s))
return 0;
else
{
*x=s->data[s->front];
return 1;
}
}