博客作业05--查找

时间:2022-04-10 21:56:29

1.1.学习总结

1.1查找的思维导图

博客作业05--查找

 

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 代码截图

博客作业05--查找

 

2.4 PTA提交列表说明。

 

 博客作业05--查找

博客作业05--查找

编译错误是因为将建立树表的函数也写上去了,后来发现题目中已有定义并且不需要自己写,最后删掉了就成功。

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 代码截图

博客作业05--查找

 

2.4 PTA提交列表说明。

 博客作业05--查找

 

博客作业05--查找

编译错误是因为只写了查找的函数,并且函数没有出口,也只比较了四种情况,

部分正确是因为少了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 代码截图

博客作业05--查找

 

2.4 PTA提交列表说明。

博客作业05--查找

 

 博客作业05--查找

编译错误是因为编译器用C输出

博客作业05--查找

 

 这里的答案错误是因为用scanf 但是没有带c的头文件,实际上并不是很懂map函数,所以代码是参考网络上的。

 

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

3.1 PTA排名

博客作业05--查找

 

3.2 我的总分:120分

 

4. 阅读代码(必做,1分)

本次为必做
查找是一个比较重要且常用的内容,请找一篇哈希表或红黑树实现查找代码。
可以去看STL重map、hash_map容器源码如何实现。也可以看JAVA\Python源码。

 博客作业05--查找

博客作业05--查找

博客作业05--查找

博客作业05--查找

 

博客作业05--查找

博客作业05--查找

 

博客作业05--查找

 

这是在CSDN中找到的一篇哈希表查找中关于线性探测的代码实现,相对Java或python的代码而言,c++的语言比较多,但是更为好理解,在还没接触其他语言的额情况下,看c++不会费解,其中做职责采取的散列构造函数为最常用的构造函数:除留取余数法,我在课堂上只能大概懂,但并不会用代码实现, 这种方法不仅可以对关键字直接取模,也可在折叠、平方取中  后再取模。根据经验,若散列表表长为m,通常p为小于或等于表长(最好接近m)的最小质数,可以更好的  减小冲突。



博客作业05--查找