• 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

    参考资料

  • 相关阅读:
    ndoejs解析req,伪造http请求
    ndoejs创建多重文件夹
    路径path的正则通配符-nodejs
    例题1.5 快速排序
    例题1.3 整数划分问题
    sdcf day4 qaq模拟赛总结
    P1168 中位数
    浅谈LCA
    sdcf day1 qwq比赛题解
    2019山东夏令营划水记
  • 原文地址:https://www.cnblogs.com/gao-kuanrang/p/11787436.html
Copyright © 2020-2023  润新知