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

1.1思维导图



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

    在查找这一章,我学习的比较认真,但是还是有部分没太清楚。这章没有前一章树那么多的代码要记,但是还是要用心。 比如老师介绍了几种容器:对于STL容器;c++中有两种类型的容器:顺序容器和关联容器。老师只介绍了map容器,map是key-value形式的,在写题目的时候,使用map会方便很多,容器类自动申请和释放内存,我们无需new和delete操作。对于迭代器来说,我看了百度很迷糊,map会根据key自动排序,这一点在很多功能的实现上大大的降低了代码量,可以很简单的实现想要的功能。
其次,这一章的学习,代码上面不是很长。而且查找中有些代码我们以前学过,折半啊,冒泡等,其余的一些查找方法代码上也不是很多,理解起来还是不难。
这一章的学习又涉及到了一些递归。在处理上还是有一些难度,但是直接背代码还是可以的。哈希查找这一块主要是ASL 的计算,这种问题把哈希表列出了基本上不会出错了,就是要注意ASL不成功的时候除以的是p。哈希链的方式也是雷同的,还是不会很难理解。总体上这一章的学习还是算比较顺利的,重点知识相对前几章是比较好理解。
最后,这一章的一个难点就是好像又牵扯到了递归,又回到了之前那段有点迷糊的感觉。递归总体上还是不是掌握的很好,只能背代码。

2.PTA实验作业(6分)

2.1.题目1:题目名称

2.1.1设计思路(伪代码)

Find 函数
{
if T为空 then return 0
end if
if x 等于 关键字 then
return 1
else if x 大于 关键字 then
调用函数find(T->Right, x)
else
调用函数find(T->Left, x)
end if
} LCA函数
{
if T 为空 then 返回错误
end if
if find(T, u) 返回0或者find(T, v)返回0 then 返回错误
end if
if T->Key 大于等于u且T->Key小于v或 T->Key 小于等于 u且T->Key 大于等于 v then
返回 T->Key
if u > T->Key then
LCA(T->Right, u, v);
else if u < T->Key then
LCA(T->Left, u, v);
}

2.1.2代码截图

2.1.3本题PTA提交列表说明。

问题1:起初看到这道题,就感觉没思路,沉住气看了一会儿,思路如下:

有两种情况:1.u,v不在树中;

2.u,v在树中:u,v都在左子树上;

u,v都在右子树上;

u,v一个在左子树上,一个在右子树上;

u,v有一个在根上。

但是编出来的代码不对,测试数据有过不了,我就搜了一下百度。

答:发现把上面第一种情况漏了,没有思考全面。加上去后,可以通过。

2.2.题目2:题目名称

2.2.1设计思路(伪代码)

Main:
定义整数n,m;符串 a,b,c;
set<string> match; //初始化set容器match 存账号
map<string,string> iter; //存的密码
输入n;
while n>0且n-- do
输入 a、b、c;
if a等于字符L then
if match.find(b)等于match.end() then //已有账号中没找到该账号
输出ERROR: Not Exist
else
if iter[b]不等于c
输出ERROR: Wrong PW
else
输出Login: OK
end if
else if a等于N if match.find(b)不等于match.end() then
输出ERROR: Exist
else
输出New: OK
iter[b]=c;
match.insert(b);
end if
end if end while

2.2.2代码截图

2.2.3本题PTA提交列表说明。

问题1:首先定义了个数组用来存放QQ号和密码的,发现有个测试点事有界限的问题。

答:修改了数组的大小再交上去过了那个测试点。

问题2:在map中查找是可以用map[]查找,若map[]不存在,会直接插入,导致再次查找时结果为存在。

答:改用库函数在map中查找用map.find()查找。

2.3 题目3:题目名称

2.3.1设计思路(伪代码)

定义map<string,long int>  vip
输VIP人数n和航程k
定义char ID[19];long int mile;
for i=0 to n
输入ID,mile
若mile小于k,让mile=k
vip[ID]+=k //ID 不存在时会直接插入,所以直接加
end for
for i=0 to n
输入 ID
若vip中有该ID,输出vip[ID]
若没有,输出 No Info
end for

