• 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容器可以控制数组的长度,有效的防止数组越界的问题,容器有很多 但是我接触的还是少的 所以之后要去了解容器的作用了 然后进行操作会比较简单一些

  • 相关阅读:
    vmware ubuntu 异常关机无法连接到网络
    Speed up GCC link
    常用的一些解压命令
    Log4j 漏洞复现
    Test Case Design method Boundary value analysis and Equivalence partitioning
    CCA (Citrix Certified Administrator) exam of “Implementing Citrix XenDesktop 4”
    What is Key Word driven Testing?
    SAP AGS面试小结
    腾讯2013终端实习生一面
    指针的引用
  • 原文地址:https://www.cnblogs.com/lw123---/p/11026434.html
Copyright © 2020-2023  润新知