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

Posted lijinquan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20182335 2019-2020-1 《数据结构与面向对象程序设计》第九周学习总结相关的知识,希望对你有一定的参考价值。

教材学习内容总结

二叉查找树:二叉查找树是一个二叉树,对于每个结点n,n的左子树包含的元素都小于n中的元素,n的右子树中包含的元素都大于等于n中的元素。

在二叉树中,新元素添加为树的叶节点。从根开始,沿着每个结点中的元素所确定的路径,直到相应的方向上没有子节点为止。

删除元素:

1、如果被删除结点是叶结点(无子结点),可以简单地删除。

2、如果被删结点有一个子结点,则用它的子结点替代它。

3、如果被删除结点有两个子结点,在树的更低层找到一个合适的结点替代它。被删除结点的子结点成为替代结点的子结点。

树的遍历:

(1)先序遍历:先访问根,再访问左右子树。

(2)中序便利:先遍历左子树,再访问根节点,再访问右子树。

(3)后序遍历:先便利左子树,再遍历右子树,最后遍历根节点。
技术图片

树的实现

1.使用数组表示树:存储在数组中位置为 n 的元素,元素的左子结点存储在(2n + 1)的位置,右子结点存储在(2 x(n+1))的位置。

2.链式结点:使用一个单独的类来定义树结点。

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

问题1:递归和迭代的区别在哪里?

问题1解决方案:

概念不同:

程序调用自身的编程技巧称为递归,其实就是函数自己调用自己。迭代是指利用变量的原值推算出变量的一个新值,如果递归是自己调用自己的话,迭代就是A不停的调用B。

使用的方法不同:

迭代使用的是循环(for,while,do-while)或者迭代器,当循环条件不满足时退出。而递归一般是函数递归,可以是自身调用自身,也可以是非直接调用,即方法A调用方法B,而方法B反过来调用方法A,递归退出的条件为if-else语句,当条件符合基的时候退出。

对比:

递归的代码比较简单易懂,实现一个计算逻辑往往只需要很短的代码就能解决。但是由于它要不停地调用函数,就可能浪费大量的空间。递归中函数调用的局部状态是用栈来记录的,所以如果递归太深的话还有可能导致堆栈溢出。而对于迭代而言,能使用递归实现的都可以使用迭代来实现,并且效率会很高,在空间消耗上也很小,唯一的缺点就是代码比较难懂。

问题2:对于红黑树存在的意义问题,为什么要单独设置一个红黑树呢?红黑树可以解决的问题AVL树也同样可以解决?

问题2解决方案:

最主要就是效率问题,红黑树并不追求“完全平衡”——它只要求部分地达到平衡要求,降低了对旋转的要求,从而提高了性能。
当然这也不是没有代价的,红黑树是牺牲了严格的高度平衡的优越条件为代价让红黑树能够以O(log2 n)的时间复杂度进行搜索、插入、删除操作。

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

问题1:教材中的代码在调试的过程中遇到了问题,其中的addElement和removeMin方法有问题。而且继承的LinkedMaxHeap中也有问题。
技术图片

问题1解决方案:
addElement继承的是父类中的方法,在LinkedMaxHeap中,存在有add方法而没有addElement方法,将其改为add方法即可。
而removeMin方法,根据removeNext方法的注释

Removes the next highest priority element from this queue and returns a reference to it.

我们可知它应该是需要得到一个最大的元素,所以这里应该使用removeMax方法,而这个方法也存在于父类中,这个问题得到解决.

PriorityQueueNode类实现了Comparable接口,用到了泛型,把比较的类型设为PriorityQueueNode类型时,漏了一个,加上后问题就得到了解决。

修改后:
技术图片

代码托管(https://gitee.com/li_jinquan/ljq/tree/master/

技术图片

上周考试错题总结

1.In a circular array-based implementation of a queue, the elements must all be shifted when the dequeue operation is called.

A .true B .false

正确答案: B

你的答案: A

解析:基于循环数组的队列实现无需移动元素。

2.In removing an element from a binary search tree, another node must be ___________ to replace the node being removed.
A .duplicated

B .demoted

C .promoted

D .None of the above

正确答案: C

我的答案: B
解析:当在二叉查找树上删除一个结点时,后面的结点需要向上移动来补全。当时,以为越靠近根结点说明深度越低,所以是降级了;

点评过的同学博客和代码

本周结对学习情况
20182311

感悟

本周事情比较多,学习时间不足,需要及时调整,花更多时间和精力去调整。下周开始要刻意训练自己的动手能力,多敲代码多看书。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
第二周 300/500 2/4 18/38
第三周 500/1000 3/7 22/60
第四周 325/500 2/4 18/38
第五周 600/1000 3/7 22/60
第六周 300/500 2/4 28/40
第七周 300/500 2/4 18/40
第八周 300/500 2/4 18/36
第9周 330/500 2/4 30/60

参考资料

《Java程序设计与数据结构教程(第二版)》

《Java程序设计与数据结构教程(第二版)》学习指导

以上是关于20182335 2019-2020-1 《数据结构与面向对象程序设计》第九周学习总结的主要内容,如果未能解决你的问题,请参考以下文章

学号20182335 2019-2020-1 《数据结构与面向对象程序设计》实验四报告

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

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

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

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

20182323 2019-2020-1 《数据结构与面向对象程序设计》实验七报告