20172318 2017-2018-2 《程序设计与数据结构》第10周学习总结
20172318 2017-2018-2 《程序设计与数据结构》第10周学习总结
教材学习内容总结
- 集合是一种对象,类似于保存其他对象的存储库。
- 集合的同构和异构:同构:集合中保存类型全部相同的对象。异构:集合中可以保存各种类型的对象。
- 一个抽象数据类型(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及原因,理解情况
An infinite loop and an infinite recursion
A . are different because it is impossible to detect the latter, while it's quite easy to detect the former
B . both continue to repeat indefinitely
C . both will be caught by the compiler
D . both will be caught by the Java Virtual Machine during execution
E . none of the above
选B,无限循环和递归都是相似的,它们会不断地重复。两者都不能被编译器捕获或在运行时捕获 - 错题2及原因,理解情况
It always is possible to replace a recursion by an iteration and vice versa.
A . trueB . false
选A,递归和迭代都是重复的形式,它们在计算方面是等价的——每个都可以被另一个取代。 - 错题3及原因,理解情况
The following method correctly adds two ints, returning their sum:
public int add(int a, int b)
{
return (b > 0) ? add(a+1, b-1) : a;
}
A . true
B . false
选B,b<0时运算会失败
点评过的同学博客和代码
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 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 |