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

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

教材学习内容总结

  • 算法分析

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

2.在n很小时算法差别很小,但是当n很大时,增长函数之间的差别就很明显。

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

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

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

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

7.所有具有相同阶次的算法,从运行效率的角度来说都认为是等价的。

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

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

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

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,

操作 说明
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
第二、三周 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

参考资料

posted @ 2019-11-03 15:41  20182331  阅读(152)  评论(0编辑  收藏  举报