用链表存入学生成绩,并输出最高分的学生信息
时间: 2023-08-04 14:27:03 浏览: 44
好的,我来回答你的问题。
首先,我们可以定义一个学生信息的结构体,包含姓名和成绩两个字段,如下所示:
```c++
struct Student {
string name;
double score;
};
```
接下来,我们可以使用链表来存储学生信息。具体来说,我们可以定义一个节点结构体,包含学生信息和指向下一个节点的指针,如下所示:
```c++
struct Node {
Student student;
Node* next;
};
```
然后,我们可以定义一个链表类,包含头结点指针和链表长度两个字段,以及一些基本的操作方法,例如插入节点、删除节点、遍历节点等等。这里我为了方便起见,省略了一些方法的实现,只留下了关键的部分:
```c++
class LinkedList {
public:
LinkedList() {
head = new Node();
len = 0;
}
void insert(Student student) {
Node* cur = head;
while (cur->next != nullptr && cur->next->student.score < student.score) {
cur = cur->next;
}
Node* node = new Node();
node->student = student;
node->next = cur->next;
cur->next = node;
len++;
}
void printHighestScore() {
double max_score = -1;
Node* max_node = nullptr;
Node* cur = head->next;
while (cur != nullptr) {
if (cur->student.score > max_score) {
max_score = cur->student.score;
max_node = cur;
}
cur = cur->next;
}
if (max_node != nullptr) {
cout << "The student with the highest score is " << max_node->student.name << ", whose score is " << max_node->student.score << endl;
}
}
private:
Node* head;
int len;
};
```
最后,我们可以定义一个 `LinkedList` 对象,读入学生信息并插入到链表中,然后输出最高分的学生信息,如下所示:
```c++
int main() {
LinkedList list;
int n;
cin >> n;
for (int i = 0; i < n; i++) {
string name;
double score;
cin >> name >> score;
Student student = {name, score};
list.insert(student);
}
list.printHighestScore();
return 0;
}
```
当然,这只是一个简单的实现,你可以根据具体的需求进行修改和扩展。