zoukankan      html  css  js  c++  java
  • DS博客作业07--查找

    1.本周学习总结)

    1.思维导图

    2.谈谈你对查找运算的认识及学习体会。

    本章是学习查找的知识,本来以为查找在以前的代码都用过了,已经是没有什么更新的东西,但是开始学习到二叉搜索树的时候就发现了新的以前从未接触过的东西,到了平衡二叉树的时候就感觉到难度了,虽然没做代码要求,但是调整也是非常容易弄错,经过课堂派的练习也是稳固了这一块的东西,B树算是这一章学的最不好的一部分的,也是要在考前会再看一遍的。其它的通过pta的练习也基本掌握,本章总体难度不是很的,加上stl中的一些函数的辅助,让本章的代码量也是下降了不少。
    

    2.PTA实验作业

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

    2.1.1设计思路

    IsBST函数传入二叉树T
        定义静态整型变量s=-1
        定义bool类型变量result
        if T为空 then 返回true end if
        递归遍历左孩子,result接收返回值
        if result为false 返回 false end if
        else if T->Data大于s then s=T->Data end else if
        else 返回false end else
        递归遍历右孩子,result接收返回值
    

    2.1.2代码截图

    2.1.3本题PTA提交列表说明。

    • Q1:刚开始用层次遍历,以为只要判断当前结点比左结点大,比右结点小就行,结果有测试点过不了
    • A1:后来想到上课的时候老师说过用中序遍历,所以对代码进行了修改
    • Q2:结果想了很久,采用了全局变量可以过
    • A2:后来参考同学代码,发现了更加简洁的办法

    2.2 题目2:6-4 jmu-ds-哈希表操作集

    2.2.1设计思路

    void CreateHT(HashTable ha, KeyType x[], int n, int m, int p) //建立哈希表
        对哈希表数组进行初始化,关键字置为NULLKEY
        for i=0 to i=n-1 do
            下标at=x[i]%p
            找到at的位置,若key不为NULLKEY,则at=(at+1)%m,直到找到NULLKEY
            在找到位置存入x[i]关键字,计算出探测次数并存入探测次数
        end for
    int SearchHT(HashTable ha, int p, KeyType k)  //寻找关键字
        下标at=k%p    //k为要寻找的关键字
        if ha[at].key等于NULLKEY then 令uns_count为1并返回-1 end if
        if ha[at].key等于k then 返回at end if   //直接找到
        for循环寻找k所在位置
        if 找不到 then 计算出探测次数存在uns_count并返回-1 end if
        返回k所在位置
    

    2.2.2代码截图

    2.2.3本题PTA提交列表说明。

    • Q1:在测试完样例后,第一次提交出现了答案错误,非常意外
    • A1:进行多组测试数据的测试,找到发现是把题目的变量搞混了,把n当成m
    • Q2:继续提交过了两个测试点,查找不成功的测试点没过
    • A2:返回题目,发现题目还需要统计查找不成功的次数,对代码进一步修改后过了

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

    2.3.1设计思路

    定义long long型变量 len存里程,ID存身份证
    定义哈希表链的结点指针变量p
    定义哈希表数组Hash
    对哈希表中每一条链表进行初始化
    输入用户数量N和最小里程K
    while N-- do
        输入ID
        if ID小于18位 then getchar() end if  //把x给消掉
        输入里程len
        if len小于K then len=K end if
        sum=ID%100000    //哈希函数,sum为下标
        p指向下标sum的链表的第一个结点
        while p不为空 do
            寻找相同身份证号,找到则对里程进行修改
        end while
        if 找不到相同身份证 then
            则新建一个结点,将结点插在下标sum链表头部
        end if
    end while
    输入查询人数N
    while N-- do
        输入ID
        if ID小于18位 then getchar() end if    //把x给消掉
        sum=ID%100000    //哈希函数,sum为下标
        p指向下标sum的链表的第一个结点
        while p不为空 do
            寻找对应身份证号,找到输出里程并退出循环
        end while
        if p为空 then 输出找不到 end if
    end while
    

    2.3.2代码截图



    2.3.3本题PTA提交列表说明。

    • Q1:看到这题,很自然的想到用map来写,写完运行超时
    • A1:查资料发现改成scanf可以减少耗时
    • Q2:改完之后依然超时
    • A2:想到用哈希表来做因该不会超时,顺便练习一下代码,顺利通过这一题

    3、阅读代码

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

    3.2 解题思路

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

    3.3 代码截图

    3.4 学习体会

    1.本题如果自己写的话可能会不知所措,因为我绝对不会去采用非递归的中序遍历,而题解中的代码采用了这种方法也是为我的这类问题的解决提供了一种新的思路
    2.vector容器可以控制数组的长度,有效的防止数组越界的问题,熟练的掌握vector容器我认为是非常有必要的
    
  • 相关阅读:
    BOS13——quartz定时任务,Highcharts前端图表的使用
    BOS12——多对多添加方法,多对多页面需要字段问题(不多的话直接提供get方法),修改Realm中授权方法(查询数据库),缓存Java对象的方法,加载左侧菜单(ztree提供pId)
    BOS10——权限控制的实现,apache shiro权限管理框架的使用,参数同名问题,EasyUI的combotree的使用
    BOS08——Web工程中的CXF客户端,加载select框中的内容,select框移动,提交时将select全部选中,CRM中更新的方法,别名的用于不用
    CXF——WebService简介,CXF框架的使用
    BOS06——带有过滤条件的查询(解决form表单提交时,分页携带过滤条件困难的问题)and连表查询返回数据不标准问题,文件导出,BaseDao扩展一个离线Criteria查询,前端字段名重复问题(不知道对应那个字段了),多张表保存问题
    Python基础之文件处理
    Python基础之字符编码
    Python基础之数据类型
    Python安装
  • 原文地址:https://www.cnblogs.com/putianliuzhong/p/11032810.html
Copyright © 2011-2022 走看看