20172319 2018.10.19-10.26
《程序设计与数据结构》第6周学习总结
目录
教材学习内容总结
第十章 树
10.1 概述:
- 树(tree) 是一种非线性 结构,其元素被组织成了一个层次 结构。
- 树 由一个包含结点 (node) 和边(edge) 的集构成,其中的元素被存储在这些结点中,边则将一个结点和另一个结点连接起来。
- 每一结点都位于该树层次结构中的某一特定层上。
- 树的根(root) :即位于该树顶层 的唯一结点,一棵树只有一个根结点。
- 位于树中较低层的结点是上一层结点的孩子(children) , 同一双亲的两个结点称为兄弟(sibling) 。
- 没有任何孩子的结点称为叶子(leaf) , 一个至少有一个孩子的非根结点 称为一个内部结点(internal node) 。
- 若某一结点A从根 开始的路径中位于另一结点B之上,则称A 为B的祖先(ancestor) , 根是树中所有结点的最终祖先。
- 沿着起始自某一特定结点的路径可以到达的结点是该结点的子孙(descendant) 。
- 结点的层 :从根结点 到该结点的路径长度。通过计算从根到该结点所必须越过的边数目,就可以确定其路径长度(path length) 。
- 树的高度(height) :指从根到叶子之间最远路径的长度。
- 10.1.1 树的分类:
分类方式有很多种。最重要 的一条标准是树中任一结点可以具有的最大孩子数目。这一值有时候也称为该树的度 (order) 。
10.2 实现树的策略
- 10.2.1 树的数组实现之计算策略:
- 10.2.2 树的数组实现之模拟链接策略:
10.2.3 树的分析:
10.3 树的遍历
- 10.3.1 前序遍历:
- 10.3.2 中序遍历:
- 10.3.3 后序遍历:
10.3.4 层序遍历:
10.4 二叉树
10.7 用链表实现二叉树
- 10.4.1 find方法:
10.4.2 iteratorInOrder方法:
教材学习中的问题和解决过程
- 问题1:在二分查找中,若查找的项目组里元素个数是偶数个,中间项如何确定?
- 解决:
- 解释1:对于查找条件为等式的情况,mid指针可以指向中间偏左,也可以指向中间偏右,对于查找条件为不等式时,要根据具体情况选择,查找大于某数的第一个数值时选择指向中间偏左,查找小于某数的第一个数值时选择之下是那个中间偏右。
- 解释2:二分查找一般都是左除右加1,意思是如果现在你的查找区间是(k,m),那么中间点 mid = (k + m) / 2;如果你查找的节点在左边就查找 (k, mid),在右边就查找(mid+1,m)。
- 解释3:一般来说向下取整,比如8个数:1,2,3,4,5,6,7,8,mid=(1+8)/2=4 。
代码调试中的问题和解决过程
问题1:PP9.2的题意吃得不是很透彻。
- 解决:
- 间隔排序法是冒泡排序法的一种变异,则其大体上的代码结构不会发生变化
仿照冒泡排序法,我的初始代码是这样的,这里间隔为2:
- 运行结果如下:
- 可以看到,经过遍历比较后,相应间隔的元素都发生了对应的置换,而彼此相邻的元素却没有经过比较,因此导致排序并不完整;
- 而要想相邻的元素也参与到比较之中,那之后的遍历所取的间隔就要相应地发生一定的变化;
- 作出相应更改之后的代码:
- 相应的运行结果:
代码托管
上周考试错题总结
错题1:无任何错题。
解决:
错题2:
解决:
错题3:
解决:
结对及互评
点评过的同学博客和代码
- 本周结对学习情况:
- 20172316赵乾宸
- 博客中值得学习的或存在问题:
- 20172329王文彬
- 博客中值得学习的或存在问题:
- 博客内容充实、排版整齐、对教材内容有经过一番认真思考、继续保持。
- 代码截图做标注时应尽量避免遮挡代码。
- Markdown的部分缩进有误。
- 教材问题2提出得很好,可以看出近断时间来反复使用链表、数组去实现同一类型的数据结构起得了一定的成效。
- 20172316赵乾宸
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | |
---|---|---|---|
目标 | 3000行 | 15篇 | 300小时 |
第一周 | 0/0 | 1/1 | 12/12 |
第二周 | 935/935 | 1/2 | 24/36 |
第三周 | 849/1784 | 1/3 | 34/70 |
第四周 | 3600/5384 | 1/5 | 50/120 |
第五周 | 2254/7638 | 1/7 | 50/170 |