C++程序题。循环队列

请实现一个循环队列,按输入的数据,产生输出。输入格式:第1行输入队列的长度n(也即该循环队列最多可容纳n-1个元素,有1个空间保留不用);第二行输入对循环队列操作的步骤数... 请实现一个循环队列,按输入的数据,产生输出。输入格式:第1行输入队列的长度n (也即该循环队列最多可容纳n-1个元素,有1个空间保留不用);第二行输入对循环队列操作的步骤数m;从第三行起,共m行,每行表示对循环队列的一次操作,有以下两种形式: 形式1: IN NUM 形式2: OUT其中形式1表示往队列中添加一个元素NUM,NUM是一个整数;形式2表示从队列中取出一个元素。
输出格式:输出m行,其中第i行 (1<=i<=m)输出对循环队列的第i次操作后的结果,有以下几种形式: 形式1: EMPTY 形式2: FULL 形式3: NUM1,NUM2,NUM3...其中形式1表示从队列取元素的操作失败,队列为空;形式2表示对队列添加元素的操作失败,队列为满;形式3表示,操作成功,列出队列中所有的元素,元素的排列顺序按照他们在队列中的先后次序。4. 输入示例:48IN 1IN 2IN 3IN 4OUTOUTOUTOUT
输出示例:11 21 2 3FULL2 33EMPTY(注意第7次操作的结果的输出采用的形式3的输出,因为队列中没有元素,所以输出一个空行)提交源代码、测试的数据以及使用说明
展开
 我来答
匿名用户
2013-05-29
展开全部
#include<stdio.h>
#include<process.h>
#include<iostream.h>
#include<stdlib.h>#define MaxSize 100
typedef int ElemType;
typedef struct
{
ElemType data[MaxSize];
int front;
int rear;
}CircSeqQueue;//顺序循环队列的初始化
void QueueInitial(CircSeqQueue *pQ)
{
//创建一个又指针pQ所指向的空顺序循环队列
pQ->front=pQ->rear=0;
}//顺序循环队列判空
int IsEmpty(CircSeqQueue *pQ)
{//顺序循环队列为空时返回1,否则返回0
return pQ->front==pQ->rear;
}//顺序循环队列判满
int IsFull(CircSeqQueue *pQ)
{//循环队列为满时返回1,否则返回0
return (pQ->rear+1)%MaxSize==pQ->front;
}//元素进队
void EnQueue(CircSeqQueue *pQ, ElemType e)
{//若队列不满,则元素e进队
if(IsFull(pQ))//队列已满,退出
{
printf("队列溢出!\n");
exit(1);
}
pQ->rear=(pQ->rear+1)%MaxSize;//队尾指针后移
pQ->data[pQ->rear]=e;
}//元素出队
ElemType DeQueue(CircSeqQueue *pQ)
{//若循环队列不为空,则删除队头元素,并返回它的值
if(IsEmpty(pQ))//队列为空,退出
{
printf("空队列!\n");
exit(1);
}
pQ->front=(pQ->front+1)%MaxSize;//队头指针后移
return pQ->data[pQ->front];
}//取队头元素
ElemType GetFront(CircSeqQueue *pQ)
{//若队列不为空,则返回队头元素的值
if(IsEmpty(pQ))
{
printf("空队列!\n");
exit(1);
}
return pQ->data[(pQ->front+1)%MaxSize];
}//循环队列置空
void MakeEmpty(CircSeqQueue *pQ)
{//将由指针pQ所指向的队列变为孔队
pQ->front=pQ->rear=0;
} void output()
{
int i;
for(i=0;i<32;i++)
printf("+");
printf("\n");
printf("1.元素进队\n");
printf("2.元素出队\n");
printf("3.队首元素读取\n");
printf("4对列制空\n");
printf("5.退出\n");
for(i=0;i<32;i++)
printf("+");
printf("\n");
} void main()
{
int k,m,n,i;
CircSeqQueue *pQ;
ElemType e;
pQ=new CircSeqQueue;
QueueInitial(pQ);
output();
while(k)
{
printf("请选择:1-5\n");
scanf("%d",&m);
switch(m)
{
case 0:return;
case 1:
printf("请输入入队元素的个数:\n");
scanf("%d",&n);
printf("输入元素,入队\n");
for(i=0;i<n;i++)
{
scanf("%d",&e);
EnQueue(pQ,e); } break;

case 2:
{
printf("请输入出队元素的个数\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
e=DeQueue(pQ);
printf("%d\n",e);
} break;
}
case 3:
{
printf("取出队首元素\n");
e=GetFront(pQ);
printf("%d\n",e);
break;
}
case 4:
{
printf("队列置空\n");
MakeEmpty(pQ);
printf("\n");
break;
}
default:return;
}
printf("是否继续(1|0)\n");
scanf("%d",&k);
if(!k) return;
}
}看下吧!不是很完善!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式