DS博客作业07--查找

1.本周学习总结

1.1思维导图

1.2学习体会

这周的主要内容是查找,查找这块知识首先学习的顺序表的查找,也就是上学期学过的链表和数组的查找,这块知识因为大家运用的比较多,所以老师没有着重介绍这部分内容。接下来的是二叉搜索树和二叉平衡树,二叉搜索树的话相对于二叉平衡树来说操作要方便一些,需要满足的条件是左子树上的值小于根节点,右子树上的值大于根节点。二叉平衡树的话需要考虑到的内容,不仅仅包括二叉搜索树的条件,还需要左右子树的高度差不大于1。这就使得二叉平衡树经常需要调整,操作难度和理解也相对难一点。接下来的B树,由于平时对它的应用也不是特别多,B树面对的对象是外存内的数据,这部分内容我掌握的也是不够,复习的时候需要更多的花时间去看。接下来是比较重要的哈希表查找,哈希表是一种比较常用的查找方式,在每次存储的时候需要先设计哈希函数,有三种方法:开放定址法,除数余留法和数字分析法。使用比较多的是除留余数法。本章用到的一大工具是stl中的一些函数的辅助,所以代码写起来会比较轻松。

2.PTA实验作业

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

本题要求实现函数,判断给定二叉树是否二叉搜索树。

2.1.1设计思路

IsBST函数传入二叉树T
定义BinTree型变量 TLeft TRight
ifT为空且左右子树皆为空 返回true end if
遍历左子树 TLeft接受返回值 end if
遍历右子树 TRight接受返回值 end if
返回 左子树最右节点数值<根节点数值<右子树最左节点数值

2.1.2代码截图

2.1.3本题PTA提交列表说明。


`Q1:首先 刚开始的判断条件里面如果顺序换掉了 就过不了测试点 还有就是判断子树的时候条件错了 手抖多加了!=0
·A1:对已有的错误进行修改 刚开始那个条件是 百度的来的修改方式
·Q2:当然啦 最后面那个那么难的公式 肯定也是不会的啦
·A2:有问题 找度娘 百度完公式之后 在看一下解析 这个公式是对返回的判断 关系在上面有介绍

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

2.2.1设计思路

首先加入map库函数
map 定义Q
定义int类型m
定义string类型a2 a3
定义char 类型a1
while m-- do
输入ID
if (a1 == 'N')//判断输入需要进行的操作是否为新建
if (Q.find(a2) == Q.end())//查找数据库当中是否有重复
存放 else 返回ERROR: Exist end if
if (a1 == 'L')//判断是否执行登陆操作
if (Q.find(a2) == Q.end())//查找在数据库中是否有这个用户
返回 ERROR: Not Exist
else if (it->second == a3)//判断输入的密码是否错误
输出Login: OK else 输出ERROR: Wrong PW end if

2.2.2代码截图


2.3.3本题PTA提交列表说明。


·Q1:第一次用map函数 所以有些细节方面没有调控好 比如map<string, string>::iterator it这条语句
·A1:百度了map函数的作用 相同的数据不能存进去 稍微对其理解了一下
·Q2:还有就是再写第二个if判断是否存在用户的时候 把判断条件改成了上面的相反
·A2:错误显示一直在 所以划了一下逻辑 似乎两个判断条件相同就好了呀 改一下输出的内容就行

2.3 题目3:7-2 航空公司VIP客户查询 (25 分)

2.3.1设计思路

库函数中map先搬出来
定义map类型table
定义int类型n k
定义long int类型 id len
输入n k
while n-- do
定义char类型变量c 且赋值‘0’
输入 id len c
if(c == 'x')//对带有x的id进行读取 end if
if(!table.count(id))//读取信息存入数据库
无 则把其赋为0 end if
if(len <= k && len > 0)//判断是否大于最短公里数
保留原值或是选择修改 end if
输入n
while n-- do
执行与上面相同的操作
if语句内的内容修改成输出

2.3.2代码截图


2.3.3本题PTA提交列表说明。


·Q1:这道题思路其实跟上一道差不多 都是检查重复并且执行相应操作 这道题最主要的问题还是在于对于题目的理解方面
·A1:刚开始的时候没有再设置一个循环 刚开始的时候直接丢掉了存入数据的部分
·Q2:然后的失误是在对最短路径长度的判断 这个部分问题出在了+k还是+len
·A2:解决办法很简单 度娘呗

3、阅读代码

3.1 题目:230. 二叉搜索树中第K小的元素

3.2 解题思路

利用非递归的中序遍历对二叉树进行遍历,借助了vector和栈的容器,将遍历结果存在vector中,最后就可以得到一个中序遍历所得到的中序序列,而第k-1的位置就是第k小的结点

3.3 代码截图

3.4 学习体会

这道题的代码量虽然少 但是整理起来思路还是很复杂的 比如非递归写法的中序遍历 其次是vector容器可以控制数组的长度,有效的防止数组越界的问题,容器有很多 但是我接触的还是少的 所以之后要去了解容器的作用了 然后进行操作会比较简单一些

posted @ 2019-06-15 09:02  林炜  阅读(224)  评论(0编辑  收藏  举报