1.1.学习总结
1.1查找的思维导图
1.2 查找学习体会
查找方法是真的很多,我经常记错。
由于数据对象的存储位置与其关键字之间不存在确定的关系,因此,查找时,需要进行一系列对关键字的查找比较,即“查找算法”是建立在比较的基础上,查找效率由比较一次能缩小多少查找范围来决定。哈希表是依据关键字直接计算得到其对应数据对象的位置,即要求关键字与元素间存在一定对应关系,通过这个关系,能很快地由关键字得到对应的数据对象位置,这就是哈希表的思想核心。
2.PTA实验作业
2.1 题目1:是否二叉搜索树
2.2 设计思路
定义数组 a[100]表示存放树中的值
int InorderT(BinTree T){
if(树不为空){
递归遍历左子树
a中依次存放左子树的值
递归遍历右子树;
}
for 1 to i
if(a中上一个值大于该值)
return 0;
return 1;
}
bool IsBST ( BinTree T ){
if(树为空)
return true;
int b = InorderT(T);
return b为1返回真,不为1返回假;
}
2.3 代码截图
2.4 PTA提交列表说明。
编译错误是因为将建立树表的函数也写上去了,后来发现题目中已有定义并且不需要自己写,最后删掉了就成功。
2.1 题目2:二叉搜索树中的最近公共祖先
2.2 设计思路
int LCA( Tree T, int u, int v )
{
if 树为空,返回ERROR;
找不到uv 返回ERROR ;
if(u或v正好等于关键字)
return 关键字;
if(u比关键字大且v比关键字小或者U比关键字小且v比关键字大)
return 关键字;
if(u比关键字大)
return 递归调用LCA函数其中T=T->Right
if(u比关键字小)
return 递归调用LCA函数,其中T=T->Left
}
2.3 代码截图
2.4 PTA提交列表说明。
编译错误是因为只写了查找的函数,并且函数没有出口,也只比较了四种情况,
部分正确是因为少了T为空的情况,只考虑到树存在并与uv做比较的情况,没有考虑树为空或是uv不在树中的情况。
2.1 题目3:QQ帐户的申请与登陆
2.2 设计思路
定义一个string和stirng类型的map的a
n个数据
for 0 to n
if是老用户
{
if老帐户账号不存在 输出("ERROR: Not Exist");
else
{
if找到了但是密码不对 输出("ERROR: Wrong PW");
否则老帐户登陆成功 输出"Login: OK"
}
}
如果是新账户
{
if新申请的账户已经存在 输出("ERROR: Exist");
else
{
用户账户等于密码 登陆成功
输出("New: OK");
}
}
}
2.3 代码截图
2.4 PTA提交列表说明。
编译错误是因为编译器用C输出
这里的答案错误是因为用scanf 但是没有带c的头文件,实际上并不是很懂map函数,所以代码是参考网络上的。
3.截图本周题目集的PTA最后排名
3.1 PTA排名
3.2 我的总分:120分
4. 阅读代码(必做,1分)
本次为必做
查找是一个比较重要且常用的内容,请找一篇哈希表或红黑树实现查找代码。
可以去看STL重map、hash_map容器源码如何实现。也可以看JAVA\Python源码。
这是在CSDN中找到的一篇哈希表查找中关于线性探测的代码实现,相对Java或python的代码而言,c++的语言比较多,但是更为好理解,在还没接触其他语言的额情况下,看c++不会费解,其中做职责采取的散列构造函数为最常用的构造函数:除留取余数法,我在课堂上只能大概懂,但并不会用代码实现, 这种方法不仅可以对关键字直接取模,也可在折叠、平方取中 后再取模。根据经验,若散列表表长为m,通常p为小于或等于表长(最好接近m)的最小质数,可以更好的 减小冲突。