查找
1.学习总结
1.1查找的思维导图
1.2 查找学习体会
在查找这一章的学习当中,理解了查找的基本概念,了解了静态查找,动态查找,内查找和外查找。
学习了线性表上的各种查找算法,理解了顺序查找,折半查找和分块查找的基本思路。
学习了各种数表的查找算法,包括二叉排序树,AVL树,B-树和B+树的基本思路和实现的方法。
了解了哈希表的查找思路,并不是所有的算法都是完美的,例如哈希表有哈希冲突的现象存在,在学习了哈希冲突的解决方法之后意识到算法不一定要一次性准确,我们要考虑到查找效率,查找过程等等进行完善。
2.PTA实验作业
2.1 题目1:6-2 是否二叉搜索树
2.2 设计思路
使用中序遍历的方法:
1.对树进行中序遍历。
2.使用全局变量x保存前一个结点的,如果当前节点小于前一个节点的值,则该树不是二叉排序树。
tips:若为BST,使用中序遍历,其遍历结果为升序。
2.3 代码截图
2.4 PTA提交列表说明。
刚开始的思路是找出左右子树中最小和最大的节点,
与根节点相比,若不符合则返回false,若符合则进行递归操作。
在构造子函数寻找左右子树中最小和最大的节点时,
使用BST中的操作集去实现,部分正确。
忽略了根节点的左右子树也不一定为BST,所以不能使用BST的操作集去实现。
接着自己编写了两字子函数去实现寻找最小和最大节点,
还是部分正确。
去请教了同学之后,使用中序遍历的思路实现了全部正确。
2.1 题目1:6-3 二叉搜索树中的最近公共祖先
2.2 设计思路
使用了递归的思想:
1.若为空树返回ERROR,否则进行下一步
2.判断输入的u,v是否在二叉排序树中,是进行下一步,否则返回ERROR
3.若u,v都在当前根节点的左子树,则递归当前节点的左孩子
4.若u,v都在当前根节点的右子树,则递归当前节点的右孩子
5.若u,v分别在左右子树,返回当前节点的值
2.3 代码截图
2.4 PTA提交列表说明。
刚开始只是简单的想到递归如何进行,
忽略了u,v是否存在于二叉排序树。
而后完成子函数FIND去检测输入的u,v是否有效,
接着再进行递归操作,最终实现了题目要求。
2.1 题目1:7-1 QQ帐户的申请与登陆
2.2 设计思路
使用map完成算法要求。
1.若输入L,使用map查找此帐号是否已经存在且密码是否正确。
2.否则进行新建帐号,储存输入的账号与密码。
2.3 代码截图
2.4 PTA提交列表说明。
在老师提供了使用map的思路下,还是无法写出正确的代码。
在百度上搜索到了此种方法,在弄懂之后,上传到了PTA上。
3.截图本周题目集的PTA最后排名
本次题目集总分:175分
必做题共:145分
3.1 PTA排名
3.2 我的总分:120分
4. 阅读代码