《数据结构与面向对象程序设计》第9周学习总结

学号20182329 2019-2020-1 《数据结构与面向对象程序设计》第9周学习总结

教材学习内容总结

  • 编写一个二叉树。
  • 创建NODE的ATD结构,以及Link的ATD结构以适应树的建立。
  • 学会使用树的先序遍历、中序遍历、后序遍历,来查找、后者是建立树。
  • 学习决策树的的定义和实现方法,可以参照完全二叉树的建立。
  • 用链定义一串字符,学会链的构成和查找
  • 学习顺序查找、二分法查找、差值查找,被学会在链或者数组的情况下实现。
  • 学习斐波那契数列的查找方法,也是二分查找的一种提升算法,通过运用黄金比例的概念在数列中选择查找点进行查找,提高查找效率。
  • 学习二叉树的排序方法,并运用二叉树查找。
  • 编写二叉树以收纳一组数据,可以运用中序遍历、前序遍历、后序遍历来进行查找。
  • 简单学习二叉树方面的红黑数。
  • 学习分块查找、哈希查找在链表上的实现方法。
  • 学习堆的定义和结构,并完成堆的实现,学会在堆立面进行查找、添加删除等操作

教材学习中的问题和解决过程啊

  • 问题1:在学习归并查找的过程中,发现在分解和归并的每一步中度需要进行一轮比较,也就是说,在一个循环中套两个循环,但是这样的运算算法就会非常复杂,而且只是设置分解在循环中可以,但是很难把合成也放在其中。

  • 问题1解决方法:算法本身复杂是没有解决的方法,两个循环无法并行时,可以将归并部分的代码重新设置一个方法,需要的时候调用就可以了。

  • 问题2::一开始我使用的是在类里面编写循环代码,来进行查找用while语句实现并判断,但是后来我发现自己的循环会一直走到链的最后一位,然后再弹出,根本不是我需要的查找数字。

  • 问题2解决方案:后来发现我的条件语句有很多问题,一一改正后,自己有重写了一个递归调用的方法,比之前的循环方法减少了很多代码量。

  • 问题3:我在编写书上SortPlayerList代码时,发现我设置一个inset(void)方法时,最后执行时结果并没有改变,date值并没有改变。

  • 问题3解决方法:缺少一个方法。


代码调试中的问题和解决过程

  • 问题1:在Android 上实现实验5时,发现自己不能再layout中编写的布局中调用方法Chain6_4
  • 问题1解决方法:我在编写Second的时候缺少与之对应的布局。
  • 问题2:在编写查找的sort方法时,我已经编写好了Searching的主要类,但是在sort的返回值上一直是报错状态。
  • 问题2解决方法:在编写时sort方法中,result的值一开始是String类,后来使用循环应为int类

代码托管

作业连接
https://gitee.com/besti1823/20182329lyz.git
https://gitee.com/besti1823/20182329lyz.git

(statistics.sh脚本的运行结果截图)

上周考试错题总结

错题

  • A stack is a ___________________ data structure.

A
.
LIFO

B
.
FIFO

C
.
link based

D
.
array based

E
.
none of the above

解析:堆栈是后进先出的数据结构。这意味着放在堆栈上的最后一个元素将是被删除的第一个元素。

  • A queue is a ____________________ data structure.

A
.
LIFO

B
.
FIFO

C
.
link based

D
.
array based

E
.
none of the above

解析:队列是FIFO(先进先出)数据结构,这意味着放入队列的第一个元素是从队列中删除的第一个元素。

  • What exception is thrown if the pop method is called on an empty stack?

A
.
EmptyStackException

B
.
NoSuchElementException

C
.
ArrayOutOfBoundsException

D
.
EmptyCollectionException

E
.
none of the above

解析:如果在空堆栈上调用pop方法,则抛出EmptyCollectionException。

  • Which of the following methods removes an element from a queue?

A
.
enqueue

B
.
dequeue

C
.
first

D
.
pop

E
.
push

解析:这是我的失误,不知道咋的就选了A。dequeue方法从队列中删除一个元素。

  • When one type of object contains a link to another object of the same type, the object is sometimes called __________ .

A
.
circular

B
.
recursive

