DS博客作业07--查找

1.本周学习总结(0--2分)

1.1思维导图

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

1.2 谈谈你对查找运算的认识及学习体会。

查找算法用关键字标识一个 数据元素,查找时根据给定的某个值,在表中确定一个关键字的值等于给定值的记录或数据元素。
它有顺序查找、折半查找、分块查找和哈希表查找这几种查找形式。
1.顺序查找:顺序查找适合于存储结构为顺序存储或链接存储的线性表。
2.折半查找:元素必须是有序的,如果是无序的则要先进行排序操作。这也是一种效率较高的查找方法
3.分块查找:分块查找又称索引顺序查找,它是顺序查找的一种改进方法。
4.哈希表查找:哈希查找是一种比较典型和方便的查找方式

2.PTA实验作业(6分)

2.1.题目1:6-2 是否二叉搜索树 (25 分)

2.1.1设计思路(伪代码)

bool IsBST ( BinTree T )
{
    if树存在 
    {
        递归左子树T->Left
        结点值存入数组a
        递归右子树T->Right
    }
    for(j=1 to i) 
    {
        if(a[j-1]>=a[j])
        返回错误 
    }
    返回正确
} 

2.1.2代码截图(注意,截图,截图,截图。不要粘贴博客上。)

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

2.1.3本题PTA提交列表说明。

这道函数题比较简单,提交了两次就过了。第一次在for循环的循环条件里多了一个=号,会导致数组的下标越界
,删去后即答案正确。

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

2.2.1设计思路(伪代码)

int main() 
{  
    定义一个map,包含身份证和里程数
    定义string 类型的id,long long 类型的 len 
    while(输入航班信息)    
        if(该id是第一次坐航班)
            id对应的关键字初始化为len  
            if(len小于最低里程)
            对应的关键字初始化为最低里程
            end if
        else if(len小于最低里程)
            次关键字=原次关键字+最低里程 
        else
            次关键字=原次关键字+len
        end if-else
    end while;
    while(输入身份信息)  
        if(找到该id信息)
            输出里程数
        else
            输出info
        end if-else 
    end while;
    return 0;  
}

2.2.2代码截图(注意,截图,截图,截图。不要粘贴博客上。)

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

2.2.3本题PTA提交列表说明。


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

这道题用了map容器,也是一道运用红黑树写法的题目。
代码看起来相对简洁一点。
运行超时:while循环条件写错,变成了一个死循环
一系列的答案错误:DS博客作业07--查找_第6张图片
然后开始找别的同学的代码来对比,不断修正错误

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

2.3.1设计思路(伪代码)

int LCA(Tree T,int u,int v)
{
    if T 为空,返回 ERROR
    else if   (Find(T,u)且Find(T,v))   结点在树中
    if T->key>u且T->keykey>v且T->keykey=u或T->key=v  返回 结点T->key  
            end if
    if T->key>u或T->key>v 递归函数LCA(T->Left,u,v)   
            end if
    if T->keykeyRight,u,v)   
            end if
                 end if
    返回ERROR
}

2.3.2代码截图(注意,截图,截图,截图。不要粘贴博客上。)

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

2.3.3本题PTA提交列表说明。

错误:
1.因为函数题直接在浏览器上写的,所以第一个编译错误是单词拼写错误,当时没有及时发现。
2.两个if里我遍历的都是左孩子
3.找不到共同祖先时返回值不对

3、阅读代码(-2--2分)

3.1 题目:将一棵树对称(镜像)后输出

3.2 解题思路

先序遍历这棵树的每个结点,如果遍历到的结点有子结点,则交换它的两个子结点。当交换完所有非叶子结点的左右子结点之后,就得到了树的镜像。

3.3 代码截图

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

3.4 学习体会

在对树中的元素,无论是左右孩子结点还是数据元素Data,都要注意考虑它们的值是否为空。将一个树对称镜像输出建议运用先序遍历,因为是对称输出,而先序遍历是先访问根结点,再遍历左右孩子结点,这样只需要考虑左右结点的值互换即可。

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