20172330 2018-2019-1 《程序设计与数据结构》第八周学习总结

20172330 2018-2019-1 《程序设计与数据结构》第八周学习总结

教材学习内容总结

1、堆

  • 堆就是具备两个附加属性的一棵二叉树
  • 对每一结点,它小于或等于其左孩子和右孩子html

    2、向堆中添加一个元素

    1.将元素添加为新的叶节点,同时保持树是彻底树。
    2.将该元素向根的方向移动,将它与父结点对换,直到其中的元素关系知足要求为止。
    如图所示:



    git

与次优二叉树相对,二叉排序树是一种动态树表。其特色是:树的结构一般不是一次生成的,而是在查找过程当中,当树中不存在关键字等于给定值的结点时再进行插入。新插入的结点必定是一个新添加的叶子结点,而且是查找不成功时查找路径上访问的最后一个结点的左孩子或右孩子结点。算法

  • 1.首先执行查找算法,找出被插结点的父亲结点。
    判断被插结点是其父亲结点的左、右儿子。将被插结点做为叶子结点插入。
    若二叉树为空。则首先单独生成根结点。首先执行查找算法,找出被插结点的父亲结点。
    判断被插结点是其父亲结点的左、右儿子。将被插结点做为叶子结点插入。
    若二叉树为空。则首先单独生成根结点。数据结构

  • 2.执行删除结点算法
    在二叉排序树删去一个结点,分三种状况讨论:
    1.若结点为叶子结点,即左子树和右子树均为空树。因为删去叶子结点不破坏整棵树的结构,则能够直接删除此子结点。
    2.若结点只有左子树或右子树,此时只要令或直接成为其双亲结点的左子树或右子树便可,做此修改也不破坏二叉排序树的特性。
    3.若结点的左子树和右子树均不空。在删去结点以后,为保持其它元素之间的相对位置不变,可按中序遍历保持有序进行调整,能够:
    令结点的直接前驱(或直接后继)替代该结点,而后再从二叉排序树中删去它的直接前驱(或直接后继)即让结点的左子树(若是有的话)成为结点左子树的最左下结点(若是有的话),再让左子树成为结点的左右结点的父结点。学习

4、优先级队列

  • 队列,数据只能在一端进入,另外一端出来,可是它强调了“优先”二字,因此,已经不能算是通常意义上的队列了,它的“优先”意指取队首元素时,有必定的选择性,即根据元素的属性选择某一项值最优的出队。
  • 优先队列是0个或多个元素的集合,每一个元素都有一个优先权或值,对优先队列执行的操做有1:查找;2: 插入一个新元素;3: 删除.在最小优先队列中,查找操做用来搜索优先权最小的元素,删除操做用来删除该元素;对于最大优先队列,查找操做用来搜索优先权最大的元素,删除操做用来删除该元素.优先权队列中的元素能够有相同的优先权,查找与删除操做可根据任意优先权进行.。

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

  • 问题1:堆和二叉排序树的差异在哪?
  • 问题1解决方案:首先咱们须要了解二叉树中元素是如何放置的。咱们定义一个根的元素,而后把新加进来的元素和根比较(以第二个加进来的元素为10,根为20举例)。10<20,因此咱们将10放在根的左结点,因为根的左子树目前只有一个元素因此咱们将10设置为根的左子树的根。若是第三个元素是11,那么咱们首先和根比较,小于20,那么咱们将11往下放,与10比较,比10大,那么咱们放在10的右结点上。(若是添加的元素比20小也比10小那么放在10的左结点)以此类推。右子树也是同样的道理。总的来讲,二叉树的元素放置是以根为基准,比根大的放右子树,比根小的放左子树。若是同样的话左右子树任君挑选。

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

  • 问题1:在编写树的方法时,RemoveFirst方法一直报错
  • 问题1解决方案:在检查后发现是在ListADT时没有写进去致使出现了错误。

代码托管

上周考试错题总结

.net

结对及互评

  • 基于评分标准,我给严域俊的博客打分:7分。得分状况以下:

正确使用Markdown语法(加1分)设计

模板中的要素齐全(加1分)调试

教材学习中的问题和解决过程, (加3分)htm

感想,体会真切的(加1分)blog

点评认真,能指出博客和代码中的问题的(加1分)

  • 博客中值得学习的或问题:
    • 图片和文字相结合,方便理解。
    • 增长了博客中的目录,方便查看,同时样式进行了更新,显得更加美观
    • 阅读了许多资料,使得博客更有说服力。
  • 代码中值得学习的或问题:
    - commit依旧很详细,有条理性。

点评过的同窗博客和代码

  • 本周结对学习状况
    • 20172333
    • 结对学习内容
      教材第11章,运行教材上的代码
      完成课后自测题,并参考答案学习
      完成课后自测题,并参考答案学习
      完成程序设计项目:至少完成PP11.三、PP11.8

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

这一周花了点心思在这一章上面,也好好阅读了不少内容,掌握的还算能够。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/0 1/1 10/10
第二周 700/700 1/2 10/20
第三周 700/1400 1/3 10/30
第四周 500/1900 2/5 10/40
第五周 569/2469 1/6 10/50
第六周 1070/3539 1/7 10/60
第七周 986/4625 1/8 10/70
第八周 1023/5648 2/9 10/80

参考:软件工程软件的估计为何这么难软件工程 估计方法

  • 计划学习时间:10小时

  • 实际学习时间:10小时

参考资料

相关文章
相关标签/搜索