20172322 《程序设计与数据结构》第二周学习总结
教材学习内容总结
本周学习内容较多,主要讲了两个方面:
- 利用数组的知识实现栈
- 利用链式结构的知识实现栈
虽然都是用于实现栈,但本次的学期又跟以前不太一样的,在上学期中我们是利用JavaAPI中自带的栈类stack
来解决自己的各类问题,但本次我们我们需要自己来编写如何栈类,深入内部,了解更多。
我们先写出了一个接口StackADT
后面的两个实现方法都实现了这个接口。
- 利用数组的知识实现栈:写出
ArrayStack
首先实现接口StackADT
分别重写push
、pop
、peek
、isEmpty
、size
方法。 - 利用链式结构的知识实现栈:写出
LindedStack
首先实现接口StackADT
分别重写push
、pop
、peek
、isEmpty
、size
方法。
两个实现方法差别非常小,不过利用链式结构有一个特别大的优势就是在push
操作时不需要像数组一般遍历所有的元素。
其他的一些内容包括但不限于:
- Javadoc,它除了可以用于备注外还可以创建关于类集的HTML文档,根据王老师透露,JavaJDK就是使用Javadoc实现的。
- 异常:这个东西非常常见,但是这个东西的构造我们却不太清晰。我将在下一部分提到异常。
- 是否为线性集合:链式结构是线性集合,而数组不是,并且非线性集合也许就没有任何组织形式
- 数组的大小是固定的,并且每次扩充需要新建一个更大的数组来存放之前的元素,但是链表却不同,它没有限制。
- 通过设置哨兵节点和哑节点可以解决处理第一个节点出现的问题。
教材学习中的问题和解决过程
-
问题1:双向链表还不太明白。
-
问题1解决方案:在网上查到了相关的知识Java中双向链表详解及实例之后了解实现方法和其重要的知识:双向链表是一种对称结构,它克服了单链表上指针单向性的缺点,其中每一个节点即可向前引用,也可向后引用,这样可以更方便的插入、删除数据元素。
由于双向链表需要同时维护两个方向的指针,因此添加节点、删除节点时指针维护成本更大;但双向链表具有两个方向的指针,因此可以向两个方向搜索节点,因此双向链表在搜索节点、删除指定索引处节点时具有较好的性能。
-
问题2:异常究竟是什么,它如何产生,在何种情况下出现,它的构架是什么?
-
问题2解决方案:Java异常简介及其架构:Java异常是Java提供的一种识别及响应错误的一致性机制。
Java异常机制可以使程序中异常处理代码和正常业务代码分离,保证程序代码更加优雅,并提高程序健壮性。在有效使用异常的情况下,异常能清晰的回答what, where, why这3个问题:异常类型回答了“什么”被抛出,异常堆栈跟踪回答了“在哪“抛出,异常信息回答了“为什么“会抛出。 -
问题3:哨兵节点和哑节点如何使用?
代码调试中的问题和解决过程
- 问题1:在对照
ArrayStack
写LindedStack
时以为只需要将top稍微改一改就好,结果发现有问题。 - 问题1解决办法:向王文彬同学学习了相关的知识,修改了
LindedStack
,感谢他的帮助
代码托管
上周考试错题总结
-
错题1及原因:眼瞎
-
理解情况:下次记得好好看题
-
错题2及原因:计算错误
-
理解情况:别因为这些小问题错题啊,不应该啊。
-
错题3及原因:难道2n比n的平方阶次还高吗...
-
理解情况:不太懂
-
错题4及原因:单词理解错误
-
理解情况:并不是eliminating而是忽略
忽略
ignore -
错题5及原因:我记得我选的是True啊...
结对及互评
- 博客中值得学习的或问题:
- 范雯琪同学的博客课本上的学习内容总结部分写得十分详细,值得学习。
- 错题部分虽然比较明了,但是使用非图片方法我觉得会浪费一些时间,直接以图片形式放上去或许可以有更多时间放在问题的理解上。
- 代码中值得学习的或问题:
- commit提交的解释清晰明了,我觉得我应该学习。
- 有许多代码的问题都是我向她询问,我很感谢她
点评过的同学博客和代码
- 本周结对学习情况
-
结对学习内容
- 我一开始对栈的实现有一些疑问,经过了她的耐心讲解后我豁然贯通。
其他
- 感悟:学习是一个长久的过程,需要努力努力再努力。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/5000 | 2/2 | 8/8 | 认真学习!积极向上 |
第二周 | 812/812 | 1/3 | 22/30 |
-
计划学习时间:20小时
-
实际学习时间:22小时
-
改进情况:根据学姐要求改进博客