数据结构课设预习报告2(接1)

一、问题重述:

       能够提供按参赛学校查询参赛团队(或根据赛事类别查询参赛团队),即,根据提示输入参赛学校名称(赛事类别),若查找成功,输出该学校参赛的(该赛事类别的)所有团队的基本信息,输出的参赛团队按赛事类别有序输出。(排序算法可从选择排序、插入排序、希尔排序、归并排序、堆排序中任意选择,并为选择算法的原因做出说明。)

二、问题分析:

首先构建一个二叉排序树(BST),用于存储和查找参赛队伍的信息。

  1. 构建二叉排序树:
    struct BSTNode {
        Team team;
        BSTNode* left;
        BSTNode* right;
    };
    
    void insertNode(BSTNode*& root, const Team& team) {
        if (root == nullptr) {
            root = new BSTNode{ team, nullptr, nullptr };
        }
        else {
            if (team.teamNumber < root->team.teamNumber) {
                insertNode(root->left, team);
            }
            else {
                insertNode(root->right, team);
            }
        }
    }
    
    BSTNode* buildBST(const vector<Team>& teams) {
        BSTNode* root = nullptr;
        for (const auto& team : teams) {
            insertNode(root, team);
        }
        return root;
    }
    

    再定义二叉排序树的节点结构BSTNode,包含一个Team对象和两个指针,指向左子树和右子树。insertNode函数用于向二叉排序树中插入节点,保持树的有序性。buildBST函数通过遍历队伍列表,并调用insertNode来构建整个二叉排序树。最后,返回树的根节点。

  2. 在二叉排序树中查找参赛队伍:
    BSTNode* searchTeam(BSTNode* root, int teamNumber, int& count) {
        if (root == nullptr || root->team.teamNumber == teamNumber) {
            return root;
        }
    
        if (teamNumber < root->team.teamNumber) {
            count++;
            return searchTeam(root->left, teamNumber, count);
        }
        else {
            count++;
            return searchTeam(root->right, teamNumber, count);
        }
    }
    

这段代码实现了在二叉排序树中查找指定参赛队伍的函数。从根节点开始,根据给定的teamNumber值与当前节点的值进行比较。如果相等,则返回当前节点;如果小于当前节点的值,则在左子树中继续查找;如果大于当前节点的值,则在右子树中继续查找。同时,count参数用于记录查找过程中的平均查找长度(ASL)。

      3.输出查找结果

void printSearchResult(BSTNode* result, int count) {
    if (result != nullptr) {
        // 输出参赛队伍的基本信息
        cout << "参赛作品名称: " << result->team.projectName << endl;
        cout << "参赛学校: " << result->team.school << endl;
        cout << "赛事类别: " << result->team.eventCategory << endl;
        cout << "参赛者: " << result->team.participants << endl;
        cout << "指导老师: " << result->team.teacher << endl;
        cout << "平均查找长度ASL: " << static_cast<double>(count) << endl;
    }
    else {
        cout << "查找失败!" << endl;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值