用尾插法创建一个带头结点的单链表,单链表的结点结构包括:学生学号、课程成绩及指向下一个结点的指针。利用单链表实现统计一个班学生的某门课程的平均分,并显示此门课程的平均分。 用Visual C++6.0写,包含头文件,写出完整可运行代码
时间: 2024-10-07 19:03:08 浏览: 86
尾插法是一种常见的链表操作技巧,在这里我们将用它构建一个带头节点的单链表,并实现统计一门课程的平均分功能。首先,我们需要定义链表节点结构体,然后创建链表并添加数据。最后,我们编写函数来计算平均分。
```cpp
// 首先,定义链表节点结构
typedef struct Node {
int student_id;
float score;
Node* next; // 指向下一个节点的指针
} Node;
// 带头节点的初始化
Node* head = new Node();
head->student_id = -1; // 通常将第一个节点设置为特殊值,便于处理
head->score = 0.0f;
head->next = nullptr;
// 插入节点函数,采用尾插法
void insert(Node*& current, int id, float score) {
if (!current)
current = new Node{id, score, nullptr};
else {
Node* newNode = new Node{id, score, nullptr};
newNode->next = current->next;
current->next = newNode;
}
}
// 计算课程平均分的函数
float calculateAverage(Node* current, int target_course_id) {
float sum = 0.0f;
int count = 0;
while (current != nullptr) {
if (current->student_id == target_course_id) {
sum += current->score;
count++;
}
current = current->next;
}
return count > 0 ? sum / count : 0.0f;
}
int main() {
// 创建节点并插入数据(假设已有一个班级的数据)
insert(head, 1001, 85);
insert(head, 1002, 90);
insert(head, 1003, 75); // 假设课程ID为1
// 统计指定课程的平均分
int course_id = 1; // 指定要查询的课程ID
float average_score = calculateAverage(head, course_id);
// 显示结果
cout << "课程" << course_id << "的平均分为:" << average_score << endl;
// 清理内存
Node* temp = head;
while (temp != nullptr) {
Node* nextTemp = temp->next;
delete temp;
temp = nextTemp;
}
return 0;
}
```
阅读全文