用尾插法创建一个带头结点的单链表,单链表的结点结构包括:学生学号、课程成绩及指向下一个结点的指针。利用单链表实现统计一个班学生的某门课程的平均分,并显示此门课程的平均分。要求:用VC++6.0,写出头文件,完整代码,
时间: 2024-10-08 09:03:15 浏览: 27
用前插法建立带头结点的单链表-《数据结构》课件
为了实现这个功能,你需要首先定义一个单链表节点(Node),然后编写一个头文件(如StudentList.h)和实现代码(如StudentList.cpp)。以下是基本的步骤:
**Header File (StudentList.h)**
```cpp
// 定义链表节点结构
struct ListNode {
int studentID;
float courseScore;
ListNode* next; // 指向下一个节点
};
// 链表类声明
class StudentList {
private:
ListNode* head; // 头节点指针
public:
StudentList(); // 构造函数
~StudentList(); // 析构函数
void insert(int id, float score); // 插入节点方法
void calculateAverage(int courseId); // 计算并显示平均分方法
};
```
**Implementation File (StudentList.cpp)**
```cpp
#include "StudentList.h"
// 构造函数和析构函数
StudentList::StudentList() {
head = nullptr;
}
StudentList::~StudentList() {
clearList();
}
void StudentList::insert(int id, float score) {
ListNode* newNode = new ListNode{id, score, nullptr};
if (!head) {
head = newNode;
} else {
ListNode* current = head;
while (current->next != nullptr) {
current = current->next;
}
current->next = newNode;
}
}
void StudentList::clearList() {
ListNode* temp = head;
while (temp) {
ListNode* nextTemp = temp->next;
delete temp;
temp = nextTemp;
}
head = nullptr;
}
// 计算并显示平均分
void StudentList::calculateAverage(int courseId) {
float totalScore = 0.0f;
int count = 0;
ListNode* current = head;
while (current) {
if (current->courseScore == courseId) {
totalScore += current->courseScore;
count++;
}
current = current->next;
}
if (count > 0) {
float average = totalScore / count;
cout << "Course " << courseId << " average score is: " << average << endl;
} else {
cout << "No students have taken course " << courseId << endl;
}
}
```
现在你可以用这个`StudentList`类来插入学生数据并计算指定课程的平均分。
阅读全文