博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
博客作业05--查找
阅读量:4510 次
发布时间:2019-06-08

本文共 2987 字,大约阅读时间需要 9 分钟。

1.学习总结(2分)

1.1查找的思维导图

1231973-20180526022301597-323427665.png

1231973-20180526022347152-1983123490.png
1231973-20180526022411558-584664070.png

.2 查找学习体会

查找这章的内容大多是操作多于编程,很多概念如果理不清楚的话很容易出错,比如说B—和B+树的插入和删除操作,有些概念稍微有那么一点容易混淆,还有平衡二叉树的调整,删除之类的,以及哈希表的查找;还有这周学习的map函数,Map的元素是成对的键值/实值,内部的元素依据其值自动排序,Map内的相同数值的元素只能出现一次,Multimaps内可包含多个数值相同的元素,内部由二叉树实现(实际上基于红黑树(RB-tree)实现。学习这周主要用到了map函数中的find函数和count函数:

使用count,返回的是被查找元素的个数。如果有,返回1;否则,返回0。注意,map中不存在相同元素,所以返回值只能是1或0。

使用find,返回的是被查找元素的位置,没有则返回map.end()。

详细操作见链接:

2.PTA实验作业(4分)

2.1 题目1:6-3 二叉搜索树中的最近公共祖先(25 分)

1231973-20180526120102839-1103226253.png

2.2 设计思路

解题思路:首先判断u,v 是否在树中,若不在,返回ERROR,若在,判断u,v是否同在树的左子树或右子树或分别在树的左右子树,然后再根据其关系找出最近公共祖先

伪代码:

Tree p;定义flag=0;       p=T;       if p不为空           if(p->Key等于u)             flag=1;break;          else if  p->Key大于u              p=p->Left;          else              p=p->Right;        if  flag= 0;返回ERROR         同理判断v是否在树中        p=T;          while(P不为空)            if(u,v都小于p->Key)               p=p->Left;            else if(u,v都大于p->Key)               p->Right;            else                break;                          返回 p->Key;          end

2.3 代码截图

1231973-20180526120142695-718733517.png

1231973-20180526120218774-692391854.png
1231973-20180526120249741-1720487451.png

2.4 PTA提交列表说明

1231973-20180526144943015-713366499.png

这题基本上没什么太大的问题,其做题思路呢就是:先判断u,v在树中是否存在,若不存在则返回ERROR,若存在则,判断u,v若都小于根节点,这说明在左子树上去其最近公共祖先,p=p->Left ,当满足(uKey&&v>p->Key)||(u>p->Key&&vKey)时则p->Key即为最近的公共祖先,同理当u,v若都大于根节点时,可求出在右子树上的最大公共祖先;这题只是在运行的时候不小心把定义的变量写错,导致编译错误,

2.1 题目2:7-1 QQ帐户的申请与登陆(25 分)

1231973-20180526130955276-433309543.png

2.2 设计思路

解题思路:调用Map函数,若输入的命令为申请,调用T.find函数检验id,若T.find函数等于T.end,说明STL容器中没有此账号,将密码附给账号,申请成功,否则说明账号已存在;若输入命令为老账户登录,调用T.find函数检验id,若T.find函数等于T.end,说明账号输入错误,若T.find函数不等于T.end,说明账号存在,判断密码是否相等,若不等,则密码输入错误,若相等,则登录成功

伪代码

定义 M;string c,id,pass;      输入M;      while M--          输入c,id,pass;          if  c[0]等于N             if(T.find(id)!=T.end())              输出 ERROR: Exist             else                 T[id]=pass;                 输出 New: OK          else             if(T.find(id)==T.end())                 输出ERROR: Not Exist             else                if  密码匹配                  输出Login: OK                else                   输出ERROR: Wrong PW

2.3 代码截图

1231973-20180526125302811-1760094943.png

1231973-20180526125327232-477507177.png

2.4 PTA提交列表说明

1231973-20180526125538951-791571487.png

这题是看了老师说的调用map函数来做的,一开始的时候不理解T.find和T.end的运用,导致一直写不出来 ,然后上网百度了下T.find和T.end的用法后才写出来的,使用find,返回的是被查找元素的位置,没有则返回map.end()。 map.end()指向map的最后一个元素之后的地址,所以当输入申请的命令的时候,若T.find函数等于T.end,说明STL容器中没有此账号,将密码附给账号,申请成功,否则说明账号已存在;若输入命令为老账户登录,若T.find函数等于T.end,说明账号输入错误,若T.find函数不等于T.end,说明账号存在,判断密码是否相等,若不等,则密码输入错误,若相等,则登录成功

2.1 题目3:6-2 是否二叉搜索树(25 分)

2.2 设计思路

解题思路:判断是否二叉搜索树,需满足(1)非空左子树的所有键值小于其根结点的键值。(2)非空右子树的所有键值大于其根结点的键值。

(3)左、右子树都是二叉搜索树。,且由二叉搜索树的性质可知,左子树的最大键值在最右下角,右子树的最小键值在最左下角,故找到左子树的最大键值,小于根节点,找到右子树的最小键值,大于根节点,则为二叉搜索树

伪代码:

BinTree p;      if T不为空,返回true;      if  T的左右子树都不为空,返回true       p=T->Left ;      if p不为空          while(P->Right不为空)             p=p->Right;             if P->Data大于T->Data                返回false       同理检验T的右子树      递归检验右子树和左子树是否是二叉搜索树      返回 IsBST(T->Left)&&IsBST(T->Right)      end

2.3 代码截图

1231973-20180526142106279-322243739.png

2.4 PTA提交列表说明

1231973-20180526142136253-670863659.png

这题部分正确的原因主要是忘记判断当二叉搜索树的左右子树为空,它也是二叉搜索树1231973-20180526151558481-856878768.png,加上这句判断后答案正确

3.截图本周题目集的PTA最后排名(3分)

3.1 PTA排名(截图带自己名字的排名)

1231973-20180526114129607-958986648.png

3.2 我的总分:2.5

4. 阅读代码(必做,1分)

哈希表查找代码实现 -

详细介绍了哈希表查找的三种解决哈希冲突的方法 ,即线性探测,二次探测,链地址法,

5. 代码Git提交记录截图

1231973-20180526115924611-1866587451.png

转载于:https://www.cnblogs.com/2223ch/p/9091409.html

你可能感兴趣的文章
Linux基础
查看>>
【模板】高精度
查看>>
弱弱的玩下Javascript
查看>>
二叉树相关操作
查看>>
在webstorm开发微信小程序之使用阿里自定义字体图标
查看>>
序列化模块/模块/包
查看>>
eclipse maven plugin 插件 安装 和 配置
查看>>
收集一些复杂有用的正则表达式
查看>>
子数组求和之大数溢出
查看>>
浏览器预览office文件(word,Excel,等)
查看>>
MySQL工具汇总
查看>>
cookie
查看>>
如何使用Eclipse编译C,C++,JAVA程序
查看>>
手把手教如何搭建node+egg项目 引入Sequelize
查看>>
Xcode 4 with External Static Library for iPhone Development
查看>>
linux——常用命令清单
查看>>
JS 20180415作业
查看>>
项目追求更高的性能,更高的并发,更高的可用 (1)
查看>>
安卓 okhttp小结
查看>>
cocos2d-x 关于无法找到gl/gl.h头文件错误,以及r.java无法生成解决办法
查看>>