DS博客作业07--查找

1.思维导图及学习体会 1476101-20190309202403056-34355844.jpg

1.1 思维导图

1476101-20190622111634763-854817309.png

1.2 学习体会 ?

  • 本章学习了查找的相关知识,介绍了线性表查找、树表查找和哈希表查找等。
  • 学习计算各种查找算法在成功和不成功情况下的的ASL。
  • 查找是一种基础操作也是重要的算法,不同情况下需要对应用不同的查找算法,但越学习各种查找算法也越容易混乱,在学习时要更加注意理解及相关代码的实现,多研究学习

2.PTA实验作业 1476101-20190309202340995-2116737649.jpg

2.1 二叉搜索树中的最近公共祖先

在一棵树T中两个结点u和v的最近公共祖先(LCA),是树中以u和v为其后代的深度最大的那个结点。现给定某二叉搜索树(BST)中任意两个结点,要求你找出它们的最近公共祖先。

2.1.1 设计思路

    定义变量 flag=0; 
    定义树类型 P;
    P=T;
    while(p)
        找节点u;
        if 树中没有u then
            返回ERROR;
        end if
    end while
    while(p)
        找节点v;
        if 树中没有v then
            返回ERROR;
        end if
    end while
    while(p)
    {
        if u,v都在左子树上 then
            P = P->Left;
        if u,v都在右子树上 then
            P = P->Right;
        else break;
    }
    return P->Key;

2.1.2 代码截图

1476101-20190621214445678-1386387977.png
1476101-20190621215254857-1606327135.png

2.1.3 PTA提交列表说明。

1476101-20190621220718913-806937716.png

  • 刚开始,因为大小写,导致变量名不一致;
  • 各种情况没想周全,通过询问同学、参考同学代码,完成代码

2.2 QQ帐户的申请与登陆

1476101-20190621212544512-1537588989.png

2.2.1 设计思路

    申请STL容器<long long, string>QQ存放用户信息
    迭代器map<long long, string>::iterator iter;
    定义 新/旧号码ch, QQ号number, 密码password; 
    输入N;
    for i=0 to N
        输入ch、number、password;
            调用迭代器,查找map里面的是否有这个账号;
        if ch为L then//旧号码
            if QQ号存在 then
                if 密码正确,输出"Login: OK";
                else 输出"ERROR: Wrong PW";
            end if
            else 输出"ERROR: Not Exist";
        end if  
        if ch为N then//新号码
           if QQ号存在,输出"ERROR: Exist";
           if QQ号不存在,添加号码信息,输出"New: OK";
        ennd if
    end for

2.2.2 代码截图

1476101-20190621211912067-1994311871.png
1476101-20190621212006724-2139338079.png

2.2.3 PTA提交列表说明。

1476101-20190621212739584-529463561.png

  • 这道题目参考了同学的代码,采用了map容器存放用户信息,而且运用了迭代器查找账号

2.3 航空公司VIP客户查询

1476101-20190621204714748-468564624.png

2.3.1 设计思路

    申请STL容器<string,int>mymap存放用户信息
    输入飞行记录条数N、最低里程K
    for i=0 to N
        输入身份证号id、飞行里程mileage;
        if 低于K公里按k公里累积 then
            mileage=K; //低于公里按公里累积  
        end if
        if 有相同的身份证号 then
            mymap[ id]+=mileage; //累积飞行里程
        end if
        else  mymap[ id]=mileage; //记录飞行里程
    end for

    输入M;
    for i=0 to M
        输入查询人的身份证号id;
        if 有此查询人 then
            输出里程累计值;
        end if
        else 输出“No Info” 
    end for

2.3.2 代码截图

1476101-20190621203937475-1510486555.png

2.3.3 PTA提交列表说明。

1476101-20190621205539612-1299217419.png

  • 刚开始会运行超时,后来询问了同学后,将 cin、cout 改成 scanf、printf 就解决了问题

3.阅读代码 1476101-20190309202327296-688305400.jpg

3.1 题目

  • 红黑树的建立

3.2 解题思路

root是根,node是被插入节点,将"node"节点插入到红黑树中,插入的时候将节点的颜色改变

3.3 代码截图

1476101-20190622121909355-1041270220.png

3.4 学习体会

这个是c语言代码,rbtree_insert(root, node)的作用是将"node"节点插入到红黑树中,实现插入的时候将节点的颜色改变,并且用递归方法调整了红黑树,十分巧妙,值得学习。

转载于:https://www.cnblogs.com/qq1191834402/p/11028732.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值