查找

1.学习总结(2分)

1.1查找的思维导图

1.2 查找学习体会

本章学习的查找是指在数据结构中找出满足给定条件的元素,对应查找的表主要分为动态查找表和静态查找表,查找本身也分为内查找和外查找,通常把查找过程中对关键字的平均比较次数(也成为平均查找长度ASL)作为衡量一个查找算法效率优劣的标准。对于不成功的ASL还不能准确的计算,我在学习的过程中对于老师上课所讲的逻辑还算能理解,但课后一到实践中的代码就应付不过来了,我觉得归根结底还是代码打的不够多,所以通过这次学习,我有了以下几点感受,第一,在搞懂书上的逻辑后,后面的例子也要一一看过去并搞懂,读懂代码也是学习算法的一种重要的学习方法,第二,除了看代码,还要认真完成老师布置的题目,多打代码有点类似于高中的刷题政策,久而久之看到题目脑海中就会自然而然的浮现出了思路。相信经过之后一段时间的努力,我一定会对这章的内容有更进一步的理解。 

2.PTA实验作业

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

2.2 设计思路(伪代码或流程图)

 

2.3 代码截图

2.4 PTA提交列表说明

一开始没有很好的理解题目的要求导致了编译错误,后来部分正确,是因为代码只能实现是二叉搜索树的情况,而不能实现不是二叉树的情况。深入理解后换了一种思路,即将代码换了一种写法,定义一个min为-32768,然后通过递归依次将其左子树与min进行比较,若比它大,则替换min,若比它小则返回错误。同理判断右子树,若遍历后都符合条件,则返回正确,即可实现代码。

2.1 题目2:二叉搜索树中的最近公共祖先

2.2 设计思路(伪代码或流程图)

2.3 代码截图

2.4 PTA提交列表说明

 

 一开始部分正确是没有考虑到u,v不在树中的情况,重新整理了思路后补充了这种情况,并且发现要再定义一个fing函数来判断u,v是否在树中。

2.1 题目3:QQ账户的申请与登陆

2.2 设计思路(伪代码或流程图)

2.3 代码截图

2.4 PTA提交列表说明

这题一开始看到题目时没有什么思路,试了好久也没有结果,百度了一下发现要用到map函数和c++一些语句,虽然课上所讲的哈希表逻辑都能理解,但不太能运用到实践的代码中,于是就照着百度打了一遍,大致上能够看懂了,之后也会再多花些时间去理解,努力做到下次碰到类似的题目能自己做出来。

3.1 PTA排名

3.2 我的总分:2分

4. 阅读代码:map函数的使用

数据的插入可分为三种,第一种为insert函数插入pair数据,第二种为用insert函数插入value_type数据,第三种为用数组方式插入数据。

例子

          //验证插入函数的作用效果  

  1. #include <map>  
  2.   
  3. #include <string>  
  4.   
  5. #include <iostream>  
  6.   
  7. using namespace std;  
  8.   
  9. int main()  
  10.   
  11. {  
  12.   
  13.     map<int, string> mapStudent;  
  14.   
  15.     pair<map<int, string>::iterator, bool> Insert_Pair;  
  16.   
  17.     Insert_Pair = mapStudent.insert(pair<int, string>(1, "student_one"));  
  18.   
  19.     if(Insert_Pair.second == true)  
  20.   
  21.         cout<<"Insert Successfully"<<endl;  
  22.   
  23.     else  
  24.   
  25.         cout<<"Insert Failure"<<endl;  
  26.   
  27.     Insert_Pair = mapStudent.insert(pair<int, string>(1, "student_two"));  
  28.   
  29.     if(Insert_Pair.second == true)  
  30.   
  31.         cout<<"Insert Successfully"<<endl;  
  32.   
  33.     else  
  34.   
  35.         cout<<"Insert Failure"<<endl;  
  36.   
  37.     map<int, string>::iterator iter;  
  38.   
  39.     for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)  
  40.   
  41.        cout<<iter->first<<' '<<iter->second<<endl;
  42.   
    1. //验证数组形式插入数据的效果  
    2.   
    3. #include <map>  
    4.   
    5. #include <string>  
    6.   
    7. #include <iostream>  
    8.   
    9. using namespace std;  
    10.   
    11. int main()  
    12. {  
    13.   
    14.     map<int, string> mapStudent;  
    15.   
    16.     mapStudent[1] = "student_one";  
    17.   
    18.     mapStudent[1] = "student_two";  
    19.   
    20.     mapStudent[2] = "student_three";  
    21.   
    22.     map<int, string>::iterator iter;  
    23.   
    24.     for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)  
    25.   
    26.        cout<<iter->first<<' '<<iter->second<<endl;  
    27. }  
  43.   
  44. }  

 

posted @ 2018-05-26 22:55  zhqiieng  阅读(423)  评论(0编辑  收藏  举报