C
.
self-referential

D
.
a stack

E
.
a queue

解析:自引用对象是指引用同一类型的另一个对象。

  • A queue is the ideal collection to use when ____________________ .

A
.
implementing a line in a simulation

B
.
evaluating a postfix expression

C
.
evaluating an infix expression

D
.
implementing a quick sort

E
.
none of the above

解析:队列是在模拟(例如先到先得的情况)中实现行的理想对象。

  • In a array-based implementation of a queue that stores the front of the queue at index 0 in the array, the dequeue operation is ___________________.

A
.
impossible to implement

B
.
has several special cases

C
.
O(n)

D
.
O(n2)

E
.
none of the above

解析:在应用了删除操作之后,需要线性时间将队列的所有元素向下移动一个索引。

  • A postfix expression can be easily evaluated using a queue.

A
.
true

B
.
false

解析:可以使用堆栈轻松地表示后缀表达式。


结对及互评


评分标准

点评模板:

  • 博客中值得学习的或问题:

    • 本博客体现许多java连接的问题,发现了一些排序和查找的优点。
    • 但是博客在课本自学方面存在一点问题,并没有将所有知识点列出,只是课本编程实列的学习问题的解决。
    • 这篇博客的代码问题并没有将各种排序的方法事列出来,也没有将查找的算法列出来。
  • 代码中值得学习的或问题:

    • 本博客在提出代码编写错吴时,虽然解析比较完整,没有展示出比较全面的图片。
    • 本博客存在设置类(抽象类)时的错误,希望改正。
  • 基于评分标准,我给本博客打分:10分。得分情况如下:

  • 正确排版要素齐全(+1)

  • 使用makedown格式(+1)

  • 教材问题(+3)

  • 代码调试问题(+3)

  • 错题深入(+1)

  • 点评认真(+1)

  • 参考示例


点评过的同学博客和代码

  • 本周结对学习情况
    • 学号20182324
    • 结对照片
    • 结对学习内容
      • 创建NODE的ATD结构,以及Link的ATD结构以适应树的建立。
  • 学会使用树的先序遍历、中序遍历、后序遍历,来查找、后者是建立树。
  • 学习决策树的的定义和实现方法,可以参照完全二叉树的建立。
  • 用链定义一串字符,学会链的构成和查找
  • 学习顺序查找、二分法查找、差值查找,被学会在链或者数组的情况下实现。
  • 学习斐波那契数列的查找方法,也是二分查找的一种提升算法,通过运用黄金比例的概念在数列中选择查找点进行查找,提高查找效率。
  • 学习二叉树的排序方法,并运用二叉树查找。
  • 编写二叉树以收纳一组数据,可以运用中序遍历、前序遍历、后序遍历来进行查找。
  • 简单学习二叉树方面的红黑数。
  • 学习分块查找、哈希查找在链表上的实现方法。

其他(感悟、思考等,可选)

建立树的时候,一定要规定好他的结构,说书是一个非线性结构,其元素组织是层次结构,在进行遍历的时候,一定得注意数的左右子树的关系,以及数的构建方法。在学习斐波那契查找时,相对于折半查找,一般将待比较的key值与第mid=(low+high)/2位置的元素比较,比较结果分三种情况:
  (1)相等,mid位置的元素即为所求
  (2)>,low=mid+1;
(3)<,high=mid-1。
斐波那契查找与折半查找很相似,他是根据斐波那契序列的特点对有序表进行分割的。他要求开始表中记录的个数为某个斐波那契数小1,及n=F(k)-1;

参考资料
Java程序设计
Android程序设计

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 6000行 30篇 400小时
第一周 107/107 2/2 15/15
第二周 454/526 2/4 32/47
第三周 988/1514 2/6 31/78
第五周 757/2271 2/8 31/109
第六周 875/3146 1/9 31/140
第七周 1282/4428 2/11 58/198
第八周 1972/6400 2/13 36/234
第九周 3799/10199 3/13 55/289
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
  • 计划学习时间:60小时

  • 实际学习时间:58小时

  • 改进情况:树好难啊。

参考资料

posted @ 2019-11-17 14:26  李一卓  阅读(295)  评论(0编辑  收藏  举报