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; }