查找
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数据,第三种为用数组方式插入数据。
例子
//验证插入函数的作用效果
- #include <map>
- #include <string>
- #include <iostream>
- using namespace std;
- int main()
- {
- map<int, string> mapStudent;
- pair<map<int, string>::iterator, bool> Insert_Pair;
- Insert_Pair = mapStudent.insert(pair<int, string>(1, "student_one"));
- if(Insert_Pair.second == true)
- cout<<"Insert Successfully"<<endl;
- else
- cout<<"Insert Failure"<<endl;
- Insert_Pair = mapStudent.insert(pair<int, string>(1, "student_two"));
- if(Insert_Pair.second == true)
- cout<<"Insert Successfully"<<endl;
- else
- cout<<"Insert Failure"<<endl;
- map<int, string>::iterator iter;
- for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)
- cout<<iter->first<<' '<<iter->second<<endl;
- //验证数组形式插入数据的效果
- #include <map>
- #include <string>
- #include <iostream>
- using namespace std;
- int main()
- {
- map<int, string> mapStudent;
- mapStudent[1] = "student_one";
- mapStudent[1] = "student_two";
- mapStudent[2] = "student_three";
- map<int, string>::iterator iter;
- for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)
- cout<<iter->first<<' '<<iter->second<<endl;
- }
- }