#include<stdio.h>
#include<stdlib.h>
#include<process.h>
#define MAXSIZE 10;
#define OK 1;
#define ERROR 0;
#define OVERFLOW 0;
typedef struct
{
int *data;
int front ;
int rear;
}SqQueue;
int InitQueue_Sq(SqQueue &Q)
{
Q.data=(int*)malloc(10*sizeof(int));
if(!Q.data)
exit(0);
Q.front=Q.rear=0;
return OK;
}
int EnQueue_Sq(SqQueue &Q,int e)
{
if((Q.rear+1)%10==Q.front)
return ERROR;
Q.data[Q.rear]=e;
Q.rear=(Q.rear+1)%10;
return OK;
}
void IfEmpty(SqQueue Q)
{
if(Q.rear==Q.front)
printf("该循环队列是空队列\n");
else
printf("该循环队列不是空队列\n");
}
void IfFull(SqQueue Q)
{
if((Q.rear+1)%10==Q.front)
printf("该循环队列已满\n");
else
printf("该循环队列未满\n");
}
void InQueue_Sq(SqQueue &Q,int e)
{
if((Q.rear+1)%10==Q.front)
printf("循环队列已满\n");
else
{
Q.data[Q.rear]=e;
Q.rear=(Q.rear+1)%10;
printf("元素%d成功进入循环队列\n",e);
}
}
void DeQueue_Sq(SqQueue &Q)
{
int e;
if(Q.front==Q.rear)
printf("循环队列为空\n");
e=Q.data[Q.front];
printf("循环队列队首元素是:%d\n",e);
}
void DE_Sq(SqQueue &Q)
{
int *w;
w=&Q.data[Q.front];
Q.front=Q.front+1;
printf("队首元数%d删除成功\n",*w);
}
int Length_Sq(SqQueue &Q)
{
int s;
s=(Q.rear-Q.front+10);
return s%10;
}
int OutQueue_Sq(SqQueue Q)
{
SqQueue p;
p=Q;
int i,n;
n=Length_Sq(p);
for(i=0;i<n;i++)
{
printf("%d",p.data[p.front]);
p.front++;
}
return OK;
}
void Delet(SqQueue &Q)
{
free(Q.data);
printf("释放成功");
}
int main()
{
system("cls");
printf("**********************循环队列功能菜单***********************\n");
printf("1.初始化队列输入的数不超过10个,2.判断队列是否空,3.判断队列是否满, \n");
printf("4.将元素入队, 5.取队列首元素, 6.队列的长度, 7.遍历循环队列,\n");
printf("8.删除队首元素, 9.释放队列, 10.清屏, 0.结束程序,\n");
int flag=1,i;
SqQueue Q;
InitQueue_Sq(Q);
while (flag)
{
printf("请输入操作符:");
scanf("%d",&i);
switch(i)
{
case 1:
int n,j,m;
printf("请输入初始化元素的个数:");
scanf("%d",&n);
printf("请输入元素:");
for(j=0;j<n;j++)
{
scanf("%d",&m);
EnQueue_Sq(Q,m);
}
break;
case 2:
IfEmpty(Q);
break;
case 3:
IfFull(Q);
break;
case 4:
int k;
printf("请输入要进入循环队列的元素:");
scanf("%d",&k);
InQueue_Sq(Q,k);
break;
case 5:
DeQueue_Sq(Q);
break;
case 6:
int f;
f=Length_Sq(Q);
printf("该循环队列的长度为:%d\n",f);
break;
case 7:
printf("该循环队列为:");
OutQueue_Sq(Q);
printf("\n");
break;
case 8:
DE_Sq(Q);
break;
case 9:
Delet(Q);
break;
case 10:
system("cls");
break;
case 0:
flag=0;
break;
}
}
printf("程序结束");
return 0;
}
循环队列
最新推荐文章于 2022-04-18 17:59:17 发布