用Visual C++6.0写,包含头文件,运行代码。用尾插法创建一个带头结点的单链表,单链表的结点结构包括:学生学号、课程成绩及指向下一个结点的指针。利用单链表实现统计一个班学生的某门课程的平均分,并显示此门课程的平均分。
时间: 2024-10-07 21:03:14 浏览: 55
数据结构:不带头结点单链表的实现及其一些基本操作.cpp
5星 · 资源好评率100%
首先,我们需要定义一个结构体来表示单链表的结点,包含学生学号、课程成绩及指向下一个结点的指针。然后,我们需要实现尾插法创建带头结点的单链表。最后,我们需要遍历单链表,计算所有学生的某门课程成绩的总和,并除以学生人数得到平均分。
以下是具体的代码实现:
```cpp
#include <iostream>
using namespace std;
// 定义单链表结点结构体
struct Node {
int studentID; // 学生学号
float score; // 课程成绩
Node* next; // 指向下一个结点的指针
};
// 尾插法创建带头结点的单链表
Node* createList() {
Node* head = new Node; // 创建头结点
head->next = NULL; // 初始化头结点的next指针为NULL
return head; // 返回头结点
}
// 尾插法插入新结点
void insertNode(Node* head, int studentID, float score) {
Node* newNode = new Node; // 创建新结点
newNode->studentID = studentID;
newNode->score = score;
newNode->next = NULL;
Node* temp = head; // 从头结点开始遍历
while (temp->next != NULL) {
temp = temp->next; // 找到最后一个结点
}
temp->next = newNode; // 将新结点插入到最后一个结点之后
}
// 计算平均分
float calculateAverage(Node* head) {
float sum = 0; // 成绩总和
int count = 0; // 学生人数
Node* temp = head->next; // 从第一个结点开始遍历
while (temp != NULL) {
sum += temp->score; // 累加成绩
count++; // 计数器加1
temp = temp->next; // 移动到下一个结点
}
if (count == 0) {
return 0; // 避免除以0的情况
}
return sum / count; // 计算平均分
}
int main() {
Node* head = createList(); // 创建带头结点的单链表
// 插入学生信息(学号和成绩)
insertNode(head, 1, 85.5);
insertNode(head, 2, 90.0);
insertNode(head, 3, 78.5);
insertNode(head, 4, 92.0);
// 计算平均分并输出
float average = calculateAverage(head);
cout << "该门课程的平均分为:" << average << endl;
return 0;
}
```
这段代码首先定义了一个结构体`Node`来表示单链表的结点,然后实现了尾插法创建带头结点的单链表的函数`createList`和`insertNode`。接着,实现了计算平均分的函数`calculateAverage`。在`main`函数中,我们创建了一个带头结点的单链表,并插入了一些学生的信息,最后计算并输出了该门课程的平均分。
阅读全文