20182312第七周学习总结

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

教材学习内容总结

课本第12章 算法分析
(1)学习了算法效率分析以及时间复杂度中的大O记法
(2)学习了增长函数的比较,用于分析算法运行效率,增长函数表示问题大小与希望优化的值之间的关系,该函数表示算法的时间或空间利用率。这个比较是必要的,因为如果算法的运行效率低,使用更快的处理器也无济于事。
(3)循环,嵌套循环及方法调用的复杂度分析:首先要确定该循环体的阶次n,然后用该循环要运行的次数乘以它。
课本第14章 栈
(1)集合:一种聚集、组织了其他对象的对象,是一种隐藏了实现细节的抽象。
(2)栈:一个后进先出,先进后出的集合,其中常用方法为push(入栈)pop(出栈)peek(显示栈顶元素)isEmpty(判断是否为空)size(确定栈的元素数目)等并且,栈可以通过很多方法实现,如数组,链表(栈的链表实现是从链表的一端添加和删除元素)。
课本第15章 队列
(1)队列的元素是按FIFO方式处理的:第一个进入的元素,也就是第一个退出的元素,队列也可以通过数组和链表实现。同时有这几个操作:enqueue入队dequeue出队first显示队首isEmpty是否为空size元素个数

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

  • 问题1:数组实现的队列和栈,当新元素加入到一个满的数据结构中时应该做些什么,因为毕竟数组是一个固定大小的数据结构。
  • 问题1解决方案:
  • (1)实现往集合添加一个元素的操作,如果集合为满,抛出一个异常。
  • (2)实现add操作,该操作返回一个可由用户检查的状态标识符,一边查看该add操作是否成功
  • (3)当需要时可扩展集合的容量。
  • 问题2:数组实现的队列,向中间插入元素是不是很麻烦,需要把很多元素移位。
  • 问题2解决方案:把数组看做环形的,可以出去在队列的数组实现中把元素移位的需要
  • 问题3:老师上课所说的front和rear的位置重合时怎么判断到底是空还是满
  • 问题3解决方案:这里记录一种新奇的方法,即记录rear和front移动的方向,从而确定它到底是空还是满。

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

  • 问题1:在使用链表实现二叉排序树的时候链表莫得了。
  • 问题1解决方案:在私有变量中定义一个root保存好根节点,根节点一丢整个链表就没了。
  • 问题2:用链表实现队列和栈似乎有区别
  • 问题2解决方案:我们必须要操作链表的两端,于是,除了一个指向链表首元素的引用(称为head)之外,还需要跟踪另一个指向链表末元素的引用(称为tail)。还要用一个整型变量count来跟踪队列中的元素数。

代码托管

点评过的同学博客和代码

  • 本周结对学习情况

    • 20182308
    • 结对学习内容
      • 我们一起交换了有关链表的理解,互相帮助了一下各自链表的使用。
  • 上周博客互评情况

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

这一周学的东西就概念或者说原理来说是不难的,但是极其重要,相当于是一种工具,我们这几周做的实验和实践其实都是与这息息相关的,而我们在学习的过程中着重于链表对于栈和队列的实现,链表如果能学通,后面的实验和实践应该好做不少。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 130/130 2/2 23/23
第二周 451/581 3/5 42/67
第三周 451/581 3/5 42/67
第四周 617/1068 2/7 28/95
第五周 632/1700 2/9 17/112
第六周 666/2366 1/10 22/134
第七周 1666/4032 3/13 42/178
  • 计划学习时间:50小时

  • 实际学习时间:42小时

  • 改进情况:在编代码之前要想很久相关的逻辑和算法,现在逻辑的思考比敲代码重要了。

参考资料

posted on 2019-11-03 16:45  shouko  阅读(149)  评论(0编辑  收藏  举报