2.3.2代码截图

2.3.3本题PTA提交列表说明。

问题1:第一思路就是用map将客户的id(string类型)与里程road(int类型)形成映射,然后直接用id查找添加里程或输出里程。

答:发现会超时。改了别的办法。

问题1:一开始用string定义会出现超时问题,编译器运行无反应,

答:改用数组来,结果就可以了。

问题2:用编译器后面两个测试点运行超时,不知道为啥。

答:要用scanf和printf,不能使用c++的语法,这里我也不知道为啥,把上面代码的输入和输出改成c语法就可以了。

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

3.1 题目

介绍代码解决问题

3.2 解题思路

把序列1建立成一棵二叉搜索树,然后在树中按顺序遍历搜索序列2中的每一个数,如果每次搜索时,经过的结点都被搜索过,那就是一样的两棵搜索树;否则,如果某次搜索时,经过有前面没被搜索过的结点,那这两棵树就不一样。



例如序列1构造的树BT,序列2中的序列我们按顺序一个一个的在BT里搜索。一开始搜索5,5是根结点,找到了,接下来到4,查找4时会经过左结点3,这时的3时前面没被搜索过的,所以这样我们就可以判别这两个序列形成的二叉搜索树时不同的。根据这个方法,我们在构建二叉搜索树的结构时就要加一个标记,flag=0;用作后面判别时,判断这个结点有没有被搜索过,flag一开始定义为0,表示没搜索过,被搜索过后的结点的flag就令它等于1。

3.3 代码截图

3.4 学习体会

如果我拿到这个题目,一开始肯定不会这样想思路,应该是这样:

很自然的我们就想到是两棵树做遍历,比较每一个结点,也就是用递归,一开始看根结点同不同,然后递归比较左子树同不同,右子树同不同,这样的方法代码和遍历相似。代码类似这样



这个题目的思路给了我一种很新的感觉,虽然代码上面没这么有优势,不过里面的定义结构体的时候加了一个falg判断,这一点在很多时候可以借用。他使用了这个结构后,思路也是不一样 了,

函数的两个参数一个是树BT,根据一个序列建立的二叉搜索树。另一个参数X为要判别是否一致的另一个插入序列。断结点的flag,如果被搜索过,也就是flag1,就会做递归遍历搜索,否则如果遇到flag0,也就是遇到没被搜索过的结点,这时就要做判断了:判断这个没被搜索过的结点的Data和X是否相等,如果相等,就是说这个结点就是我要搜索的结点,就把它的Data设为1。如果该结点的Data和X不相等,也就是说在搜索过程中,没找到要搜索的元素时,就碰到了前面没被搜索过的结点,那么就可以判断这个插入序列和树BT是不相等的了。这个判别函数的结构就是一个查找的结构。

