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

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

教材学习内容总结

第六章 列表

  • 列表可使用链表或数组来实现
  • 队和栈的元素只能在末端添加和删除,而列表集合更通常化,能够在列表的中间和末端添加和删除元素
  • 列表能够分为有序列表、无序列表和索引列表
  • 有序列表往列表添加新元素,就要查找新元素相对于全部已有元素的正确排序
  • 无序列表中的元素按使用者所选择的任意方式排序
  • 索引列表为它的元素维护一段连续的数字索引值
  • 索引列表和数组的根本区别在于:索引列表的索引值老是连续的
  • 为了使某个对象能使用串行化进行存储,其类必须实现Serializable,在Serializable接口中并无任何方法,它只是代表该对象能够转换为串行化表示形式
  • 索引列表特有的操做,能够利用其索引来很好地使用引用元素
  • 只有Comparable对象才能存储在有序列表中
  • 无序列表的aadAfter方法必须首先找到目标元素,把更高索引处的元素平移以腾出空间,而后把新元素插入到目标元素的后面
  • 列表之间的区别在于如何添加元素
  • 接口能够用来派生其余接口,子接口包含父接口的全部抽象方法
  • 接口名能够用来声明一个对象引用变量,一个接口引用能够用来引用实现了该接口的任意类的任意对象
  • 接口容许咱们建立多态引用,其中被调用的方法是基于被引用时的特定对象的

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

  • 问题:为何用数组实现列表时没有用环形数组,与用数组实现队列时有何区别?html

  • 问题解决方案:经过研读课本得知。首先对于非环形数组数组实现队列假定队列的首元素老是存储在数组的索引0处,因为队列处理会影响该集合的两端,所以在删除元素时,该策略要求移动元素,使得dequeue操做的复杂度为O(n),数组实现的操做选使得效率低,而把数组看作环形的,能够去除在队列的数组实现中把元素位移的须要。而对于使用数组实现列表,通常的列表也能够从两端添加和删除元素,可是它们还有从列表中间插入或删除元素,所以没法避免要移动元素,也可使用环形数组方法,可是当从列表中间插入或者删除元素,仍然须要移动元素,于是使用环形数组就显得没有必要了git

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

  • 问题1:用数组实现的有序列表类在测试时出现以下错误:

    报错代码以下:
    数组

  • 问题1解决方案:刚开始我觉得是个人数组实现的有序列表里的add方法有问题,通过单步调试发现是由于我既加入了int型对象,又加入了String型对象,而该add方法可以进行排序的前提是全部的添加对象都是可比较的同一类型的对象,改正事后的测试类及运行结果截图以下:
    数据结构

  • 问题2:pp6.17运行测试类时发现contain方法含有空指针异常,运行结果以下:

    错误contain方法以下:
    学习

  • 问题2解决方案:通过单步调试发现是逻辑上的错误形成的,在判断是否含有时应该首先判断是否为空,初步修改后仍有空指针错误,报错代码以下:

    再经单步调试发现一样是逻辑错误,在获得元素前首先应该判断是否为空,最终修改后正确的contain方法以下:
    测试

代码托管

上周考试错题总结

  • 错题1:
    .net

  • 理解:定义良好的接口掩盖了集合的实现设计

  • 错题2:
    3d

  • 理解:继承的变量和方法能够在派生类中使用,就好像它们是在本地声明的同样。指针

  • 错题3:

  • 理解:公共功能应该在合理的类层次结构中尽量高而不是尽量低,以最小化维护工做

  • 错题4:

  • 理解:实现基于数组的堆栈的最有效方法是将堆栈的底部而不是保持在数组的0位置

  • 错题5:

  • 理解:对象引用变量可用于建立链式结构

  • 错题6:

  • 理解:堆栈的连接实现从链表的front进行

结对及互评

  • 本周结对学习状况
    对课本上的诸多疑问点进行了讨论,同时对代码实现过程当中遇到的一些问题也经过讨论得以解决,继续一块儿努力吧!

感想

遇到细节问题时不要毛躁,要冷静分析,慢慢寻找错误,有助于问题的解决!!!!

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/0 1/1 4/4
第二周 464/464 1/2 10/14 理解掌握了用数组和链表实现栈的方法
第三周 494/958 1/3 10/24 理解掌握了用数组和链表实现队列的方法
第四周 1629/2587 2/5 20/44 对用链表和数组实现列表进行了学习
  • 计划学习时间:15小时

  • 实际学习时间:20小时

  • 改进状况:继续强化代码编写能力!!

参考资料

相关文章
相关标签/搜索