20162303 2017-2018-1 《程序设计与数据结构》第五周学习总结
教材学习内容总结
- 了解集合的概念
- 栈 仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
- 栈的操作
- 用数组实现栈
首先要估计栈的最大容量以免发生溢出,arraystack中提到有关扩容的内容
private void expandCapacity()
{
T[] larger = (T[])(new Object[stack.length*2]);
for (int index=0; index < stack.length; index++)
larger[index] = stack[index];
stack = larger;
}
}
通过这种方法可以动态调节数组的大小。
- 用链实现栈
用用链实现栈需要创建一个有头结点的链表,从第一个节点出发即可定位所有节点。只需要在链表的一端进行操作,第一个元素入栈到链表的第一个位置,第二个元素到链表的第2个位置。
教材学习中的问题和解决过程
- 问题:不太理解哨兵结点的涵义
- 问题解决:在许多算法中,存在“邻居依赖问题”(我自己造的词),在处理当前元素时,要涉及到它旁边那个元素。那如果当前元素是边界元素呢,它没有旁边那个元素,如果不作处理,程序就可能出错;如果对它特别对待,就会增加代码复杂性,还会降低程序效率。应用哨兵,也就是申请若干个多余的元素作为边界元素的邻居,可以完美得解决这个问题。
参考链接
代码调试中的问题和解决过程
- 问题1:arraystack刚开始一直无法成功运行
- 问题1解决方案:在经过网上查找,在补充完所有方法后,arraystack可以正常运行了。
代码托管
结对及互评
点评模板:
- 博客中值得学习的或问题:
- 排版精美
- 总结十分详细
- 解决方案清晰明了
本周结对学习情况
- [20162307](http://www.cnblogs.com/Tiffany23/)
- 结对学习内容
- 一块研究上课所学内容
- 小组博客交流
其他
本周实验完成的不太顺利,书里内容理解出现了一些偏差,不过之后咨询了同学,理解改变了。希望继续努力,继续进步吧
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 70/70 | 1/1 | 12/12 | |
第三周 | 208/278 | 1/2 | 12/24 | |
第五周 | 529/807 | 1/3 | 12/36 |
计划学习时间:12小时
实际学习时间:12小时