20172328 2018—2019《Java软件结构与数据结构》第二周学习总结
概述 Generalization
本周学习了第三章集合概述——栈和第四章链式结构——栈。主要讨论了集合以及用于实现集合的基本数据结构,以及集合设计的相关问题和目标。本章内容以栈为例展现与集合的设计、实现和使用等有关的问题。html
教材学习内容总结 A summary of textbook
教材学习中的问题和解决过程 Problem and countermeasure
- 1.不明白泛型是什么且如何使用。
- 问题1的解答:
-
假定咱们有这样一个需求:写一个排序方法,可以对整型数组、字符串数组甚至其余任何类型的数组进行排序,该如何实现?算法
-
答案是可使用 Java 泛型。使用 Java泛型的概念,咱们能够写一个泛型方法来对一个对象数组排序。而后,调用该泛型方法来对整型数组、浮点数数组、字符串数组等进行排序。编程
- 定义泛型方法的规则:
- 全部泛型方法声明都有一个类型参数声明部分(由尖括号分隔),该类型参数声明部分在方法返回类型以前(在下面例子中的
)。
- 每个类型参数声明部分包含一个或多个类型参数,参数间用逗号隔开。一个泛型参数,也被称为一个类型变量,是用于指定一个泛型类型名称的标识符。
- 类型参数能被用来声明返回值类型,而且能做为泛型方法获得的实际参数类型的占位符。
- 泛型方法体的声明和其余方法同样。注意类型参数只能表明引用型类型,不能是原始类型(像int,double,char等).
课后习题代码实践遇到的问题和解决 Exercise
- 问题1:理解pp3.2和pp3.8的不一样。刚开始的时候我在作两个题目的时候以为很类似。因此在成功吧pp3.2作出来后就将两个入栈出栈循环复制到了pp3.8中,当时试验的例子是中文“我想你”,出来的是“你想我”,因此就很放心的交了做业。直到上自习的时候听到同窗们讨论,我才意识到pp3.8是元素集的相反,虽然在中文单独的字上体现不出来,可是在英文表述上就颇有问题。
问题1解决:我将pp3.8的charAt方法换成split方法,用空格把语句分开,而后再循环入栈、循环出栈。这样就能够达到“I love Java”变成“Java love I”!可是,个人中文如果不带空格,就会直接被当作一个元素集,而后纹丝不动的抛回给我。因此我就想用条件语句作两段语句,先用if语句看看语句索引第二位置是不是空格,而后决定用哪一种方法。(具体实现代码可去码云查看。)
api
- 问题2:不明白选择排序、冒泡排序、插入排序到底分别指什么?虽然上学期学过了,但印象只有方法的实际实现、却没有对应上相应的名字。因此在作蓝墨云班课上的训练时显得很生疏。
- 问题2解决:
- 冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。而后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(由于可能因为第2个数和第3个数的交换,使得第1个数再也不小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已是最大的),第二趟结束,在倒数第二的位置上获得一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
- 选择排序(Select Sorting):的基本思想是:第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,第二次从R{1}~R[n-1]中选取最小值,与R[1]交换,...., 第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换,.....,第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换,总共经过n-1次,获得一个按排序码从小到大排列的有序序列.
- 插入排序(Insertion Sorting):局部有序,先把第一个数据当作一个有序数组,而后把第二个数据插入到这个“有序数组”中,造成具备两个数据的有序数组,依次类推,直至最后一个数据插入到具备 N-1 个数据的有序数组中,完成排序。插入过程:获取当前数据,并标记当前数据与下标,与以前有序数据的最后一个做比较,若小于最后一个数据则将最后一个数据进行后移操做,而后再与倒数第二个数据进行比较,重复刚才的操做,若不小于则终止操做。
- 三种排序的比较:其时间复杂度都是O(n^2),可是因为细节比较或是循环问题,速度上体现为:插入排序>选择排序>冒泡排序。
- 在了解了这三种排序以后开始作蓝墨云上的做业。要对链表进行排序仍是很考验思惟逻辑的。
- 首先说给链表冒泡排序。冒泡排序的思惟是最简单的,可是代码实现起来也非手到擒来。当时用循环来比较的时候,就一直要把链表的节点向后推,但要用一个中间变量temp来保存前面的数字,而后作数字交换,最后把遍历的起始节点重指向头结点。
其次是给链表选择排序。选择排序须要的变量更加多,由于要遍历n-1次,且每次都要挑出最小的数字来和当前参与比较的第一个数字调换位置。因此要设两个整型变量min和temp和三个结点来指向位置。数组
本周安卓做业pp3.9安全
代码量

