DS博客作业07--查找

1.本周学习总结

1.思维导图

DS博客作业07--查找_第1张图片

2.谈谈你对查找运算的认识及学习体会

本章学习了查找的相关知识。介绍了线性表查找、数表查找和哈希表查找等相关算法设计查找算法。查找又称为检索,是指在某种数据结构种找出满足给定条件的元素。感觉运算方式很多,前人的知识与发现真的特别了不起。查找这一章最主要的是二叉排序树、平衡二叉树、哈希表。课上对这三个讲得也格外的多,偏向于理论,需要我们非常清楚他们是怎么做的,结果会是怎样,适合什么情况,为为后续的选择上提供非常坚实的理论基础和方法。通过学习查找,很大程度的提高工作效率,减少时间,为我们在后续的遍历代码里能很快的找到最合适的方法。查找算法非常多样也极具针对性,在不同情况下需要对应用不同的查找算法,这样才能拥有最小的时间复杂度,值得我们好好学习。

2.PTA实验作业(6分)

2.1.题目1:7-2 航空公司VIP客户查询

2.1.1设计思路(伪代码)

定义一个string和int的map的变量a
定义整型n,k,m,km,字符数组user[19]
输入飞行记录总数N,最低历程k
for i=0 to n
    输入相应数值
    if 里程<最低里程 
        里程=最低里程
    else if a中没有身份证号
        a[身份证]=里程
   else
        身份证对应里程加上输入的里程
输入查询总数m
for i=0 to m
    输入要查询的身份证号
    if a中有该身份证号
        输出身份证号对应的里程
    else 输出“No Info”

2.1.2代码截图

DS博客作业07--查找_第2张图片
DS博客作业07--查找_第3张图片

2.1.3本题PTA提交列表说明。

DS博客作业07--查找_第4张图片

  • 最开是网上找了相应题目的代码放上去
  • 后来自己理解看代码的时候,发现太多,且很难看进去,就去问其他同学是如何做的,就看到用map的比较间的的方法,且容易理解代码量还少

2.2 题目2: 是否二叉搜索树

2.2.1设计思路(伪代码)

    定义p
    if T为空    return true
    if T左右子树皆空   return true
    p=T->Left
    if p非空
        while(p->Right)   p=p->Right;
        if(p->Data>T->Data)   return false;
    p=T->Right;
    if p非空
        while(p->Left)   p=p->Left;
        if(p->DataData)  return false;
    return IsBST(T->Left)&&IsBST(T->Right);

2.2.2代码截图

DS博客作业07--查找_第5张图片

2.2.3本题PTA提交列表说明。

  • 这题代码其实比较简单,了解了一下其他同学的思路,就是直接找左子树的最右的结点以及右子树的最左的结点,若一个小于根节点,一个大于根节点。

    2.3 题目3:QQ帐户的申请与登陆

    2.3.1设计思路

mapma
输入N
输入的字符为'N'时
    判断里面是否有该账号记录
      若没有
          输出ok   把数据输入
      若有
          输出Exist
输入的字符为‘L’时
     判断里面是否有该账号的记录
         若没有
             输出 Exist
         若有
            进一步判断密码是否正确

2.3.2代码截图

DS博客作业07--查找_第6张图片
DS博客作业07--查找_第7张图片

2.3.3本题PTA提交列表说明。

DS博客作业07--查找_第8张图片

  • 最开始就是编译器没改,导致编译错误
  • map是一个很简单方法,本来光想的时候,觉得好复杂。

    3、阅读代码

    3.1 题目

给定两个整数,被除数 dividend 和除数 divisor。将两数相除,要求不使用乘法、除法和 mod 运算符。

返回被除数 dividend 除以除数 divisor 得到的商。

示例 1:

输入: dividend = 10, divisor = 3
输出: 3
示例 2:

输入: dividend = 7, divisor = -3
输出: -2
说明:

被除数和除数均为 32 位有符号整数。
除数不为 0。
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231,  231 − 1]。本题中,如果除法结果溢出,则返回 231 − 1。

3.2 解题思路

    用异或来计算是否符号相异
    unsigned int result = 0;
    for (int i = 31; i >= 0; i--) 
        找出足够大的数2^n*divisor
            将结果加上2^n
            将被除数减去2^n*divisor
    if (result == LIMIT) 
        return INT_MIN;
    else 
        符号相异取反
    

3.3 代码截图

DS博客作业07--查找_第9张图片

3.4 学习体会

  • 首先我没怎么接触到异或这种算法,上一次是大作业的时候,其他同学写过,让我有一点接触。这一次,是我第二次在代码方面碰到这种运算方式,很新奇。只能大概说是知道了,还能这么用。
  • 说实话,题目要求近乎是把我做这道题的路全断了,真的是长见识,增知识了。

你可能感兴趣的:(DS博客作业07--查找)