一、分析:两个功能(用到队列)(用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;
}
总结:这道题不难,难的是没有静下心来好好思考!