20172323 2018-2019-2 《程序设计与数据结构》第2周学习总结

20172323 2018-2019-2 《程序设计与数据结构》第2周学习总结

教材学习内容总结

本周学习了第三章集合概述——栈和第四章链式结构——栈
第三章定义了与集合相关的概念与术语,讨论了集合的抽象设计以及继承、多态性、泛型和接口等多项问题,最后经过栈这一集合展现了与集合设计、实现和使用等有关的问题。
第四章学习了一种建立数据结构的技术,利用引用来建立对象之间的连接php

3.1 集合

这一节主要在讲与集合相关的概念和术语,有一些概念比较难以理解。html

  • 集合是一种汇集、组织了其余对象的对象。
  • 集合能够分为线性集合和非线性集合(从某种程度上,非线性集合也许根本就没有任何组织形式)
  • 集合中元素一般是按它们添加到集合的顺序或者是按元素之间的某种内在关系来组织的。
  • 抽象数据类型
    • 抽象能隐藏某些细节。而集合隐藏了其的某些细节并定义了一些接口操做,用户能够经过这些接口操做管理集合中的对象。所以集合是一种隐藏了实现细节的抽象。
    • 数据类型是一组值及做用于这些数值上的各类操做
    • 抽象数据类型(ADT)是一种在程序设计语言中还没有定义其值和操做的数据类型。
    • 数据结构是一种用于实现集合的基本编程结构

3.2 栈集合

  • 栈的元素是按后进先出的方法进行处理的,最后进入栈中的元素最早被移出

3.3 主要的面向对象概念

  • 继承与多态性
  • 泛型:能够定义一个类,它能够在存储、操做和管理在实例化以前没有指定是何种类型的对象。所以,任意类型的对象均可以存储在这个类中。如
class Box<T>//用于管理类型T的对象的声明和代码
Box<Widget> box1 = new Box<Widget>//变量box1的类型为Box<Widget>

3.6 栈ADT

  • Java接口定义了一个抽象方法集,有助于把抽象数据类型的概念与其实现分隔开来
  • 经过接口名做为返回类型,方法就不会局限于实现栈的任何特定类

4.1连接做为引用

  • 对象引用变量能够用来建立链式结构
  • 链式结构是一种数据结构,它使用对象引用变量来建立对象之间的连接,其中的一个对象能够指向另外一个对象,从而在链表中建立一个对象的线性次序。在链表中存储的对象一般泛称为该链表的结点(node)。

4.2管理链表

  • 访问元素
Person current = first;
for (int i = 0; i < 3; i++){
    current = current.next;
}

这种方法能够访问指定位置的结点元素。在循环中,须要定义使用“current”指针而不是“first”指针,不然一旦first指针指向第二个元素,就没有指向第一个的指针了,因而第一个结点将没法被访问。node

String searchstring = "Tom Jones";
Person current = first;
while ((not(current.equals(searchstring)) && (current.next != null)
current = current.next;

这种方法能够访问指定内容的结点。git

  • 插入结点:改变引用顺序是维护链表的关键
    web

  • 删除结点编程

  • 无连接的元素
    - 定义一个单独的结点类,将全部元素连接在一块儿
    - 双向链表

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

  • 问题1:抽象数据类型(ADT)的理解
  • 问题1解决方案:读完教材上关于ADT的一些解释,仍是对这一律念比较的模糊。首先,数据类型是一组性质相同的值的集合以及定义在此集合上的一些操做的总称;抽象是指抽取出事物具备广泛性的本质。它是抽出问题的特征而忽略非本质的细节,是对具体事物的一个归纳。抽象是一种思考问题的方式,它隐藏了复杂的细节,只保留了实现目标所必须的信息。把这两个概念结合一下,抽象数据类型是一种在程序设计语言中还没有定义其值和操做的数据类型。用实例来展现抽象数据类型,就好比用线性表描述学生成绩表,用树或图描述遗传关系。

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

  • 问题1:PP3.2的题目中,如何反向显示每一个词的字符以及正确理解
  • 问题1解决方案:
    • 一开始读题时,个人理解是句子中单词的顺序不变,但每一个词的字母顺序颠倒。好比“Pink Floyd”颠倒后成为“kinP dyolF”。但后来与同窗的交流中,好像是本身理解过分了,可能只是颠倒一下单词顺序就好了,结果应该是“Floyd Pink”。两个彷佛都有道理,因此我两个都作了一遍。
    • 由于是要用数组来表示栈,上学期作中缀转后缀的实验时运用了一个“split”的方法,它能够将句子按特定的方式分隔开存入数组中。实现第一种时,我使用了内外两层循环,先将一个句子按空格分割把每个单词分别存入数组中,再将单词挨个颠倒字母顺序再进行输出拼接。实现第二种就很简单,将每一个单词存入数组再反向输出便可。
  • 问题2:蓝墨云测试活动中遇到的一些问题,详见博客

代码托管

上周考试错题总结

  • 错题1:Software systems need only to work to support the work of developers, maintainers, and users.
    A .True
    B .Flase
  • 错题2:Which of the following has the smallest time complexity?
    A .3n+5+2n
    B .logn+2
    C .3n+4
    D .nlogn
  • 解析:这是要找最小时间复杂度。根据下图,可知logn是最小的。

结对及互评

  • 博客中值得学习的或问题:
    • 内容充实,各方面都很详细
    • 课程学习中有本身的思考,很能启发我学习的灵感
  • 基于评分标准,我给谭鑫的博客打分:5分。得分状况以下:
    正确使用Markdown语法(加1分):
    模板中的要素齐全(加1分)
    教材学习中的问题和解决过程, 一个问题加1分
    代码调试中的问题和解决过程, 一个问题加1分数组

  • 基于评分标准,我给方艺雯的博客打分:5分。得分状况以下:、
    正确使用Markdown语法(加1分):
    模板中的要素齐全(加1分)
    教材学习中的问题和解决过程, 一个问题加1分
    代码调试中的问题和解决过程, 一个问题加1分数据结构

点评过的同窗博客和代码

其余

这周的学习怎么说呢,是自我感受良好,看见同窗们写的博客以及代码做业,真是有些相形见绌、自愧不如的感受。好比蓝墨云的做业就是审题不仔细加上课堂上也没有彻底弄懂,致使最终事倍功半。学习

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0/0 1/1 8/8
第二周 470/470 1/2 12/20

参考资料

相关文章
相关标签/搜索