博客作业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说明刚开始遍历就找到了元素,那么就说明元素是头结点。代码简洁,还调用了一些其他的函数,写的很规范。

5. 代码Git提交记录截图

posted @ 2018-05-26 22:47  久念  阅读(249)  评论(2编辑  收藏  举报