一、学习总结
1.1、查找的思维导图
1.2、查找学习体会
本章学习了许多有关查找的方法,比如二叉排序树,AVL树,B-树,B+树,哈希表。在学习这些内容的过程中,我遇到了许许多多的问题,例如树表查找较为困难,因为它比起线性表的串联更像是一种一对多的关系,在这种一对多的关系中,将算法的时间和空间复杂度大大降低,这种进阶思想较为难以理解,其他的内容多多少少也有些掌握不足,同样存在各种各样的问题,需要今后的学习来进行补缺补漏。
二、PTA实验作业
题目一、是否二叉搜索树
(1).设计思路
二叉搜索树在中序遍历后得到递增序列,所以先设计一个子函数将所得的二叉树中序遍历,再通过bool IsBST判断其是否为二叉搜索树。
(2)代码截图
(3)PTA提交列表
遗漏了一个return忘记加上,导致编译错误,其中删改也有种种问题,但没有想明白为什么最后一部分可有可无。
题目二、二叉搜索树中的最近公共祖先
(1)设计思路
1 一种情况为u,v都不在二叉树中
2一种情况为u,v在二叉树中
(1)u,v都在左子树上,T=T->Left,递归,求出公共祖先。
( 2 ) u , v都在右子树上,T=T->Right,递归,求出公共祖先。
(3)u,v分别在左子树和右子树上,公共祖先就为当前节点指向的key
(4)u,v有一个在根上,公共祖先就为在根上的那个。
伪代码描述
if( T不为NULL)
返回ERROR
If( 找不到u或v)
返回ERROR
If(u或v等于T->Key)
返回当前节点
If ( u和v一个大于T一个小于T)
返回当前节点
If( 两个都大于T)
返回LCA(T->Right,u,v)
If( 两个都小于T)
返回LCA(T->Left,u,v)
(2)代码截图
(3)PTA提交列表
漏加了错误状况,第一次漏掉了一个分号。
题目三、QQ帐户的申请与登陆
(1)设计思路
根据输入的n循环n次
再根据输入的是N还是L来判断
伪代码:
循环n次
如果是N
scanf(账号及密码)
判断账号是否存在
if存在,输出ERROR: Exist
else注册成功,输出New: OK
如果(是L){
if账号不存在,输出ERROR: Not Exist
if密码不对,输出ERROR: Wrong PW
if登录成功,输出 Login: OK}
(2)代码截图
(3)PTA提交列表
忘记改成C++……
三、PTA排名截图
四、阅读代码
#include <map> map
是使用红黑树实现的,访问、查找和删除操作的复杂度都是O(log2n),插入会比较慢。
map,顾名思义就是地图。其实就是key,value的对应。当你需要快速的获取对应key的value的时候,就可以使用map了。例如一个人是有名字,但是这个人还有其他的属性,例如年龄,性别等等。
这个人就会被封装为一个对象。如果有很多个人,我们需要快速的根据一个人的名字获取对应名字的对象,这个时候map就有用了。
如果采用数组,我们需要遍历整个数组,才可以根据名字找到这个人。如果是map(以名字为key,以人的对象为value),就可以直接根据名字得到这个对象,就不需要遍历操作了。
Map是c++的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!
1. map最基本的构造函数;
map<string , int >mapstring; map<int ,string >mapint; //这样就定义了一个用int作为索引,并拥有相关联的指向string的指针.
map<sring, char>mapstring; map< char ,string>mapchar;
map<char ,int>mapchar; map<int ,char >mapint;
2. map添加数据;
map<int ,string> maplive;
1.maplive.insert(pair<int,string>(102,"aclive"));
2.maplive.insert(map<int,string>::value_type(321,"hai"));
3, maplive[112]="April";//map中最简单最常用的插入添加!
3,map中元素的查找:
find()函数返回一个迭代器指向键值为key的元素,如果没找到就返回指向map尾部的迭代器。
map<int ,string >::iterator l_it;;
l_it=maplive.find(112);
if(l_it==maplive.end())
cout<<"we do not find 112"<<endl;
else cout<<"wo find 112"<<endl;
4,map中元素的删除:
删除112;
map<int ,string >::iterator l_it;;
l_it=maplive.find(112);
if(l_it==maplive.end())
else maplive.erase(l_it); //delete 112;