博客作业05--查找
1.学习总结
1.1查找的思维导图
1.2 查找学习体会
查找算法有很多,其中线性表的查找有顺序查找,折半查找,分块查找,树表的查找有二叉排序树,平衡二叉树,B+树,B-树,还有哈希表查找;这些算法都各有各的优点和缺点;在实际运用中如果要运用的话,更方便的还是使用STL容器中查找,很多复杂的代码都可以用一句解决,可以通过insert函数来插入,通过find函数来查找map容器中是否存在id。总之使用起来很方便。
2.PTA实验作业
2.1 题目1:QQ帐户的申请与登陆
2.2 设计思路
map<string,string>qq;
输入n
while(n--){
输入命令,账号,密码
如果命令为N
查找号码是否已经存在
若存在,输出错误提示,否则插入map
否则查找号码是否已经注册
若未注册,输出错误提示
否则验证密码是否正确
若正确,提示登录成功
否则,提示密码错误
}
2.3 代码截图
2.4 PTA提交列表说明
题目比较简单,一遍就过,无调试问题。
2.1 题目2:是否二叉搜索树
2.2 设计思路
定义全局变量lastNode来保存上一个结点的值
如果树空,返回true
递归左子树,如果不满足条件,返回false
如果T->Data不大于lastNode,返回false
lastNode=T->Data;
递归右子树,如果不满足条件,返回false
2.3 代码截图
2.4 PTA提交列表说明
刚开始提交时出现部分错误,看测试点发现自己没有考虑空树时的情况,于是修改了下代码,提交时发现还有一个点怎么也过不了,后来重新理清思路,重新写了一下就对了。
2.1 题目3:航空公司VIP客户查询
2.2 设计思路
map<string,int>vip;
定义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<K, V>[] tab = table;
int index = hash & (tab.length - 1);
for (HashMapEntry<K, V> 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说明刚开始遍历就找到了元素,那么就说明元素是头结点。代码简洁,还调用了一些其他的函数,写的很规范。