zoukankan      html  css  js  c++  java
  • 20172321 2018-2019-1 《程序设计与数据结构》第二周学习总结

    教材学习内容总结

    第三章:集合概述-栈

    • 3.1集合

      • 集合是一种隐藏了实现细节的抽象。
      • 集合可以分为两大类:包括线性集合和非线性集合。
      • 抽象:抽象能隐藏某些细节,就例如书上的例子,汽车的方向盘等控制装置就是一种抽象,让我们不用关心底层细节就能控制整个操作过程。
      • 抽象数据类型:一个抽象数据类型(ADT)是由数据和在该数据上所实施的操作构成的集合,一个ADT有名称、值域和一组允许执行的操作。
      • 数据结构是一种用于实现集合的编程结构集。我们可以利用线性数据结构来实现非线性集合。
    • 3.2栈集合

      • 栈(stack)是一种线性集合,其元素添加和删除都在同一端进行。
      • 栈的元素是按照后进先出(LIFO)(即 Last in ,first out)的方法进行处理的,最后进入栈中的元素最先被移出。
      • 栈的一个本性——所有操作都是在一端进行的,因此,在中间或者底部删除、增添就很困难。(如果需要访问集合中间或者底部的元素,那么不适合栈作为数据结构)
      • 栈的一些操作
      操作 描述
      push 添加一个元素到栈的顶部
      pop 从栈的顶部移出一个元素
      peek 查看栈顶部的元素
      isempty 确定栈是否为空
      size 确定栈的元素数目
    • 3.3主要的面向对象的概念

      • 多态引用是一个引用变量,他可以在不同地点引用不- 同类型的对象。术语“多态性”可定义为“具有多种形式”。通过多态引用调用的某个方法,在每次调用的时候都可以发生变化。
      • 继承可用于创建一个类层次,一个引用变量可用于指向与之相关的任意对象。继承就是从已有类派生出一个新类的过程。新类自动地含有初始类的部分和全部变量和方法。
      • 泛型(generic type):一个集合所管理的对象的类型要在实例化该集合对象时才确定。泛型保证了集合中对象类型的兼容性。
    • 3.5异常

      • 异常(exception)就是一种对象,它定义了一种非正常或错误的情况。异常有程序或运行时环境抛出,可以按预期的被捕获或被正确处理。
    • 3.6栈ADT

      • 栈接口类中的各个方法
    public interface Stack<T>
    {
        
        public void push (T element);
    
        public T pop();
        
        public T peek();
        
        public boolean isEmpty();
        
        public int size();
        
        public String toString();
    }
    
    • 3.8ArrayStack类
      • 泛型(包括泛型数组)不能被实例化。这就是我们必须创建一个存储Object引用的数组,然后把他转换成泛型数组的原因。
      stack = (T[])(new Object[initialCapiry])
      

    第四章:链式结构——栈

    • 4.1链接做引用
      • 对象引用变量可以用来创建链式结构,链式结构是一种数据结构
        -对象引用变量存放的是对象的地址,表示对象在内存中的存储位置
        -在链表中存储的对象通常泛称为该链表的结点,注:需要一个单独的引用变量来表示链表的首结点,链表终止于其next引用为空的结点
    • 4.2管理链表
      • 改变引用顺序是维护链表的关键
      • 处理链表的首结点需要进行一些特殊的处理,我的理解是,如果处理首结点时没有注意front引用,就可能导致整条链表的丢失。
    • 4.5使用栈来穿越迷宫
      • 可以用栈来模拟递归处理,以跟踪恰当的数据
    • 4.6用链表实现栈
      • 这一章用链表实现栈LinkedStack和上一章用数组实现栈ArrayStack联系很大,各有优劣,学习的时候应该举一反三,相互思考。

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

    • 问题1:不能明白泛型到底是什么,可以怎么使用
    • 解答:泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。;泛型的参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口和泛型方法。虽然还是有点懵逼,但是约莫大概也许是明白了一部分

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

    • 在编写完pp3.2并且运行的时候,发现了一个诡异的错误,就是它只会把最后一个入栈的字符弹出,后面的全是null。

    • 最后经过调试,发现是写栈的时候出了一点问题,指针没有正确的移动。

    代码托管

    PP3.9的代码没法上传到马云,在这里贴出来

    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.text.method.ScrollingMovementMethod;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.TextView;
    import java.util.Stack;
    
    public class MainActivity extends AppCompatActivity {
    
        Stack<String> stack = new Stack();
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Button button1 = (Button)findViewById(R.id.button1);
            button1.setOnClickListener(new myButtonOnClickListener1());
            Button button2 = (Button)findViewById(R.id.button2);
            button2.setOnClickListener(new myButtonOnClickListener2());
        }
    
        public class myButtonOnClickListener1 implements View.OnClickListener{
            public void onClick(View view){
                EditText editText1 = (EditText)findViewById(R.id.editText1);
                stack.push(editText1.getText().toString());
                EditText editText2 = (EditText)findViewById(R.id.editText2);
    
    
                editText2.setMovementMethod(ScrollingMovementMethod.getInstance());
                editText2.setText(editText2.getText(),TextView.BufferType.EDITABLE);
                editText2.setText(stack.toString(), TextView.BufferType.EDITABLE );
                System.out.println(editText2.getText().toString());
            }
        }
    
        public class myButtonOnClickListener2 implements View.OnClickListener{
            public void onClick(View view){
    
                EditText editText1 = (EditText)findViewById(R.id.editText1);
                stack.pop();
                EditText editText2 = (EditText)findViewById(R.id.editText2);
    
    
                editText2.setMovementMethod(ScrollingMovementMethod.getInstance());
                editText2.setSelection(editText2.getText().length(),editText2.getText().length());
                editText2.setText(stack.toString(),TextView.BufferType.EDITABLE);
                System.out.println(editText2.getText().toString());
            }
        }
    
    

    上周考试错题总结

    • 1.Which Growth function has the highest order?

      • A .O(n log n)
      • B .O(n2)
      • C .O(2n)
      • D .O(log n)
      • 正确答案: C 你的答案: B
    • 解析:c(常量)<㏒₂n < n < n㏒₂n < n²< n³ < 2ⁿ < 3ⁿ< n!很明显,这道题如果把B当作n^2就会选B了。

    • 2.Which of the following has the smallest time complexity?

      • A .3n+5+2n
      • B .logn+2
      • C .3n+4
      • D .nlogn
      • 正确答案: B 你的答案: C
    • 解析:㏒₂n < n,做题的时候没有记熟,想当然的选了C

    结对及互评

    本周结对学习情况

    • [20172324曾程](http://www.cnblogs.com/amberR/p/9670328.html)
    • 博客中值得学习的或问题:
      • 内容详略得当;
      • 代码调试环节比较详细;
    • 基于评分标准,我给本博客打分:14分。得分情况如下:
      • 正确使用Markdown语法(加1分)
      • 模板中的要素齐全(加1分)
      • 教材学习中的问题和解决过程, 加4分
      • 代码调试中的问题和解决过程, 加4分
      • 本周有效代码超过300分行,加2分
      • 其他加分,加2分
      • 排版精美的加一分
      • 进度条中记录学习时间与改进情况的加1分

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积)
    目标 5000行 30篇 400小时
    第一周 0/0 1/1 8/8
    第二周 671/671 1/2 17/25

    参考资料

  • 相关阅读:
    Visual Studio 2010 Preview (cont.)
    Office VBA 进阶(开篇)
    Two cool debugger tips that I learnt today
    Send GMail
    Google Email Uploader
    看看.NET 4.0 都有些什么?
    XML Serializer in .NET
    Timeloc: 一个Adobe AIR程序
    SDC task library 一个MSBuild Task的有益补充。
    不考虑促销活动的百货业态供应商结算设计
  • 原文地址:https://www.cnblogs.com/N-idhogg/p/9671595.html
Copyright © 2011-2022 走看看