用尾插法创建一个带头结点的单链表,单链表的结点结构包括:学生学号、课程成绩及指向下一个结点的指针。利用单链表实现统计一个班学生的某门课程的平均分,并显示此门课程的平均分。要求:用VC++6.0,写出头文件等完整代码,尽量简单易懂
时间: 2024-10-08 22:01:11 浏览: 26
用前插法建立带头结点的单链表-《数据结构》课件
首先,我们需要定义一个链表节点结构体,包含学号、成绩和指向下一个节点的指针。然后,我们可以使用一个动态数组或者链表来存储每个学生的成绩,以便于计算平均分。这里是一个简单的示例,假设我们有一个名为`StudentGrade`的链表节点类,以及一个辅助函数来计算平均分。
```cpp
// StudentGrade.h - 链表节点头文件
#ifndef STUDENT_GRADE_H
#define STUDENT_GRADE_H
#include <iostream>
struct StudentGrade {
int studentNo; // 学生学号
float score; // 课程成绩
struct StudentGrade* next; // 指向下一个节点的指针
};
class CourseAverage {
private:
StudentGrade* head; // 链表头部
float totalScore = 0;
int studentCount = 0;
public:
void addGrade(int no, float grade); // 添加成绩到链表
float calculateAverage(const std::string& courseName); // 计算平均分
};
#endif // STUDENT_GRADE_H
```
```cpp
// CourseAverage.cpp - 实现计算平均分功能
#include "StudentGrade.h"
void CourseAverage::addGrade(int no, float grade) {
StudentGrade* newNode = new StudentGrade();
newNode->studentNo = no;
newNode->score = grade;
newNode->next = head;
head = newNode;
studentCount++;
}
float CourseAverage::calculateAverage(const std::string& courseName) {
if (head == nullptr || studentCount == 0) {
std::cout << "该课程无成绩记录。\n";
return 0;
}
for (StudentGrade* node = head; node != nullptr; node = node->next) {
totalScore += node->score;
}
float average = totalScore / studentCount;
std::cout << "课程名称: " << courseName << ", 平均分: " << average << "\n";
return average;
}
```
阅读全文