DS博客作业07--查找
1.思维导图及学习体会
1.1 思维导图
1.2 学习体会 💪
- 本章学习了查找的相关知识,介绍了线性表查找、树表查找和哈希表查找等。
- 学习计算各种查找算法在成功和不成功情况下的的ASL。
- 查找是一种基础操作也是重要的算法,不同情况下需要对应用不同的查找算法,但越学习各种查找算法也越容易混乱,在学习时要更加注意理解及相关代码的实现,多研究学习
2.PTA实验作业
2.1 二叉搜索树中的最近公共祖先
在一棵树T中两个结点u和v的最近公共祖先(LCA),是树中以u和v为其后代的深度最大的那个结点。现给定某二叉搜索树(BST)中任意两个结点,要求你找出它们的最近公共祖先。
2.1.1 设计思路
定义变量 flag=0;
定义树类型 P;
P=T;
while(p)
找节点u;
if 树中没有u then
返回ERROR;
end if
end while
while(p)
找节点v;
if 树中没有v then
返回ERROR;
end if
end while
while(p)
{
if u,v都在左子树上 then
P = P->Left;
if u,v都在右子树上 then
P = P->Right;
else break;
}
return P->Key;
2.1.2 代码截图
2.1.3 PTA提交列表说明。
- 刚开始,因为大小写,导致变量名不一致;
- 各种情况没想周全,通过询问同学、参考同学代码,完成代码
2.2 QQ帐户的申请与登陆
2.2.1 设计思路
申请STL容器<long long, string>QQ存放用户信息
迭代器map<long long, string>::iterator iter;
定义 新/旧号码ch, QQ号number, 密码password;
输入N;
for i=0 to N
输入ch、number、password;
调用迭代器,查找map里面的是否有这个账号;
if ch为L then//旧号码
if QQ号存在 then
if 密码正确,输出"Login: OK";
else 输出"ERROR: Wrong PW";
end if
else 输出"ERROR: Not Exist";
end if
if ch为N then//新号码
if QQ号存在,输出"ERROR: Exist";
if QQ号不存在,添加号码信息,输出"New: OK";
ennd if
end for
2.2.2 代码截图
2.2.3 PTA提交列表说明。
- 这道题目参考了同学的代码,采用了map容器存放用户信息,而且运用了迭代器查找账号
2.3 航空公司VIP客户查询
2.3.1 设计思路
申请STL容器<string,int>mymap存放用户信息
输入飞行记录条数N、最低里程K
for i=0 to N
输入身份证号id、飞行里程mileage;
if 低于K公里按k公里累积 then
mileage=K; //低于公里按公里累积
end if
if 有相同的身份证号 then
mymap[ id]+=mileage; //累积飞行里程
end if
else mymap[ id]=mileage; //记录飞行里程
end for
输入M;
for i=0 to M
输入查询人的身份证号id;
if 有此查询人 then
输出里程累计值;
end if
else 输出“No Info”
end for
2.3.2 代码截图
2.3.3 PTA提交列表说明。
- 刚开始会运行超时,后来询问了同学后,将 cin、cout 改成 scanf、printf 就解决了问题
3.阅读代码
3.1 题目
- 红黑树的建立
3.2 解题思路
root是根,node是被插入节点,将"node"节点插入到红黑树中,插入的时候将节点的颜色改变
3.3 代码截图
3.4 学习体会
这个是c语言代码,rbtree_insert(root, node)的作用是将"node"节点插入到红黑树中,实现插入的时候将节点的颜色改变,并且用递归方法调整了红黑树,十分巧妙,值得学习。