题目:不算难(畏惧心理使我没有早早下手)

68`YDYT10E8~6BB6770GV[O.jpg
AORV}AI3{RGUCNKX0USKV63.png

一、分析:两个功能(用到队列)(用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;

}
总结:这道题不难,难的是没有静下心来好好思考!