上周测试活动错题改正 Correction
- 1.Software that is easily portable, can be moved from one computing environment to another with little or no effort.
A .True
B .Flase
- 改正:当时理解的题目意思是:软件很好移植!!当时以为使用Java语言才能够很好移植。结果今天再看题目,人家的意思是:可移植性好的软件,能够绝不费力或费力不多的从一个计算机上移植到另外一个计算机上。
对不起大哭,英语没学好。
- 2.An efficient system handles problems gracefully
A .True
B .Flase
- 改正:高效的系统处理软件会很优雅。暂时不知道到底该选择什么。暂且认为:效率代表软件实现其目标而无浪费资源,因此很利索?!
- 3.Software systems need only to work to support the work of developers, maintainers, and users.
A .True
B .Flase
- 改正:本题是不全面的说法,软件系统须要尽可能的完美符合全部人的需求。
- 4.Which Growth function has the highest order?
A .O(n log n)
B .O(n^2)
C .O(2^n)
D .O(log n)
- 改正:好的,是它的题目没有弄清楚,我帮它补上去了,2n和2^n是有很大差异的。速率大小排序是:
n^3>2^n>n^2>nlogn>logn>n
- 5.Which of the following has the smallest time complexity?
A .3n+5+2n
B .logn+2
C .3n+4
D .nlogn
- 改正:看错了,人家问的是最慢的。
- 6.If the algorithm is inefficient, a faster processor will help.
A .True
B .Flase
- 改正:有帮助,可是帮助很小,因此关键仍是在于算法的复杂度(运行速率),尤为是在要处理的问题巨大的时候,使用更快的处理器也无济于事。
结对及互评Group Estimate
-20172301
-20172304
点评模板:
- 博客中值得学习的或问题:
- 20172301:教材问题和实践问题很详细,教材内容总结简明扼要,博客风格较上学期有所改变。虽然我知道你最近超级忙,就如同我上学期那样,可是对你学的最好的一门课(大概是你最喜欢的?)仍是多赐予点精力吧!
- 20172304:这学期的博客真的很让我开心,真的和之前有了很大区别。虽然我很早很早以前就知道个人小伙伴很聪明,可是在学习态度上真的是由之前的率性而为变得认真负责,很开心能在Java学习的道路上一同成长,继续加油!
- 第二周结对任务落实的不太到位,不少问题都是咱们三个本身解决本身的,多是有点忙啦(#^.^#)。不过不过我相信,下一周咱们三个必定会继续独立思考、但在问题上共同攻难克险!
其余(感悟、思考等,可选)Else
一个假期没翻书的结果就是让我如今得多翻书
。
不少时候面临问题我老是倒在畏惧脚下,“我不会”、“我不能”、仍是“我不行”,其实都是懦弱两手一摊不做为的我。匆匆从指缝溜走的都是最珍贵的年轻生命。既然十九年又开始新的轮回,那就勇敢一点、再勇敢一点吧!
-
若是一生没有茶不思,饭不想的想要一件东西,自己就是一件很遗憾的事。人生可贵本就是痴迷。 dust yourself off
学习进度条Learning List
目标 |
5000行 |
30篇 |
400小时 |
第一周 |
0/0 |
1/1 |
8/8 |
第二周 |
621/621 |
1/2 |
14/22 |
参考资料Reference