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

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

教材学习内容总结

  • 算法分析

1.增加函数:表示问题(n)大小与咱们但愿最优化的值之间的关系,该函数表示了该算法的时间复杂度或空间复杂度html

2.在n很小时算法差异很小,可是当n很大时,增加函数之间的差异就很明显。前端

3.渐进复杂度称为算法的阶次(order)。git

4.O()记法称为大O记法。算法

5.算法的阶次是忽略该算法的增加函数中的常量和其余次要项,只保留主项而得出的。后端

6.无论问题是大是小,运行赋值语句和if语句一次,其复杂度就为O(1)。数组

7.全部具备相同阶次的算法,从运行效率的角度来讲都认为是等价的。数据结构

8.增加函数及其渐进复杂度
函数

9.嵌套循环的复杂度度分析:内层循环的复杂度乘之外层循环的复杂度。学习

10.循环运行的复杂度分析:肯定该循环体的阶次n,而后用该循环要运行的次数乘以它。循环的时间复杂度等于循环的复杂度乘以该循环的次数。测试

1.栈是一种线性集合,遵循后进先出的原则。

  1. 操做 描述
    push 添加一个元素到栈的顶部
    pop 从栈的顶部移除一个元素
    peek 查看栈顶部的元素
    isempty 肯定栈是否为空
    size 肯定栈的元素数目

3.栈的全部操做都是在一端进行的

4.类型兼容性:把一个对象赋给引用的特定赋值是否合法。类型检查:Java会自动在编译时标记出不合法的赋值。

5.可利用继承和多态来建立能够储存任意类型的对象的集合。

6.泛型:定义一个类,能够储存、操做和管理一些实例化以前没有制定类型的对象。

7.栈是计算后缀表达式的理性数据结构。

8.堆栈:堆栈是一种之后进先出方式(LIFO)管理数据的线性数据结构。

  • 链表

1.对象引用变量能够用来建立链式结构。

2.在链表中储存的对象泛称为该链表的结点。

3.链表由一些对象构成,其中每一个对象指向了链表中下一个对象。

4.在Java语言中,全部动态建立的对象都来自于一个名为系统堆或自由储存的内存区

5.访问元素:惟一方法是从第一个元素开始,顺着该链表往下进行。

6.插入结点: 结点能够插入到链表的前端,中间和后端,改变引用顺序是维护链表的关键。

7.删除结点:无论删除哪一个结点,都要保证链表的完整性。

  • 队列

1.队列是一种线性集合,其元素从一端加入,从另外一端删除,按先入先出的方式处理。

2.前端(队首):front、head,末端(队尾):rear、tail,

  1. 操做 说明
    enqueue 向队列末端添加一个元素
    dequeue 从队列前端删除一个元素
    first 考察队列前端的那一个元素
    isEmpty 断定队列是否为空
    size 断定队列中的元素数目
    toString 返回队列的字符串表示

5.Java集合API提供了Queue接口,由多个类来实现。

6.栈的首要做用是颠倒顺序,队列的首要做用是保持顺序。

  • 用链表实现队列

1.指向首元素的引用head,指向链表末的引用tail,整型变量count来跟踪队列中的元素数目。

2.必须一直认真地,精准地维护特殊状况下地引用

3.对于一个空队列,head,tail引用都为null,count则为0.

4.enqueue:将当前末元素的next引用设置指向这个新元素,从新将tail设置为指向这个新添加的末元素。该操做的复杂度为O(1).

5.dequeue:先判断队列是否有元素,若是没有,抛出异常EmptyCollectionException,若是有元素,则正常删除第一个元素,若是只有惟一元素,则删除队列元素后,队列就为空,把tail引用设置为null。该操做复杂度为O(1).

6.enqueue和dequeue操做做用于队列的对立端。

  • 用数组实现队列

1.因为队列操做会修改集合的两端,所以将一端固定于索引0处要求移动元素。

2.因为队列处理会影响到该集合的两端,所以从队列中删除元素的时候,该策略要求移动元素。

3.非环形数组实现的元素移位,将产生O(n)的复杂度。

4.把数组看做是环形的,能够除去在队列的数组实现中把元素移位的须要。

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

问题1:队列、链表和堆栈三者的问题
问题1解决方案:队列和堆栈是两个相似链表的线性数据结构,但在使用时有更多的限制。对于通常的链表,能够经过链表的任意位置插入和删除节点进行修改,可是队列只能在一端加入节点(入队)(入栈),在另外一端一处节点(出队)(出栈),所以队列是先进先出(FIFO)数据结构,堆栈是后进先出(LIFO)数据结构。

问题2:节点是什么意思。
问题2解决方案:能够说是结构体,节点就是一个带有指针指向的结构体,把相邻的点关联起来,能够把链表想象成火车,节点就是其中一节节的车箱,经过通道和先后车箱相连。

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

问题1:在实现ArrayOrderedListTest测试时,我遇到了显示最后一个数字时显示为null。
问题1解决方案:我对前面ArrayList类检查时,发现我在显示last时,将rear-1不当心写成rear了,因此它所读取的是最后一个后边的,因此确定为空

代码托管

上周考试错题总结

  • 上周无测试

结对及互评

  • 博客中值得学习的或问题:
    • 学习深入,本身有方法
    • 代码中值得学习的或问题:
    • 使用继承减小代码的重复编写
    • 基于评分标准,我给本博客打分:8分。得分状况以下:
    • 正确使用Markdown语法(加1分)
    • 模板中的要素齐全(加1分)
    • 教材学习中的问题和解决过程, 一个问题加1分
    • 代码调试中的问题和解决过程, 一个问题加1分
    • 有动手写新代码的加1分
    • 结对学习状况真实可信的加1分

点评过的同窗博客和代码

  • 本周结对学习状况
  • 20182309
    • 结对学习内容
      • 教材第12章、第14章和教材第15章

      • 阅读课本章节内容
      • 代码托管到码云上
      • 完成课后自测题,并参考答案学习
      • 完成课后练习题
      • 完成程序设计项目,至少完成pp14.1,pp14.7,pp15.1,pp15.

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 109/109 2/2 20/20
第2、三周 729/838 2/4 47/67
第四周 750/1588 2/6 22/89
第五周 1588/2698 2/7 34/133
第六周 1350/4035 2/9 24/157
第九周 4701/7399 5/14 97/254

参考资料

相关文章
相关标签/搜索