DS-博客作业07的更多相关文章

  1. DS博客作业--07查找

    目录 DS博客作业--07查找 1.本周学习总结(0--2分) 1.思维导图 2.谈谈你对查找运算的认识及学习体会. 2.PTA实验作业(6分) 2.1.题目1:6-1 二叉搜索树的操作集 (30 分 ...

  2. DS博客作业07—查找

    1.本周学习总结 1.1思维导图 1.2学习体会 本章学习了顺序表.树表.哈希表的查找方式,学会计算各种查找方式下的ASL 树表部分的b树和平衡二叉树较为复杂,哈希表相对容易掌握 期末要复习的有点多, ...

  3. DS博客作业07——查找

    1.本周学习总结 1.1思维导图 1.2.谈谈你对查找运算的认识及学习体会. 查找的内容和前两章树和图相比,要简单许多,在二次搜索树虽然也要用到树,但是也是很简单的树的操作,再加上查找的代码可以使用m ...

  4. DS博客作业——树

    DS博客作业--树 1.本周学习总结 1.思维导图 2.谈谈你对树结构的认识及学习体会. 在树这一章节,我们学习的是二叉树的算法. 树的构建:一种是直接给树的顺序存储结构的字符串,一种是通过先序遍历和 ...

  5. DS博客作业08--课程总结

    DS博客作业08--课程总结 1.当初你是如何做出选择计算机专业的决定的? 1.1 经过一年学习,你的看法改变了么,为什么? 1.2 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗? 为什么? 1. ...

  6. DS博客作业05--查找

    这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业05--查找 这个作业的目标 学习查找的相关结构 姓名 黄静 目录 0.PTA得分截图 1.本周学习总结 1.1 ...

  7. DS博客作业04--图

    这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业04--图 这个作业的目标 学习图结构设计及相关算法 姓名 黄静 目录 0.PTA得分截图 1.本周学习总结 1. ...

  8. DS博客作业03--树

    这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业03--树 这个作业的目标 学习树结构设计及运算操作 姓名 黄静 目录 0. PTA得分截图 1. 本周学习总结 ...

  9. DS博客作业--课程总结

    1.当初你是如何做出选择计算机专业的决定的? 经过一年学习,你的看法改变了么,为什么? 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗? 为什么? 刚开始填报志愿的时候,因为我个人是没有什么比较特别 ...

  10. DS博客作业01--日期抽象数据类型设计与实现

    1.思维导图及学习体会 1.1第一章绪论知识点思维导图 1.2 学习体会 这次博客园和大作业是我在编程学习中的有意义的进步,第一次尝试使用vs,并且通过同学的一些网站的推荐,和热心同学的帮忙,简单学会 ...

随机推荐

  1. SIP 3pcc

    3PCC全称Third Party Call Control,中文即第三方电话呼叫控制,指的是由第三方控制者在另外两者之间建立一个会话,由控制者负责会话双方的媒体协商.3PCC是一种非常灵活的会话控制 ...

  2. LeetCode:627.交换工资

    题目链接:https://leetcode-cn.com/problems/swap-salary/ 题目 给定一个 salary 表,如下所示,有 m = 男性 和 f = 女性 的值.交换所有的 ...

  3. swagger 的使用

    最近在用 .Net Core 做项目 了解到swagger 是一个不错的工具 简单介绍一下 在使用asp.net core 进行api开发完成后,书写api说明文档对于程序员来说想必是件很痛苦的事情吧 ...

  4. 第三章、前端之JavaScript

    目录 第三章.前端之JavaScript 一.javaScript的引入方式 二.JavaScript语言的规范 三.语言基础 变量声明 四.数据类型 五.流程控制 六.函数 函数的argument ...

  5. kolla-ansible 部署多region

    目录 kolla-ansible 部署多region 一.前言 二.部署架构 三.部署细节 1.部署RegionOne 2.部署RegionTwo kolla-ansible 部署多region 一. ...

  6. Mybatis入门配置及第一个Mybatis程序

    目的:使用mybatis来进行对数据库表的操作 第一步:引入jar包 我这里是创建的maven工程 第二步:创建数据表user 第三步:创建实体类 实体类放在包 com.xxx.pojo 下,包名可自 ...

  7. java--springmvc

    springmvc请求图 SpringMVC内部的执行流程1.用户发起到达中央调度器DispatcherServlet2.中央调度器DispatcherServlet把请求(some.do)交给了处理 ...

  8. LoadRunner(2)

    一.性能测试的基本概念 1.并发和在线的区别:并发的压力是一种瞬时压力,一般针对同一类型业务:在线的压力是一段时间的压力,没有并发那么集中. 规律:一般20用户并发产生的压力相当于200用户在线的压力 ...

  9. 牛客练习赛42 C 出题的诀窍 (贡献,卡常)

    牛客练习赛42 C 出题的诀窍 链接:https://ac.nowcoder.com/acm/contest/393/C来源:牛客网 题目描述 给定m个长为n的序列a1,a2,-,ama_1 , a_ ...

  10. centos7 nginx设置开启启动

    添加系统服务 在 /usr/lib/systemd/system 目录中添加 nginx.service,根据实际情况进行修改,详细解析可查看下方参考资料中的文章.内容如下 ?     [Unit] ...