20182309 2019-2020-1 《数据结构与面向对象程序设计》第8周学习总结

20182309 2019-2020-1 《数据结构与面向对象程序设计》第8周学习总结

教材学习内容总结

  • 查找
    • 线性查找
    • 二分查找
    • 哈希查找
  • 排序
    • 选择排序
    • 插入排序
    • 冒泡排序
    • 快速排序
    • 归并排序

教材学习中的问题和解决过程

  • 问题1:改进冒泡排序
  • 问题1解决方案:设立以个flag,如果有一次没有交换,那么排序提前完成
  • 问题2:改进线性查找
  • 问题2解决方案:倒着查找,在0位置放一个哨兵等于查找的值,如果查到哨兵则未找到。可以少在循环里判断一个值。

代码调试中的问题和解决过程

  • 问题1:哈希查找的代码没头绪
  • 问题1解决方案:
public class HashTablelink {
    private final String TAG="HashTablelink";
    private SortedList[] hashArray;
    private int arraySize;
    public HashTablelink(int size){
        arraySize=size;
        hashArray=new SortedList[arraySize];
        for(int i=0;i<arraySize;i++){
            hashArray[i]=new SortedList();
        }
    }
 
    public void displayTable(){
        StringBuilder sb=new StringBuilder();
        sb.append("[");
        for(int j=0;j<arraySize;j++){
            sb.append(hashArray[j].toString());
            sb.append(",");
        }
        sb.append("]");
        Log.v(TAG,"HastTableLink的值为:"+sb.toString());
    }
 
    /**
     * 首次哈希
     * 将传入的key经过hash算法,这里使用的普通除以数组大小求余的方法,而实际不是这么简单
     * @param key
     * @return
     */
    public int hashFunc(int key){
        return key%arraySize;
    }
 
    /**
     * 插入元素
     */
    public void insert(LinkHash item){
        int key=item.getKey();
        int hashVal=hashFunc(key);//哈希到的下标位置
        hashArray[hashVal].insert(item);
    }
 
    /**
     * 删除元素
     */
    public void delete(int key){
        int hashVal=hashFunc(key);//哈希到的下标位置
        hashArray[key].delete(key);
    }
 
    /**
     * 查找元素
     */
    public LinkHash find(int key){
        int hashVal=hashFunc(key);//哈希到的下标位置
        LinkHash theLink=hashArray[hashVal].find(key);
        return theLink;
    }
 
}

代码托管

结对及互评

  • 代码中值得学习的或问题:
    • 提出与课本不同的方法解决问题
  • 基于评分标准,我给本博客打分:11分。得分情况如下:
    • 正确使用Markdown语法加1分
    • 模板中的要素齐全加1分
    • 教材学习中的问题和解决过程, 二个问题加2分
    • 代码调试中的问题和解决过程, 一个问题加1分
    • 本周有效代码超过300分行的加2分
    • 排版精美的加1分
    • 代码Commit Message规范的加1分
    • 有动手写新代码的加1分
    • 结对学习情况真实可信的加1分

点评过的同学博客和代码

  • 本周结对学习情况
    • 20182331
      • 阅读教材第13章章节内容
      • 代码托管到码云上
      • 完成课后自测题,并参考答案学习
      • 完成课后练习题
      • 完成程序设计项目,至少完成pp13.2,pp13.6

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 10000行 30篇 400小时
第一周 138/138 2/2 25/25 学会写和上传代码,会编简单的输出程序
第二周 88/226 1/3 30/55 起文件名不能太长
第三周 898/1124 2/5 35/90 Java类里面的方法和C语言的函数很像
第四周 632/1756 2/7 30/120 可以用继承extends简化重复的代码
第五周 770/2526 2/9 45/165 --amend -m可以重命名没push的文件
第六周 3947/6473 2/11 40/205 接口类的功能要分散,利用多继承完成功能
第七周 1359/7832 3/14 35/240
第八周 273/8105 1/15 15/255 查找前先排序更好

参考资料

posted @ 2019-11-04 16:46  蓝火BlueFlameAshe  阅读(115)  评论(0编辑  收藏  举报