20172318 2017-2018-2 《程序设计与数据结构》第11周学习总结
教材学习内容总结
- 集合是一种对象,类似于保存其他对象的存储库。
- 集合的同构和异构:同构:集合中保存类型全部相同的对象。异构:集合中可以保存各种类型的对象。
- 一个抽象数据类型(ADT)是由数据和在该数据上所实施的具体操作构成的集合。一个ADT有名称、
值域和一组允许执行的操作。ADT如何保存数据和执行方法的细节与其概念分离开了。实质上,“集合”和抽象数据类型”是可以互换的等同概念。 - 对象具有定义良好的接口,从而成为一种实现集合的完善机制
- 动态数据结构的大小规模随需要增长和收缩。
- 通过保存和更新对象引用来实现一个链表的管理。
- 其他的动态列表1.双向链表2.头节点
- 线性数据结构
- 队列:队列是一种以先进先出方式管理数据的线性数据结构。
- 堆栈:堆栈是一种以后进先出方式管理数据的线性数据结构。
- 非线性数据结构
- 树:树是一个非线性数据结构,由一个根节点和构成层次结构的多个节点组成。除根节点外的所有节点称为内部节点,没有子节点的节点称为叶节点。
- 图:图是 非线性数据结构,是用常见的边来连接节点。
- Java集合类API中的类定义为泛型,是指一个集合所管理的对象的类型要在实例化该集合的对象时才确定。泛型保证了集合中对象类型的兼容性。
教材学习中的问题和解决过程
- 问题1:头结点的作用
- 问题1解决方案:方便在第1个位置进行插入、删除操作时同其他位置一样。加了头结点之后,插入、删除都是在后继指针next上进行操作,不用动头指针;若不加头指针的话,在第1个位置插入或者删除第1个元素时,需要动的是头指针。例如:在进行删除操作时,L为头指针,p指针指向被删结点,q指针指向被删结点的前驱,对于非空的单链表:
1.带头结点时
删除第1个结点(q指向的是头结点):q->next=p->next; free(p);
删除第i个结点(i不等于1):q->next=p->next;free(p);
2.不带头结点时
删除第1个结点时(q为空):L=p->next; free(p);
删除第i个结点(i不等于1):q->next=p->next;free(p);
结论:带头结点时,不论删除哪个位置上的结点,用到的代码都一样;不带头结点时,删除第1个元素和删除其它位置上的元素用到的代码不同,相对比较麻烦。 - 问题2:API是什么?
- 问题2解决方案:百科上说:API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件的以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。
好吧看了还是不怎么明白,于是上知乎找了个通俗易懂的答案
就像我们已经知道ArrayList的使用却不清楚它的源码一样
代码调试中的问题和解决过程
- 问题1:pp13.3如何对链表进行排序?
- 问题1解决方案:这时想起了之前学过的selectionSort类,而之前的类是需要compareble的列表,于是我改成了
public void selectionSort(int[] list) {
for (int index = 1; index < list.length; index++) {
int key = list[index];
int position = index;
while (position > 0 && key<(list[position - 1])) {
list[position] = list[position - 1];
position--;
}
list[position] = key;
}
}
然后再把链表放进int数组,代入方法进行排序
代码托管
上周考试错题总结
- 错题1及原因,理解情况
Which of the following is considered an Abstract Data Type?
A .array
B .reference variable
C .any of the primitive types (e.g., int, double, char)
D .vector
E .all of the above
选D,只有矢量包含一个数据结构和操作和访问数据结构的方法 - 错题2及原因,理解情况
Abstract Data Types have which of the following object-oriented features?
A .information hiding
B .inheritance
C .polymorphism
D .message passing
E .all of the above
选A,所有的ADT都使用信息隐藏,这样数据结构就不能直接从ADT外部操纵,但是其他面向对象的特性是不需要的。 - 错题3及原因,理解情况
One operation that we might want to implement on a Stack and a Queue is full, which determines if the data structure has room for another item to be added. This operation would be useful
A .only if the Queue or Stack is implemented using an array
B .only if the Queue or Stack is implemented using a linked list
C .only for a Queue
D .only for a Stack
E .none of the above, a full operation is not useful at all
选A,由于阵列是一个静态大小的物体,如果它被填满,那么任何添加类型的操作,无论是列表插入、队列enqueue还是堆栈推送,都应该被阻止。这可以通过首先检查结构是否完整来确定。如果数据结构是使用链表来实现的,这是不必要的,因为(我们假设)总是会有动态内存来添加新元素。 - 错题4及原因,理解情况
In a linked list in Java
A .the link is an object
B .the link is a node
C .the link is a reference
D .the link is an int
E .the link is a class
选C,链接是一个参考 错题5及原因,理解情况
A linear data structure
A .always has more than one link per node
B .is sometimes represented as a tree or a graph
C .can have but a single link per node
D .almost always is kept in sorted order either ascending or descending
E .none of the above- 错题6及原因,理解情况
- 错题7及原因,理解情况
错题8及原因,理解情况
点评过的同学博客和代码
- 本周结对学习情况
- 20172312
- 结对学习内容
- 课本第十三章
- 上周博客互评情况
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 128/128 | 1/1 | 12/12 | |
第二周 | 212/340 | 1/2 | 18/30 | |
第三周 | 206/546 | 1/3 | 20/50 | |
第四周 | 483/1029 | 2/5 | 40/90 | |
第五周 | 633/1662 | 1/6 | 30/120 | |
第六周 | 560/2222 | 1/7 | 20/140 | |
第七周 | 511/2733 | 1/8 | 20/160 | |
第八周 | 817/3550 | 3/11 | 25/185 | |
第九周 | 1319/4869 | 2/11 | 20/205 | |
第十周 | 488/5357 | 1/11 | 20/225 | |
第十一周 | 0/5357 | 2/13 | 30/255 |