c++实现从team.txt中读取参赛队伍的基本信息,实现基于二叉排序树的查找。根据提示输入参赛队编号,若查找成功,输出该赛事类别对应的基本信息(参赛作品名称、参赛学校、赛事类别、参赛者和指导老师信息),同时,输出查找成功时的平均查找长度ASL;否则,输出“查找失败!”。
时间: 2024-03-08 19:47:39 浏览: 50
用C++实现二叉树的查找功能
4星 · 用户满意度95%
以下是一个 C++ 实现从文件中读取参赛队伍基本信息并基于二叉排序树进行查找的示例代码,其中假设参赛队伍基本信息保存在 "team.txt" 文件中,每行依次包含参赛队编号、参赛作品名称、参赛学校、赛事类别、参赛者和指导老师信息,以空格分隔:
```cpp
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
// 定义参赛队伍结构体
struct Team {
int id; // 参赛队编号
string name; // 参赛作品名称
string school; // 参赛学校
string category; // 赛事类别
string participants; // 参赛者信息
string teacher; // 指导老师信息
};
// 定义二叉排序树节点结构体
struct TreeNode {
Team team; // 参赛队伍信息
TreeNode* left; // 左子节点
TreeNode* right; // 右子节点
};
// 插入节点到二叉排序树中
void insertNode(TreeNode*& root, const Team& team) {
if (root == nullptr) {
root = new TreeNode{team, nullptr, nullptr};
} else if (team.id < root->team.id) {
insertNode(root->left, team);
} else {
insertNode(root->right, team);
}
}
// 从文件中读取参赛队伍基本信息到二叉排序树中
void readTeamsFromFile(TreeNode*& root, const string& filename) {
ifstream fin(filename);
if (!fin) {
cerr << "无法打开文件 " << filename << endl;
exit(1);
}
string line;
while (getline(fin, line)) {
stringstream ss(line);
Team team;
ss >> team.id >> team.name >> team.school >> team.category >> team.participants >> team.teacher;
insertNode(root, team);
}
fin.close();
}
// 二叉排序树中查找指定参赛队编号的节点,返回平均查找长度ASL
int search(TreeNode* root, int id, int& count) {
if (root == nullptr) {
return -1;
} else if (id < root->team.id) {
count++;
return search(root->left, id, count);
} else if (id > root->team.id) {
count++;
return search(root->right, id, count);
} else {
count++;
cout << "参赛作品名称: " << root->team.name << endl;
cout << "参赛学校: " << root->team.school << endl;
cout << "赛事类别: " << root->team.category << endl;
cout << "参赛者信息: " << root->team.participants << endl;
cout << "指导老师信息: " << root->team.teacher << endl;
return count;
}
}
int main() {
TreeNode* root = nullptr;
readTeamsFromFile(root, "team.txt");
int id;
cout << "请输入参赛队编号:";
cin >> id;
int count = 0;
int asl = search(root, id, count);
if (asl == -1) {
cout << "查找失败!" << endl;
} else {
cout << "平均查找长度ASL: " << static_cast<double>(asl) / count << endl;
}
return 0;
}
```
注意,上述代码中的 `readTeamsFromFile` 函数可以根据实际情况进行修改,如对文件格式进行调整,以便正确地读取参赛队伍基本信息。
阅读全文