20172322 《程序设计与数据结构》第四周学习总结

20172322 《程序设计与数据结构》第四周学习总结

教材学习内容总结

  • 列表的分类:有序列表、无序列表、索引列表,一共三类。
    • 有序列表:在其中添加一个元素时,元素会自动去寻找本身应该在的位置,而列表的顺序能够由编写者决定,每个新加的元素的位置是固定的。
    • 无序列表:无序列表中的元素按照使用者所决定的的方式排序,使用者能够在无序列表的任何位置添加元素而且将元素固定在该位置,可是他们也是有顺序的,只是这种顺序与元素自己无关。
    • 索引列表:在Java集合API中所提供的列表类主要就是索引列表书上的CourseProgramOfStudyPOSTester就是利用Java集合API中所提供索引列表实现的。而Josephus也是索引列表的一个体现。
  • 跟以往相似,一样是经过链表和数组分别实现列表,可是由于索引列表在Java集合API中已经存在,本章的主要内容讲述了如何利用链表和数组去实现有序列表和无序列表。一样的本章也提供了一个列表ADT里面的基本方法removeFirst removeLast remove first last contains isEmpty size toString用于实现列表的基本功能。
    • 数组实现列表基本功能:利用数组实现列表的操做比较简单,书上也给出了大部分操做,而且由于实现列表的操做和实验一的一些操做相似。值得一提的是find方法的巧妙利用,由于布尔值的整形意义正好表明着0和-1,因此在contains操做中直接利用了这个0和-1返回布尔值。
    • 数组实现有序列表:书上代码已经直接给出了实现方法,也为以后利用链表实现提供必定的参考。重点是,只有Comparable对象才能储存在有序列表表中。
    • 数组实现无序列表:在中间插入的方法addAfter已经给出,最大的一个问题已经解决,注意该方法须要输入的两个元素前面一个才是插入的元素,可是其实能够本身更改。
    • 链表实现列表基本功能:书上只提供了remove操做,可是该方法中提供的遍历整个列表的方法为以后实现contains方法提供了帮助。
    • 链表实现有序列表和无序列表:这一部分书上没有给出任何参考。

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

  • 问题一:本章的代码实在是有点多了…本章教材一共30页,代码内容占到了15页左右
  • 问题一解决方案:在国庆假期中手都快要敲断了才敲完了这么多代码,代码量一会儿就上去了。
  • 问题二:本次的PP项目看似很少也就3个项目,可是在实际实现的时候却发现完成这三个项目须要完成7个PP项目…
  • 问题二解决方案:其实我也是在编写第一个PP项目的测试类时才发现的,用数组实现列表的基本功能里没有添加元素...
  • 问题三:instantof方法是用来干吗的?
  • 问题三解决方案:参考百度百科——instantof,instanceof是Java、php的一个二元操做符(运算符),和==,>,<是同一类东西。因为它是由字母组成的,因此也是Java的保留关键字。它的做用是判断其左边对象是否为其右边类的实例,返回boolean类型的数据。

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

在实现的过程当中也参考了部分网上的内容,内容来源:用链表实现3种类型的线性表(有序链表、无序链表、索引链表)php

  • 问题一:在编写利用数组实现列表基本功能lastremoveLast时在测试调用该方法后老是显示last是null而removeLast方法老是报错。
  • 问题一解决方案:利用Debug方法单步调试,发现是由于数组的索引值是从0开始的,而我利用的删除和显示最后一个均让索引值等于了列表的长度,致使我所获得的是列表最后一个值的下一个,因此是null,因此会报错。
  • 问题二:在编写LinkedListLinkedOrderedList后测试时,老是会抛出错误NullPointException,可是利用DeBug单步调试时能够发现元素是已经添加到了列表之中。
  • 问题二解决方案:通过屡次的尝试和调试,发现first方法能够正常使用,便将first方法和其余方法进行对比,发现问题的根源在于:我在写first方法时令了一个新的变量front它的存在做用与head相似,也是整个链表的开头,可是在其余的方法中我将fronthead混用了,致使整个链表的丢失。我将全部的fronthead作了一个整合后解决了问题。
  • 问题三:在测试LinkedList时发现方法firstlast调取的值是同样的,均是列表的前端元素也就是first的值。
  • 问题三解决方案:返回查看firstlast的代码,发现当初写的时候我是直接复制粘贴的,应该准备以后改正却忘记了...便改了改...
LinearNode<T> last = head;
        for (int i = 0; i<count-1;i++)
        {
            last = last.getNext();
        }
        return last.getElement();

代码托管“点这里跳转到码云”

上周考试错题总结

上周考试全对,没有错题。有两次考试....忘了前端

  • 错题1:
  • 理解:这里的top相似于链表中用于计数的count,并非指的栈顶元素
  • 错题2:
  • 理解:多态的引用能够随时间的改变而改变引用。
  • 错题3:
  • 理解:眼瞎,没读懂是啥意思。
  • 错题4:
  • 理解:栈顶是前端。

结对及互评

  • 博客中值得学习的或问题:
    • 范雯琪同窗的博客课本上的学习内容总结部分写得十分详细,值得学习。
    • 每次看到范雯琪同窗的博客本身都比较惭愧,实在是很是优秀,可想而知她在博客这一方面所作出的努力,我也很是想向她学习。
    • 代码量其实能够直接点击查看本周的文件夹里的代码,会方便一些。
  • 代码中值得学习的或问题:
    • commit提交的解释清晰明了,我以为我应该学习。

点评过的同窗博客和代码

  • 本周结对学习状况
    • 20172303java

    • 结对学习内容
      • 咱们一块儿实现了本周须要实现的一些PP项目而且给互相讲述了其中的基本原理。
      • 给我解释了一些错题中没法理解的问题,第一题就是她为我详细讲解的。

其余

  • 感悟:最近一个月所学习的内容主要就是对链表和数组的一些深刻实践,不管是栈、队列仍是本次的链表,基本的实现方法都是相似的,基础打好了遇到的困难都不是太多。

课本单词

(本部分用于收集本章节后的生词)git

  • Ordered List:有序列表
  • Unordered List:无序列表
  • Indexed List:索引列表
  • natural ordering:天然排序
  • selialization:串行化

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/5000 2/2 8/8 认真学习!积极向上
第二周 812/812 1/3 22/30
第三周 814/1626 1/4 20/50
第四周 1386/3012 2/6 20/70 愉快的国庆节就要结束了...
  • 计划学习时间:20小时数组

  • 实际学习时间:20小时数据结构

  • 改进状况:在国庆假期中愉快的学习Java。学习

参考资料

相关文章
相关标签/搜索