DS博客作业07--查找
DS博客作业07--查找
1.思维导图及学习体会
1.1思维导图
1.2.谈谈你对查找运算的认识及学习体会
本周进行了查找的学习,查找的知识相对于图和树来说就更加的简单和容易理解。在查找这一章,主要的查找方法有哈希表还有很多高效率的排序方法,比如堆排序,归并排序,还有快速排序。在希尔表中,根据关键码值而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。其中产生的希尔冲突可以用线性探查法和希尔链法来进行解决。在排序中,我们所学的高效的排序算法的时间复杂都是n(nlog2n),但是快速排序依旧是其中最佳,虽然他们都是高效的算法,但是这些算法都不稳定。
2.PTA实验作业
2.1.题目1:6-1 二叉搜索树的操作集 (30 分)
2.1.1设计思路(伪代码)
BinTree Delete(BinTree BST,ElementType X)
{
定义tmp树结点
if树空,直接输出"Not Found“
else 找到要删除的X对应结点位置
if X>当前结点 递归调用 Delete(BST->Right,X)
if X<当前结点 递归调用 Delete(BST->Left,X)
else if X=当前结点 判断当前结点左右孩子是否为空
if 左右孩子不空
调用函数FindMin(BST->Right)
tmp->Data=BST->Data 保存数据
BST树的右孩子置为结点 保证二叉搜索树的有序性
else if
if左孩子为空, 右孩子置为结点
if右孩子为空,右孩子置为结点
return BST
}
2.1.2代码截图
2.1.3本题PTA提交列表说明
2.2.题目2:6-3 二叉搜索树中的最近公共祖先 (25 分)
2.2.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->key<v且T->key>v且T->key<u 返回 结点T-key
end if
if T->key=u或T->key=v 返回 结点T->key
end if
if T->key>u或T->key>v 递归函数LCA(T->Left,u,v)
end if
if T->key<u且T->key<v 递归函数LCA(T->Right,u,v)
end if
end if
返回ERROR
}
2.2.2代码截图
2.2.3本题PTA提交列表说明
2.3.题目3:7-1 QQ帐户的申请与登陆 (25 分)
2.3.1设计思路(伪代码)
调用Map函数,若输入的命令为申请,调用T.find函数检验id,若T.find函数等于T.end,说明STL容器中没有此账号,将密码附给账号,申请成功,否则说明账号已存在;若输入命令为老账户登录调用T.find函数检验id,若T.find函数等于T.end,说明账号输入错误,若T.find函数不等于T.end,说明账号存在,判断密码是否相等,若不等,则密码输入错误,若相等,则登录成功
2.3.2代码截图