20172304 《程序设计与数据结构》第四周学习总结
20172304 《程序设计与数据结构》第四周学习总结
教材学习内容总结
第六章主要介绍了列表,这个列表是一种概念上的笼统的定义。
列表包括链表和数组。
列表分为:有序列表,无序列表,索引列表。
有序列表 | 其元素按照元素的某种内在特性进行排序。 |
---|---|
无序列表 | 其元素件不具有内在顺序,元素按照他们在列表中的位置进行排序 |
索引列表 | 其元素可以用数字索引来引用 |
有序列表和无序列表在插入式有区别,有序列表需要做到插入之后还是有序的。而无序列表不是这样的。而索引列表虽然可以通过索引进行插入,删除操作,但是还是要保持连续。要做到索引之间是连续的。
java集合API中的列表
方法 | 描述 |
---|---|
add(E element) | 往列表的末端添加一个元素 |
add(int index,E element) | 在指定索引出插入一个元素 |
get(int index) | 返回指定索引处的元素 |
remove(int index) | 删除指定索引处的元素 |
remove(E object) | 删除指定对象的第一个出现 |
set(int index,E element) | 替代指定索引处的元素 |
size() | 返回列表中的元素数量 |
使用无序列表:学习计划
其中的Course类定义了一些课程的信息例如系名,成绩等等。然后其中的ProgramOfStudy则是对Course类进行管理,做一些链表的基本操作。除此之外还添加了替换,查找等一些维护课程的必要操作。
索引列表应用实例:Josephus问题
这个就是隔几取一的问题。通过链表实现
列表ADT、
公共操作
操作 | 描述 |
---|---|
removeFirst | 从列表中删除第一个元素 |
removeLast | 从列表中删除最后一个元素 |
remove | 从列表中删除某个元素 |
first | 查看位于列表前端的元素 |
last | 查看位于列表末端的元素 |
contains | 确定列表是否含有某个元素 |
isEmpty | 确定列表是否为空 |
size | 确定列表中的元素数量 |
有序列表
操作 | 描述 |
---|---|
add | 往列表中添加一个元素 |
无序列表
操作 | 描述 |
---|---|
addToFront | 把元素添加到列表的前端 |
addToRear | 把元素添加到列表的末端 |
addAfter | 把元素添加到列表中某个一直元素的后面 |
使用数组实现列表
使用链表实现列表
教材学习中的问题和解决过程
- 问题1:串行化的问题
- 问题1解决方案:书上提了一嘴有关串行化的概念,但是并没有深入的讲解,后来通过查阅资料得知,串行化可以将数据转换为字节流,也就是计算机最基本的数据结构——二进制,这使得串行化后的数据可以储存在任何储存空间。但是串行化只能应用在非静态方法和变量。而且必须实现Serializable接口。
代码调试中的问题和解决过程
由于这次进行的内容之前已经进行过很多次了(即链表和数组的),所以遇见的问题很少。
-
问题1:在进行测试时发现无法引用变量。还有toString方法没有办法正常调用
-
问题1解决方案:后来发现是没有加运行函数。还有在toString的函数里没有将那个环形数组中开头的索引值随循环做自减运算。
代码托管
代码截图
错题总结
第三周&第四周错题
错题一:
错题一解答:
栈的pop操作返回的显然是一个元素而不是一个节点,这是当时马虎。
错题二:
错题二解答:后来在编码过程中实践了是正确的。
错题三:
错题三解答:后面已经说了不是引用的类型,但是我还是错选了C,应该选A对象的类型。
错题四:
错题四解答:集合中储存的对象只包含对象本身,并不会有其具体实现的细节。
错题五:
错题五解析:这是很明显得是,在单向列表中,其中常的打印方式必然是从头部开始的,对应实现的栈的出入栈操作也是在链表的头部,也就是前部实现的。
第五周
错题一:
错题一解析:这道题我记得一开始我也想选A来着,知识不知道后来莫名其妙的选择了B。
博客互评
点评过的同学博客和代码
其他(感悟、思考等,可选)
本周主要学习了列表,在我的认知中,列表就是包括链表和数组。经过了这么长时间的打磨历练,好像数组与链表的知识都已经掌握了,听老师说后面的束河图就要利用链表和数组方面的知识,不知道还要经过多少次考验。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 30/30 | 1/1 | 10/10 | |
第二周 | 766/796 | 1/2 | 40/50 | |
第三周 | 817/1613 | 1/3 | 20/70 | |
第四周 | 1370/3983 | 2/5 | 30/100 |
参考资料
1.蓝墨云班课
2.java软件结构与数据结构
3.Java串行化问题