#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 20
//循环队列
typedef int datatype;
typedef struct
{
datatype data[MAXSIZE];//队列的数据存储区
int front,rear;//队列的头尾指针
int size;//记录队列的长度
}CSeQueue;
//初始化队列
CSeQueue InitSeQueue(CSeQueue *q)
{
q->front=q->rear=0;
q->size=0;
}
CSeQueue InitSeQueue1(CSeQueue *q)
{
q->front=q->rear=0;
q->size=0;
printf("队列已被清空!\n");
}
//入队rear移动 ++
int InSeQueue(CSeQueue *q,datatype x)
{
if((q->rear+1)%MAXSIZE==q->front)
{
printf("队满!");
return -1;//队满不能入队
}
else{
q->rear=(q->rear+1)%MAXSIZE;
q->data[q->rear]=x;
q->size++;
return 1;//入队成功
}
}
//出队front移动--
int outSeQueue(CSeQueue *q,datatype *x)//*x是带回值的指针
{
if(q->front==q->rear)
{
printf("队空!");
return -1;//队空不能出栈
}
else
{
q->front=(q->front+1)%MAXSIZE;
*x=q->data[q->front];//读取最开始的入队元素
q->size++;
return 1;
}
}
//判队空
int EmptySeQueue(CSeQueue *q)
{
if(q->front==q->rear)
return 1;
else
return -1;
}
//取队列首个元素
datatype Top_SeqStack(CSeQueue *q)
{
if(q->front==q->rear)
{
printf("队空!");
return -1;//队空不能出栈
}
else
{
q->front=(q->front+1)%MAXSIZE;
return (q->data[q->front]);
}
}
//求队列长度
int long_SeqStack(CSeQueue *q)
{
return (q->rear-q->front+MAXSIZE)%MAXSIZE;
}
//遍历队列
void output(CSeQueue *q)
{
int i;
i=(q->front+1);
if(q->front!=q->rear){
while(i!=(q->rear+1))
{
printf("%3d",q->data[i]);
i++;
}}
else
printf("队列空!无法遍历!\n");
}
//5.队的遍历:
void print(CSeQueue *q)
{
int i=0;
i=q->front;
while(q->rear != q->front) //直到队尾追上队头,也就是队为空,退出遍历 //每次输出的实际上是队的数据
{
q->front = (q->front + 1) % MAXSIZE;
printf("%3d", q->data[q->front]);
}
q->front=i;
}
int main()
{
CSeQueue q1;
InitSeQueue(&q1);
datatype num=1,num1,num2,num3;
int num4,num6;
printf("0表示退出队列\n");
printf("1表示入队列\n");
printf("2表示出队列\n");
printf("3表示取队列元素\n");
printf("4表示判断队列是否为空\n");
printf("5表示销毁栈\n");
printf("6表示求队列的长度\n");
printf("7遍历队列\n");
printf("8表示队列置空\n");
printf("请输入你的指令!\n");
while(num!=0)
{
printf("\n请输入指令:");
scanf("%d",&num);
switch(num)
{
case 0:num=0;
break;
case 1:printf("请输入入队的元素:\n");
scanf("%d",&num1);
InSeQueue(&q1,num1);
break;
case 2:outSeQueue(&q1,&num2);
printf("%d\n",num2);
break;
case 3:num3=Top_SeqStack(&q1);
printf("取队列首个的元素为:%d\n",num3);
break;
case 4:num4=EmptySeQueue(&q1);
printf("判断结果为:%d\n",num4);
printf("其中:1.为空,-1.为非空\n");
break;
case 5:num=0;
break;
case 6:num6=long_SeqStack(&q1);
printf("队列的长度为:%d",num6);
break;
case 7:print(&q1);
break;
case 8:InitSeQueue1(&q1);
break;
default:
printf("输入指令错误,请重输!\n");
}
}
}
版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://www.cnblogs.com/5ran2yl/p/16380269.html,作者:~java小白~,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。