查找

1.学习总结(2分)

1.1查找的思维导图 各种查找的时间复杂度,ASL成功,不成功。都要体现。

1232310-20180527131002269-802892447.png

1.2 查找学习体会

详解map容器的使用
map是STL的一个关联容器,它提供一对一的数据处理能力. 也就是内部存储的有两个部分,一个是固定的键值(从开始插入后就不会再改变的值)也可以称为关键字另外一个是记录该关键字的状态(大小,翻译,对应关系).所以map的作用很广泛,生活中一一对应的东西太多了,比如你的身份证号和你,比如你需要记录很多不同东西的数量,还有很多很多. 而且map还是有序的.应用场景相当广泛. 但是map也是有不能存储的数据 只要该数据不能够互相比较大小那么就不能使用map存储. 那么为什么呢?这里是由于map容器底层是使用搜索树来存储数据的,所以你在构建搜索树的时候需要不停的比较大小,这就是原因.而这里使用的搜索树是较为成熟的红黑树,正因为底层是红黑色所以map的查找,删除,插入的效率都很高. 那么如果你还是不了解为什么,那么你就需要了解红黑树的知识了,我有一篇博客专门介绍红黑树原理和实现如果不是很清楚希望这个可以帮助到你.我们可以通过map的迭代器改变map的元素内容吗? 如果想要修正元素的键值,答案是不行的,因为Map元素的键值关系到map元素的排列顺序.任意改变map元素键值将会严重破坏map组织.但如果想要修正元素的实值,答案是可以,因为map元素的实值并不影响map元素的排列规则

2.PTA实验作业(4分)

题目1:题目名称: 二叉搜索树最近的公共祖先

2.2 设计思路(伪代码或流程图)

树为空树,返回错误
u和v不在树中(用find函数去找),返回错误
以u和v的其中一个为根结点
祖先在u和v之间
若T->DATA<u,进入右子树
若T->DATA>u,进入左子树

2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)

1232310-20180527140818956-1073697068.jpg

2.4 PTA提交列表说明。

1232310-20180527141029399-1405782608.jpg

题目2:题目名称:7-1QQ账户的申请与登录

2.2 设计思路(伪代码或流程图)

建立哈希表函数
for i=0  to  账号最后一个字符
将QQ账号的ASCLL码乘3的i次方然后累加得sum(这样可以防止顺序不同但ASCLL码相同的字符串冲突)
end for
adr=sum取余p(p取质数761)
创建一个新结点q,把输入的账号和密码全部复制进此结点
若单链表adr首结点为NULL(前面首结点全部初始化为NULL)则直接令首结点等于q
else  结点不为空采用头插法插入
哈希表元素个数n自增

哈希表查找函数
求adr的方法与建立哈希表的一样
q指向对应单链表adr首结点
while to q不等于NULL
若遇到账号相同则break
q指向q的下一个结点
end while
如果q为NULL,说明未找到,返回NULL
否则返回q的地址

2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)

1232310-20180527144622671-1541498853.jpg
1232310-20180527144640117-587571288.jpg
1232310-20180527143540724-647930533.jpg
1232310-20180527143559291-207508528.jpg

2.4 PTA提交列表说明。

1232310-20180527143723476-1665256221.jpg

  • 1.刚开始初始化链表首结点时忘记给ha[i]申请空间导致段错误,后来发现了只要结构体中有定义指针就一定要申请空间的规律,如下图:
    1232310-20180527144155546-1569604411.jpg
  • 2.写的时候发现sring.h的库函数都忘得差不多了,查阅资料才又想起
  • 3.开始时不知道如何处理题目要求的账号存在但密码不符合的情况,后来想到引入变量flag和count,这一问题就得到了解决,如下图:
    1232310-20180527145029466-485404032.jpg
  • 4.开始时只是简单用ASCLL码累加法将账号字符串求和,然后对p取余,导致大数据量查找时冲突变多,后来参考陈越版教材就用乘3的i次方方法来解决冲突就可以了,如下图:
    1232310-20180527145542071-856575901.jpg
  • 5.这样做的好处是可以防止顺序不同但ASCLL码相同的字符串冲突,比如账号为123和账号为231如果只是简单地将它们的ASCLL码累加就会冲突,而用乘3的i次方方法后它们的adr值就不同了
  • 6.最后一个问题是忘记把flag和count放在循环中初始化,而只是在主函数开头将其初始化,导致答案错误;

    题目3:题目名称:航空公司VIP客户查询

    2.2 设计思路(伪代码或流程图)

建立哈希表函数
用数字分析法:adr=身份证号的第1,5,8,12,14,16位分别乘10的6,5,4,3,2,1次方
如果身份证号最后一位是x就让adr+10,否则让adr*2再加上x的ASCLL码值
创建一个新结点q,把输入的账号和密码全部复制进此结点
若单链表adr首结点为NULL(前面首结点全部初始化为NULL)则直接令首结点等于q
else  结点不为空采用头插法插入
哈希表元素个数n自增
哈希表查找函数
求adr的方法与建立哈希表的一样
q指向对应单链表adr首结点
while to q不等于NULL
若遇到账号相同则break
q指向q的下一个结点
end while
如果q为NULL,说明未找到,返回NULL
否则返回q的地址

2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)

1232310-20180527151501764-1968305475.jpg
1232310-20180527151514540-1429945802.jpg
1232310-20180527151525918-2063834467.jpg
1232310-20180527151536944-1080268349.jpg

2.4 PTA提交列表说明。

1232310-20180527151732234-1355330086.jpg

  • 1.这题的大数据量搜查的冲突还没解决,尝试了很多种方法,会继续调试

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

    1232310-20180527152344664-2085482650.jpg

    3.2 我的总分:125

    4. 阅读代码(必做,1分)

    航空公司VIP客户查询

    1232310-20180527152749567-1116437404.jpg
    1232310-20180527152800628-1662764486.jpg
  • 1.这题是用STL容器map做的,代码量较少,值得借鉴

转载于:https://www.cnblogs.com/guoruiqian/p/9094649.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值