1.学习总结(2分)

1.1查找的思维导图

1.2 查找学习体会

学习体会:通过查找的学习发现自己有很多不足,无论是在代码还是预习复习方面都有所欠缺。在学习查找的知识的时候用教学视频来实现我的学习巩固,熟悉顺序查找和折半查找,索引储存结构和分块查找的平均查找长度。并且每个查找方法都有插入、删除、建表的代码,时间复杂度也各不相同。学完一整章感觉很杂乱,通过代码实现知识的梳理与巩固。

2.PTA实验作业(4分)
2.1 题目1:6-2 是否二叉搜索树
本题要求实现函数,判断给定二叉树是否二叉搜索树。

2.2 设计思路

定义静态整型变量min

if(T为空)返回true

递归调用左子树IsBST

( T->Left );

if(T->data大于min)

则将T->data赋给min

else return false

递归调用右子树IsBST ( T->Right );

return true

2.3 代码截图

2.4 PTA提交列表说明。

PTA提交列表中的每个错误详细说明为什么及如何解决。
开始只运用简单代码实现,后加以借鉴得到最后答案。

2.1 题目2:6-3 二叉搜索树中的最近公共祖先
在一棵树T中两个结点u和v的最近公共祖先(LCA),是树中以u和v为其后代的深度最大的那个结点。现给定某二叉搜索树(BST)中任意两个结点,要求你找出它们的最近公共祖先。

2.2 设计思路

int  find(Tree T,int u){

if 树为空返回0

if(u等于关键字则返回1)

if(u大于关键字,则查找右子树,反之,查找左子树)

}

int LCA( Tree T,  int u, int v ) {

if t为空则返回error

若不为空就v或u等于关键字,等于就返回关键字

if(u大于关键字,则返回左子树,反之,返回右子树)

}

2.3 代码截图

2.4 PTA提交列表说明。


PTA提交列表中的每个错误详细说明为什么及如何解决。

最开始未考虑到每种情况,疏忽一种情况,加上后完全正确。

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

实现QQ新帐户申请和老帐户登陆的简化版功能。最大挑战是:据说现在的QQ号码已经有10位数了。

2.2 设计思路

若新申请帐户成功,则输出“New: OK”;
若新申请的号码已经存在,则输出“ERROR: Exist”;
若老帐户登陆成功,则输出“Login: OK”;
若老帐户QQ号码不存在,则输出“ERROR: Not Exist”;
若老帐户密码错误,则输出“ERROR: Wrong PW

2.3 代码截图

2.4 PTA提交列表说明。

PTA提交列表中的每个错误详细说明为什么及如何解决。

开始未使用map编程导致编译错误,后借鉴代码运用map后得到答案。

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

 

4.阅读代码

#include <stdio.h>
#define MAXL 100
typedef int KeyType;
typedef char InfoType[10];
typedef struct
{
    KeyType key;                //KeyType为关键字的数据类型
    InfoType data;              //其他数据
} NodeType;
typedef NodeType SeqList[MAXL];     //顺序表类型

int BinSearch1(SeqList R,int low,int high,KeyType k)
{
    int mid;
    if (low<=high)      //查找区间存在一个及以上元素
    {
        mid=(low+high)/2;  //求中间位置
        if (R[mid].key==k) //查找成功返回其逻辑序号mid+1
            return mid+1;
        if (R[mid].key>k)  //在R[low..mid-1]中递归查找
            BinSearch1(R,low,mid-1,k);
        else              //在R[mid+1..high]中递归查找
            BinSearch1(R,mid+1,high,k);
    }
    else
        return 0;
}

int main()
{
    int i,n=10;
    int result;
    SeqList R;
    KeyType a[]= {1,3,9,12,32,41,45,62,75,77},x=75;
    for (i=0; i<n; i++)
        R[i].key=a[i];
    result = BinSearch1(R,0,n-1,x);
    if(result>0)
        printf("序列中第 %d 个是 %d\n",result, x);
    else
        printf("木有找到!\n");
    return 0;
}