zoukankan      html  css  js  c++  java
  • 05-查找

    1.学习总结

    1.1查找的思维导图

    1.2 查找学习体会

    查找内容很多,像平均查找长度,平均二叉树插入删除时的调整,还有B树,哈希表,哈希冲突等重要内容,查找的内容也与我们平时生活联系很深。
    本周还学习了Map,STL的一个容器,它提供一对一的hash,很多功能直接调用函数,很方便

    • 变量声明:map<string, string> mapStudent;
    • map的所有节点元素都是pair,pair有两个成员变量first,second ,第一个first是键值key,第二个second是实值value
    • 插入元素:
      (1)用insert函數插入pair:mapStudent.insert(pair<string, string>("r000", "student_zero"));
      (2)用"array"方式插入:mapStudent["r123"] = "student_first";mapStudent["r456"] = "student_second";
    • 查找:出现时,它返回资料所在位置,如果没有,返回iter与end函数返回相同
      iter = mapStudent.find("r123");
      if(iter != mapStudent.end())
      cout<<"Find, the value is"<second<<endl;
      else
      cout<<"Do not Find"<<endl;
    • set使用方法:
      begin()返回set容器的第一个元素
      end() 返回set容器的最后一个元素
      clear() 删除set容器中的所有的元素
      empty() 判断set容器是否为空
      max_size()返回set容器可能包含的元素最大个数
      size()返回当前set容器中的元素个数
      rbegin返回的值和end()相同
      rend()返回的值和rbegin()相同
    • 判断键值是否存在:
      count() 用来查找set中某个某个键值出现的次数因为一个键值在set只可能出现0或1次,这样就变成了判断某一键值是否在set出现过了

    2.PTA实验作业

    2.1 题目1:是否二叉搜索树

    2.2 设计思路

    建树
    如果为空树则为二叉搜索树
    如果无左右孩子也为二叉搜索树
    如果左孩子不为空
       利用循环找到左子树最右节点
            如果该节点的值大于根节点的值,则不满足非空左子树的所有键值小于其根结点的键值,不是二叉搜索树
    如果右孩子不为空
       利用循环找到左子树最左节点
            如果该节点的值小于根节点的值,则不满足非空右子树的所有键值大于其根结点的键值,不是二叉搜索树   
    利用递归继续判断其他节点
    

    2.3 代码截图

    2.4 PTA提交列表说明

    • 编译错误
      bool返回类型应该是true或者false,但是判断是否为空时,我返回了NULL
    • 段错误

      调试时发现卡在BinTree P=T处,是不是再进入这条语句时,又创建了一次BinTree P,类似于程序中出现俩个同名定义变量,于是把BinTree P这一句挪到了if语句外,但是结果与测试案例不符。所以按照题目中的一条条要求又重写了一次

    2.1 题目2:QQ帐户的申请与登陆

    2.2 设计思路

    输入指令行数
    输出指令
    如果命令符为“L”
           如果找不到该账号,输出ERROR: Not Exist
           如果存在该账号
                  判断账户密码,如果正确,输出Login: OK,否则,输出ERROR: Wrong PW
    如果命令符为“N”     
            如果找不到该账号,插入该新账号,输出New: OK
            如果找到该账号,输出ERROR: Exist         
    

    2.3 代码截图

    2.4 PTA提交列表说明


    格式错误(这个没什么好说明的。。。)

    2.1 题目3:航空公司VIP客户查询

    2.2 设计思路

    输入飞行记录行数N,最低里程K
    循环输入N行飞行记录
           判断已有记录中是否有当前身份证号码
                  如果没有,给里程值赋初值0
            如果该记录里程值小于K大于0,里程值在原先基础上累加K
             如果大于K,累加该记录里程值
    循环结束     
    输入整数M
    循环输入M行查询人的身份证号码
           如果记录中没有该查询人,输出No Info
           如果记录中有该查询人,输出其当前的里程累积值
    循环结束
    

    2.3 代码截图

    2.4 PTA提交列表说明


    运行超时,一开始理解成不能满足大数据,是类型定义错误,但是改完还是错的。。。尝试了很久,实在找不出来问题,询问了炳辉大佬,他说把c++的输出输出换成c的。百度下得到的是“输入数字没有问题,如果输入非整形的话,cin流的状态会被破坏,无法继续输入,可以用cin.clear清一下流的状态,或者把输入的部分放入while循环,输入错误时退出”所以改用scanf,printf反而方便一点

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

    3.1 PTA排名

    3.2 我的总分:2.5

    4. 阅读代码

    代码链接:https://blog.csdn.net/chenhanzhun/article/details/39529425
    代码链接:https://blog.csdn.net/mdl13412/article/details/6655581
    这俩篇博客的注释都很详细,头文件里的东西很复杂,但是调用map.h后续功能的实现都很方便,像本章学习的查找,如果用树来实现,建树,再遍历查找,代码量很大,但是调用Map的话,利用insert()和find(),几句代码就可以实现了,具体操作不需要我们来完成,知道原理就可以了,比如find()函数,如果找到它会返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器

    5. 代码Git提交记录截图





  • 相关阅读:
    块元素&行内元素
    semantic ui要装什么才能使用
    float属性
    CSS 选择器
    px,em和rem
    CSS各类布局
    一个 / 引起想骂他事件
    使用fastjson 获取json字符串中的数组,再转化为java集合对象
    计算面试题
    Dubbo(二) 一次惨痛的流血事故
  • 原文地址:https://www.cnblogs.com/tajiyu/p/9079607.html
Copyright © 2011-2022 走看看