zoukankan      html  css  js  c++  java
  • 20162309《程序设计与设计结构》第五周学习总结

    学号 20162309《程序设计与数据结构》第5周学习总结

    教材学习内容总结

    关于栈和数组以及链表的结合使用,包括使用链表和数组实现栈,和排序查找的巩固课上练习。同时开始对队列的学习,了解队列的基本操作规则,其中包括队列中的元素的进出规则(这里可以与栈进行比较),和队列的操作术语、操作细节。首先是关于栈的进阶学习,栈在定义上是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除运算,且栈中的元素进栈和出栈的规则与队列有很多不同的地方。栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。扩展内容:Java Collections API的基本结构:
    1.collections比一般数组要好,例如,若要将数组的内容转储到一个字符串,需要迭代整个数组,然后将内容连接成一个 String;而 Collections 的实现都有一个可用的toString() 实现。
    举一个代码的实例:
    import java.util.*;

    public class ArrayToList
    {
    public static void main(String[] args)
    {
    // This gives us nothing good
    System.out.println(args);

        // Convert args to a List of String
        List<String> argList = Arrays.asList(args);
        
        // Print them out
        System.out.println(argList);
    }
    

    }
    可以看出,在这里的返回的 List 是不可修改的,而且,由于 Arrays.asList() 使用 varargs 参数表示添加到 List 的元素,所以还可以使用它轻松地用以 new 新建的对象创建 List。同时可得Java Collections API 使这种转换变得容易。
    2.迭代的效率较低:一个集合(特别是由数组转化而成的集合)的内容转移到另一个集合,或者从一个较大对象集合中移除一个较小对象集合,这些事情在程序设计和编译的过程中很常见。
    在此情况下,迭代有很大的缺点:
    (1)每次添加或移除元素后重新调整集合将非常低效。
    (2 )每次在获取锁、执行操作和释放锁的过程中,都存在潜在的并发困境。
    (3)当添加或移除元素时,存取集合的其他线程会引起竞争条件。
    可以通过使用 addAll 或 removeAll,传入包含要对其添加或移除元素的集合作为参数,来避免所有这些问题。
    3. 用 for 循环遍历任何 Iterable:Java 5 中加入 Java 语言的最大的便利功能之一,增强的 for 循环,消除了使用 Java 集合的最后一道障碍。
    以前,开发人员必须手动获得一个 Iterator,使用 next() 获得 Iterator 指向的对象,并通过 hasNext() 检查是否还有更多可用对象。从 Java 5 开始,我们可以随意使用 for 循环的变种,它可以在幕后处理上述所有工作。
    实际上,这个增强适用于实现 Iterable 接口的任何对象,而不仅仅是 Collections。
    4.扩展 Collections API:Java Collections API 的一个最终观点:它总是适合加以扩展和修改,以满足开发人员的特定目的。
    二、栈的应用:栈和线性表类似,也是有两种存储结构,分别为顺序结构和链式结构。大部分情况下,栈使用前者,这和它的使用场景有关,因为通常情况下我们不会对栈进行频繁地,随机地插入,删除操作。

    5.关于结点:结点可以插入在链表的任意位置,当结点插入在链表的表头时,指向表头的引用指向新加的结点。链表中的各个引用会沿着表的结点移动到找到想要找到的结点,称为current,它表示正在被检查的当前结点。当current为第一个结点时,使用循环语句进行结点的寻找,找到后就可以插入新的结点,并开始下一轮的循环。

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

    • 问题1:关于双向链表:如何创建一个双向链表?
    • 问题1解决方案:链表由无数模块(struct)穿成一串组成,每个模块都有两个指针(双向链表),一个指向上一个模块,一个指向下一个模块,还有一些其他变量用来存储自己想要存储的内容。在网上查阅了一个关于双向链表结构以及运行的资料:
      //这里每一位=一个模块
      struct BIT
      {
      BIT* previousBit;//指向上一个结构体
      int theBit;//这一位数是什么
      BIT* nextBit;//指向下一个结构体
      };
      由一个类图进行具体化描述:

    这样还有一个好处,就是当我们遍历链表的时候,一旦碰到NULL值之后,就知道这个链表已经结束了,不能再遍历下去了。这样我们就使用了 NULL 做我们的终止符。

    • ...

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

    • 问题1:在课上进行单步跟踪查找指定元素的实验中,所使用的输入语句为Integer,但当使用int输入时编译会出现错误。

    • 问题1解决方案:String类的数组可以使用int方法进行输入,Ingeter是int的包装类,int的初值为0,Ingeter的初值为null。进行比较:
      ①无论如何,Integer与new Integer不会相等。不会经历拆箱过程,i3的引用指向堆,而i4指向专门存放他的内存(常量池),他们的内存地址不一样,所以为false
        ②两个都是非new出来的Integer,如果数在-128到127之间,则是true,否则为false
        java在编译Integer i2 = 128的时候,被翻译成-> Integer i2 = Integer.valueOf(128);而valueOf()函数会对-128到127之间的数进行缓存
        ③两个都是new出来的,都为false
        ④int和integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比

    • ...

    代码托管

    https://gitee.com/pdds2017/xty20162309-JavaFoundations2nd

    结对及互评

    本周与20162313苑洪铭同学共同学习关于链表使用和队列结构的知识,并共同进行了实验。

    本周结对学习情况

    - [结对同学学号1]https://home.cnblogs.com/u/yuanhongming/
    - 结对照片
    - 结对学习内容
        - 链表使用和结点使用
        -队列结构和队列工作规则
        - ...
    

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

    java中有许多可以工具,可以和以前所学的内容进行结合,对以前学习的知识进行一个提升,同时在辨析两个相似的方法时要学会找到其中的不同点和相似处。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第四周 244/244 1/1 14/14
    第五周 176/176 4/4 18/38
    第六周 500/1000 3/7 22/60
    第七周 300/1300 2/9 30/90
    • 计划学习时间:16小时

    • 实际学习时间:16小时

    • ...

  • 相关阅读:
    Google黑板报上连载的长文
    sql server2000 数据同步
    sql server 2000 数据同步(2)
    reset sql server express sa password
    Fetion分析之二:服务器地址从何而来——变态的配置文件(转)
    CentOS软件安装血泪经验(转)
    《Unix & Linux 大学教程》(转)
    有关CentOS6的man报错
    linux 命令行学习笔记
    ubuntu 無法掛載ntfs分區
  • 原文地址:https://www.cnblogs.com/Metwox/p/7667264.html
Copyright © 2011-2022 走看看