首页 > 其他 > 详细

博客作业05--查找

时间:2018-05-26 20:51:54      阅读:327      评论:0      收藏:0      [点我收藏+]

1.学习总结

1.1查找的思维导图

技术分享图片

1.2 查找学习体会

本章查找算法主要分为线性表查找、树表查找和哈希表查找,其中线性表查找算法较为简单,树表的知识点较多,容易遗忘,需要时常复习,哈希表主要分析平均查找长度,对计算不成功的平均查找长度还不熟练。然后对于查找、插入、删除等算法程序基本上不能独立写出。

2.PTA实验作业

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

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

bool IsBST ( BinTree T ){  //判断是否为二叉树
定义变量p用于遍历二叉树,max保存左子树中的最大值,min保存右子树的最小值。
空树返回true
if T的左孩子为真  {
     p=T->left
     max保存根节点数据
     遍历找出最大值更新max
     if(max>根节点数据)
             返回false  
          }
else  if T的右孩子为真  
     同上
递归调用T的左子树及右子树 }

 2.3 代码截图

技术分享图片

 2.4 PTA提交列表说明。

技术分享图片

之前一直以为判断二叉树只要左孩子小于其父节点,右孩子大于其父节点就可,忽略了左子树中右孩子大于其大于其父节点但可能也大于其祖先节点的情况,同样右子树中左孩子小于其父节点且要大于其祖先节点。

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

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

int LCA( Tree T, int u, int v ){  //找出最近公共祖先
    定义变量p,q用于两个节点的遍历,f1,f2作为找到该节点的标志,t保存祖先节点数据
    if(T不为空)
        t保存T的数据
    while p或q为真  {
        if p为真 {
            比较u与p的数据大小决定p为其左子树或右子树
            if 相等
                 f1=1  }
        if q为真
            同上
        if q,p存在且数据相等
              t保存数据
        if f1,f2都为1
              return t;
        if p为空且f1为0或q为空且f2为0
              return ERROR;
                           }
    p、q都找不到return ERROR;   }

 2.3 代码截图

技术分享图片

 2.4 PTA提交列表说明。

技术分享图片

刚开始是一些语法错误,字符写错了之类。之后是因为在循环里通过多次条件判断一个节点的数据时,没有加上else,

导致一个节点多次符合条件,而另一个节点只符合一次条件的情况,出现错误。

2.1 题目3:7-1 QQ帐户的申请与登陆

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

定义变量I,n,id,pass,x(命令符),y(账号),z(密码)
    输入n
    for(I=0  to  n-1)   {
        输入x,y,z
        if x为N   {  //新用户注册
            if 账号已存在
                输出ERROR: Exist
            else  
                插入并输出New: OK  }

        else  {  //老账户登陆
            if 账号不存在 
                 输出ERROR: Not Exist
            else{
                 if 账户密码不一致
                     输出ERROR: Wrong PW
                 else
                     输出Login: OK  }
                          }
              }
end

2.3 代码截图

技术分享图片

2.4 PTA提交列表说明。

技术分享图片

做这道题需要用到C++的语法知识和map函数的用法,刚开始不知道map函数中的string是一个数据类型,误把它定义成了字符数组类型的数据。

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

3.1 PTA排名

技术分享图片

3.2 我的总分:130

4. 阅读代码

这是pta上的航空公司VIP客户查询,我自己用的是map容器的写法,但是有两个测试点运行超时,这是构建哈希表的写法。

技术分享图片

这是用链表法构建哈希表,Hash函数取身份证的后5位通过除留余数法构造哈希函数确定哈希地址,不过我不太明白为什么要取身份证的后5位。

NextPrim函数用于确定哈希表的长度,表长基本上小于n/2,同样也不清楚为什么表长要这样确定,可能是为了节省空间?

Init函数即初始化哈希表,主要给表头节点和数据节点申请空间,调用NextPrim函数确定哈希表长度。

Find函数用于查找哈希表中的对应id值,它首先通过Hash函数来确定id所在的哈希地址,即表头节点,再在此链表中查找id。

Insert函数把新增id插入到哈希表中,也是先确定地址,若表中无此id则插入,这边插入用的是头插法的插入方法。

 

博客作业05--查找

原文:https://www.cnblogs.com/y999/p/9079424.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!