1.学习总结
1.1查找的思维导图
1.2 查找学习体会
查找算法有很多,其中线性表的查找有顺序查找,折半查找,分块查找,树表的查找有二叉排序树,平衡二叉树,B+树,B-树,还有哈希表查找;这些算法都各有各的优点和缺点;在实际运用中如果要运用的话,更方便的还是使用STL容器中查找,很多复杂的代码都可以用一句解决,可以通过insert函数来插入,通过find函数来查找map容器中是否存在id。总之使用起来很方便。
2.PTA实验作业
2.1 题目1:QQ帐户的申请与登陆
2.2 设计思路
mapqq;输入nwhile(n--){ 输入命令,账号,密码 如果命令为N 查找号码是否已经存在 若存在,输出错误提示,否则插入map 否则查找号码是否已经注册 若未注册,输出错误提示 否则验证密码是否正确 若正确,提示登录成功 否则,提示密码错误}
2.3 代码截图
2.4 PTA提交列表说明
题目比较简单,一遍就过,无调试问题。
2.1 题目2:是否二叉搜索树
2.2 设计思路
定义全局变量lastNode来保存上一个结点的值如果树空,返回true递归左子树,如果不满足条件,返回false如果T->Data不大于lastNode,返回falselastNode=T->Data;递归右子树,如果不满足条件,返回false
2.3 代码截图
2.4 PTA提交列表说明
刚开始提交时出现部分错误,看测试点发现自己没有考虑空树时的情况,于是修改了下代码,提交时发现还有一个点怎么也过不了,后来重新理清思路,重新写了一下就对了。
2.1 题目3:航空公司VIP客户查询
2.2 设计思路
mapvip;定义n,k,mile表示里程,m定义字符数组id存身份证号while(n--){ 当里程小于k,mile=k; 若身份证号码存在,累加mile 否则插入新信息}while(m--){ 查找身份证号,若查找到,输出里程 否则输出No Info}
2.3 代码截图
2.4 PTA提交列表说明
这题因为有老师提示不能用cin,cout输入输出,否则会时间超限。
3.截图本周题目集的PTA最后排名
3.1 PTA排名
3.2 我的总分:
145
4. 阅读代码
@Override public V remove(Object key) { if (key == null) { return removeNullKey(); } int hash = Collections.secondaryHash(key); HashMapEntry[] tab = table; int index = hash & (tab.length - 1); for (HashMapEntry e = tab[index], prev = null; e != null; prev = e, e = e.next) { if (e.hash == hash && key.equals(e.key)) { if (prev == null) { tab[index] = e.next; } else { prev.next = e.next; } modCount++; size--; postRemove(e); return e.value; } } return null;}
当hash相同&&key值也相同,那么就说明找到了要删除的元素;prev==null说明刚开始遍历就找到了元素,那么就说明元素是头结点。代码简洁,还调用了一些其他的函数,写的很规范。