题目描述
叶老师想要用链表登记成绩。对于每张试卷有两个信息:学号和成绩。
对于登记成绩,要求学号小的成绩登记在学号大的成绩之前。
叶老师有两种操作:
1 a b:向链表中加入学号为a成绩为b的同学的成绩,题目保证不同的卷子不会有相同的学号。
2 k : 查询当前链表中第k个同学的成绩是多少,题目保证k小于等于当前链表的长度。
请用链表做这道题!
输入
第一行输入一个整数Q,表示操作的个数。
接下来输入Q行,每一行是(1 a b)或者(2 k)格式,分别表示第一种和第二种操作。
1 <= k, Q <= 1000
1 <= a <= 1000000000
1 <= b <= 100
输出
对于每一个第二个操作,输出一个整数表示第k个同学的成绩
样例输入 Copy
3
1 20163266 100
1 20163265 99
2 1
样例输出 Copy
99
提示
请用链表做。
链表大家都懂,大一的时候拿一堆特别抽象的指针完成,当时把我搞蒙了好一阵
(毕竟好长时间都感觉课上内容毫无压力突然来了个解决不了的瞬间心态就不是太好了)
因为用了指针,可能后面很多同学看到指针或链表就头疼。
不过感谢c++中新增了STL标准库,让链表的代码变得非常简洁且易懂,最棒的是STL未来在绝大多数情况下都可用,这对与新手小白来说,非常的友好
**#include <iostream>
#include<cstdio>
#include<algorithm>
#include<list>
using namespace std;
typedef struct students//定义一个结构体方便存储数据
{
long long num;
int score;
};
bool cmp(students stu1,students stu2)
//这个是list的sort函数中所需要的,代表按学号升序排列//
{
bool flag;
if (stu1.num < stu2.num)
{
return true;
}
else
{
return false;
}
}
int main()
{
int n;
cin >> n;
long long num1;
int search, score1;
list<students>stu1;
struct students stu2;
list<students>::iterator lit;//迭代器的指针
int flag = 0;
for (int i = 0; i < n; i++)
{
cin >> flag;
if (flag == 1)
{
cin >> stu2.num >> stu2.score;
stu1.push_front(stu2);
}
else
{
cin >> search;
stu1.sort(cmp);//list中的sort函数
lit = stu1.begin();
for (int j = 1; j < search; j++)
{
lit++;
}
cout << lit->score << endl;
}
}
return 0;
}**