题目:不算难(畏惧心理使我没有早早下手)
一、分析:两个功能(用到队列)(用if进行判断)
1.in正常插入学生
a.构建结构体;
b.初始化队列;
c.插入元素到队列;
2.输出学生,不过这一步要判断out(if判断),对应不同的分支走向;对于out的元素如果是头元素就输出,如果不是先输出头元素并保存,然后覆盖下一个头元素,这样插队的人就变相输出出去了,而被插队的人仍是第一个元素。
3.主函数:包括定义结构体队列,输入,if判断in和out,输出;
二、废话不多说,实现功能
1.正常插入:
a.构建结构体:
//定义结构体
typedef struct
{
string name;
}Student;
typedef struct
{
Student *stu;
int front;
int rear;
}Sql;
b.初始化队列:
//初始化队列
int InitQueue(Sql &Q)
{
Q.stu=new Student[MAX];
Q.front=Q.rear=0;
return 0;
}
c.插入元素到队列:
void InQueue(Sql &Q,string s)
{
if((Q.rear+1)%MAX==Q.front)
{
cout<< "入队失败!队列已满!"<<endl;
}
Q.stu[Q.rear].name=s;
Q.rear=(Q.rear+1)%MAX;
cout<< "入队成功!"<<endl;
}
2.输出学生
int OutQueue(Sql &Q,string s, Student c)
{
if(Q.front==Q.rear)
{
cout<< "队列为空!出队失败!"<<endl;
return 0;
}
if(Q.stu[Q.front].name==s)
{
c=Q.stu[Q.front];
Q.front=(Q.front+1)%MAX;
cout<< "出队成功,没有插队"<<endl;
return 1;
}else
{
c=Q.stu[Q.front];
Q.front=(Q.front+1)%MAX;
Q.stu[Q.front]=c;
cout <<"出队成功,有插队"<<endl;
return 0;
}
}
3.主函数:
int main(void)
{
Sql q;
InitQueue(q);
int T,n,a=0;
string s1,s2;
cin>>T>>n;
for(int i=0;i<n;i++)
{
cin>>s1>>s2;
if(s1=="in")
{
InQueue(q,s2);
}else
{
Student d;
a+=OutQueue(q,s2,d);
}
cout<<a<<endl;
}
return 0;
}
总结:这道题不难,难的是没有静下心来好好思考!
最后一次更新于2022-01-22
博主写的非常的好,看完后让我学习到了很多。让我深深地了解到了题目的解法,我认为这个博客写的引人深思,发人深省,振聋发聩,非常完美。
By George at January 22nd, 2022 at 05:28 pm.